From 9c60296a87baf4aa253873c0c49558a69a36d2d0 Mon Sep 17 00:00:00 2001 From: Bjverde Date: Mon, 9 Mar 2020 23:13:20 -0300 Subject: [PATCH] :hammer: BASE #220 atulizando libs --- base/composer.json | 13 +- base/composer.lock | 339 ++++- .../components/font-awesome/component.json | 4 +- .../components/font-awesome/css/all.css | 83 +- .../components/font-awesome/css/all.min.css | 4 +- .../components/font-awesome/css/brands.css | 7 +- .../font-awesome/css/brands.min.css | 4 +- .../font-awesome/css/fontawesome.css | 78 +- .../font-awesome/css/fontawesome.min.css | 4 +- .../components/font-awesome/css/regular.css | 2 +- .../font-awesome/css/regular.min.css | 2 +- .../components/font-awesome/css/solid.css | 2 +- .../components/font-awesome/css/solid.min.css | 2 +- .../font-awesome/css/svg-with-js.css | 27 +- .../font-awesome/css/svg-with-js.min.css | 4 +- .../components/font-awesome/css/v4-shims.css | 26 +- .../font-awesome/css/v4-shims.min.css | 4 +- .../components/font-awesome/less/_core.less | 2 +- .../components/font-awesome/less/_icons.less | 25 +- .../components/font-awesome/less/_shims.less | 22 +- .../font-awesome/less/_variables.less | 45 +- .../components/font-awesome/less/brands.less | 5 +- .../font-awesome/less/fontawesome.less | 2 +- .../components/font-awesome/less/regular.less | 2 +- .../components/font-awesome/less/solid.less | 2 +- .../font-awesome/less/v4-shims.less | 2 +- .../components/font-awesome/package.json | 2 +- .../components/font-awesome/scss/_core.scss | 1 + .../components/font-awesome/scss/_icons.scss | 25 +- .../components/font-awesome/scss/_shims.scss | 22 +- .../font-awesome/scss/_variables.scss | 45 +- .../components/font-awesome/scss/brands.scss | 5 +- .../font-awesome/scss/fontawesome.scss | 2 +- .../components/font-awesome/scss/regular.scss | 2 +- .../components/font-awesome/scss/solid.scss | 2 +- .../font-awesome/scss/v4-shims.scss | 2 +- .../font-awesome/webfonts/fa-brands-400.eot | Bin 129352 -> 133034 bytes .../font-awesome/webfonts/fa-brands-400.svg | 298 ++-- .../font-awesome/webfonts/fa-brands-400.ttf | Bin 129048 -> 132728 bytes .../font-awesome/webfonts/fa-brands-400.woff | Bin 87352 -> 89824 bytes .../font-awesome/webfonts/fa-brands-400.woff2 | Bin 74508 -> 76548 bytes .../font-awesome/webfonts/fa-regular-400.eot | Bin 34388 -> 34390 bytes .../font-awesome/webfonts/fa-regular-400.svg | 22 +- .../font-awesome/webfonts/fa-regular-400.ttf | Bin 34092 -> 34092 bytes .../font-awesome/webfonts/fa-regular-400.woff | Bin 16804 -> 16800 bytes .../webfonts/fa-regular-400.woff2 | Bin 13580 -> 13600 bytes .../font-awesome/webfonts/fa-solid-900.eot | Bin 192116 -> 194078 bytes .../font-awesome/webfonts/fa-solid-900.svg | 311 ++-- .../font-awesome/webfonts/fa-solid-900.ttf | Bin 191832 -> 193792 bytes .../font-awesome/webfonts/fa-solid-900.woff | Bin 98020 -> 99004 bytes .../font-awesome/webfonts/fa-solid-900.woff2 | Bin 75440 -> 76120 bytes base/vendor/composer/ClassLoader.php | 4 +- base/vendor/composer/autoload_files.php | 4 + base/vendor/composer/autoload_psr4.php | 4 +- base/vendor/composer/autoload_static.php | 22 +- base/vendor/composer/installed.json | 357 ++++- .../container-interop/.gitignore | 3 - .../container-interop/LICENSE | 20 - .../container-interop/README.md | 148 -- .../container-interop/composer.json | 15 - .../docs/ContainerInterface-meta.md | 114 -- .../docs/ContainerInterface.md | 158 -- .../docs/Delegate-lookup-meta.md | 259 ---- .../container-interop/docs/Delegate-lookup.md | 60 - .../docs/images/interoperating_containers.png | Bin 25738 -> 0 bytes .../docs/images/priority.png | Bin 16252 -> 0 bytes .../docs/images/side_by_side_containers.png | Bin 16265 -> 0 bytes .../Interop/Container/ContainerInterface.php | 15 - .../Exception/ContainerException.php | 15 - .../Container/Exception/NotFoundException.php | 15 - base/vendor/firebase/php-jwt/README.md | 8 +- base/vendor/firebase/php-jwt/composer.json | 2 +- base/vendor/firebase/php-jwt/src/JWT.php | 165 +- base/vendor/guzzlehttp/guzzle/.php_cs | 23 + base/vendor/guzzlehttp/guzzle/CHANGELOG.md | 1322 +++++++++++++++++ base/vendor/guzzlehttp/guzzle/Dockerfile | 18 + base/vendor/guzzlehttp/guzzle/LICENSE | 19 + base/vendor/guzzlehttp/guzzle/README.md | 90 ++ base/vendor/guzzlehttp/guzzle/UPGRADING.md | 1203 +++++++++++++++ base/vendor/guzzlehttp/guzzle/composer.json | 59 + base/vendor/guzzlehttp/guzzle/src/Client.php | 511 +++++++ .../guzzlehttp/guzzle/src/ClientInterface.php | 87 ++ .../guzzle/src/Cookie/CookieJar.php | 316 ++++ .../guzzle/src/Cookie/CookieJarInterface.php | 84 ++ .../guzzle/src/Cookie/FileCookieJar.php | 91 ++ .../guzzle/src/Cookie/SessionCookieJar.php | 72 + .../guzzle/src/Cookie/SetCookie.php | 403 +++++ .../src/Exception/BadResponseException.php | 27 + .../guzzle/src/Exception/ClientException.php | 9 + .../guzzle/src/Exception/ConnectException.php | 37 + .../guzzle/src/Exception/GuzzleException.php | 23 + .../Exception/InvalidArgumentException.php | 7 + .../guzzle/src/Exception/RequestException.php | 192 +++ .../guzzle/src/Exception/SeekException.php | 27 + .../guzzle/src/Exception/ServerException.php | 9 + .../Exception/TooManyRedirectsException.php | 6 + .../src/Exception/TransferException.php | 6 + .../guzzle/src/Handler/CurlFactory.php | 585 ++++++++ .../src/Handler/CurlFactoryInterface.php | 27 + .../guzzle/src/Handler/CurlHandler.php | 45 + .../guzzle/src/Handler/CurlMultiHandler.php | 219 +++ .../guzzle/src/Handler/EasyHandle.php | 92 ++ .../guzzle/src/Handler/MockHandler.php | 195 +++ .../guzzlehttp/guzzle/src/Handler/Proxy.php | 55 + .../guzzle/src/Handler/StreamHandler.php | 544 +++++++ .../guzzlehttp/guzzle/src/HandlerStack.php | 277 ++++ .../guzzle/src/MessageFormatter.php | 185 +++ .../guzzlehttp/guzzle/src/Middleware.php | 254 ++++ base/vendor/guzzlehttp/guzzle/src/Pool.php | 134 ++ .../guzzle/src/PrepareBodyMiddleware.php | 111 ++ .../guzzle/src/RedirectMiddleware.php | 255 ++++ .../guzzlehttp/guzzle/src/RequestOptions.php | 263 ++++ .../guzzlehttp/guzzle/src/RetryMiddleware.php | 128 ++ .../guzzlehttp/guzzle/src/TransferStats.php | 126 ++ .../guzzlehttp/guzzle/src/UriTemplate.php | 237 +++ .../guzzlehttp/guzzle/src/functions.php | 394 +++++ .../guzzle/src/functions_include.php | 6 + base/vendor/guzzlehttp/promises/CHANGELOG.md | 65 + base/vendor/guzzlehttp/promises/LICENSE | 19 + base/vendor/guzzlehttp/promises/Makefile | 13 + base/vendor/guzzlehttp/promises/README.md | 504 +++++++ base/vendor/guzzlehttp/promises/composer.json | 34 + .../promises/src/AggregateException.php | 16 + .../promises/src/CancellationException.php | 9 + .../guzzlehttp/promises/src/Coroutine.php | 151 ++ .../guzzlehttp/promises/src/EachPromise.php | 229 +++ .../promises/src/FulfilledPromise.php | 82 + .../guzzlehttp/promises/src/Promise.php | 280 ++++ .../promises/src/PromiseInterface.php | 93 ++ .../promises/src/PromisorInterface.php | 15 + .../promises/src/RejectedPromise.php | 87 ++ .../promises/src/RejectionException.php | 47 + .../guzzlehttp/promises/src/TaskQueue.php | 66 + .../promises/src/TaskQueueInterface.php | 25 + .../guzzlehttp/promises/src/functions.php | 457 ++++++ .../promises/src/functions_include.php | 6 + base/vendor/guzzlehttp/psr7/CHANGELOG.md | 246 +++ base/vendor/guzzlehttp/psr7/LICENSE | 19 + base/vendor/guzzlehttp/psr7/README.md | 745 ++++++++++ base/vendor/guzzlehttp/psr7/composer.json | 49 + .../guzzlehttp/psr7/src/AppendStream.php | 241 +++ .../guzzlehttp/psr7/src/BufferStream.php | 137 ++ .../guzzlehttp/psr7/src/CachingStream.php | 138 ++ .../guzzlehttp/psr7/src/DroppingStream.php | 42 + base/vendor/guzzlehttp/psr7/src/FnStream.php | 158 ++ .../guzzlehttp/psr7/src/InflateStream.php | 52 + .../guzzlehttp/psr7/src/LazyOpenStream.php | 39 + .../guzzlehttp/psr7/src/LimitStream.php | 155 ++ .../guzzlehttp/psr7/src/MessageTrait.php | 213 +++ .../guzzlehttp/psr7/src/MultipartStream.php | 153 ++ .../guzzlehttp/psr7/src/NoSeekStream.php | 22 + .../vendor/guzzlehttp/psr7/src/PumpStream.php | 165 ++ base/vendor/guzzlehttp/psr7/src/Request.php | 151 ++ base/vendor/guzzlehttp/psr7/src/Response.php | 154 ++ base/vendor/guzzlehttp/psr7/src/Rfc7230.php | 18 + .../guzzlehttp/psr7/src/ServerRequest.php | 376 +++++ base/vendor/guzzlehttp/psr7/src/Stream.php | 267 ++++ .../psr7/src/StreamDecoratorTrait.php | 149 ++ .../guzzlehttp/psr7/src/StreamWrapper.php | 161 ++ .../guzzlehttp/psr7/src/UploadedFile.php | 316 ++++ base/vendor/guzzlehttp/psr7/src/Uri.php | 760 ++++++++++ .../guzzlehttp/psr7/src/UriNormalizer.php | 216 +++ .../guzzlehttp/psr7/src/UriResolver.php | 219 +++ base/vendor/guzzlehttp/psr7/src/functions.php | 899 +++++++++++ .../guzzlehttp/psr7/src/functions_include.php | 6 + base/vendor/phpmailer/phpmailer/README.md | 55 +- base/vendor/phpmailer/phpmailer/VERSION | 2 +- base/vendor/phpmailer/phpmailer/composer.json | 8 +- .../phpmailer/language/phpmailer.lang-af.php | 25 + .../phpmailer/language/phpmailer.lang-fa.php | 2 +- .../phpmailer/language/phpmailer.lang-nl.php | 2 + .../language/phpmailer.lang-pt_br.php | 2 +- .../phpmailer/language/phpmailer.lang-ru.php | 16 +- .../phpmailer/language/phpmailer.lang-uk.php | 22 +- .../phpmailer/phpmailer/src/Exception.php | 2 +- base/vendor/phpmailer/phpmailer/src/OAuth.php | 2 +- .../phpmailer/phpmailer/src/PHPMailer.php | 1248 ++++++++++------ base/vendor/phpmailer/phpmailer/src/POP3.php | 18 +- base/vendor/phpmailer/phpmailer/src/SMTP.php | 134 +- base/vendor/pimple/pimple/.php_cs.dist | 20 + base/vendor/pimple/pimple/.travis.yml | 29 +- base/vendor/pimple/pimple/CHANGELOG | 9 +- base/vendor/pimple/pimple/LICENSE | 2 +- base/vendor/pimple/pimple/composer.json | 8 +- .../pimple/pimple/ext/pimple/.gitignore | 30 - .../vendor/pimple/pimple/ext/pimple/README.md | 12 - .../vendor/pimple/pimple/ext/pimple/config.m4 | 63 - .../pimple/pimple/ext/pimple/config.w32 | 13 - .../pimple/pimple/ext/pimple/php_pimple.h | 137 -- base/vendor/pimple/pimple/ext/pimple/pimple.c | 1114 -------------- .../pimple/pimple/ext/pimple/pimple_compat.h | 81 - .../pimple/pimple/ext/pimple/tests/001.phpt | 45 - .../pimple/pimple/ext/pimple/tests/002.phpt | 15 - .../pimple/pimple/ext/pimple/tests/003.phpt | 16 - .../pimple/pimple/ext/pimple/tests/004.phpt | 30 - .../pimple/pimple/ext/pimple/tests/005.phpt | 27 - .../pimple/pimple/ext/pimple/tests/006.phpt | 51 - .../pimple/pimple/ext/pimple/tests/007.phpt | 22 - .../pimple/pimple/ext/pimple/tests/008.phpt | 29 - .../pimple/pimple/ext/pimple/tests/009.phpt | 13 - .../pimple/pimple/ext/pimple/tests/010.phpt | 45 - .../pimple/pimple/ext/pimple/tests/011.phpt | 19 - .../pimple/pimple/ext/pimple/tests/012.phpt | 28 - .../pimple/pimple/ext/pimple/tests/013.phpt | 33 - .../pimple/pimple/ext/pimple/tests/014.phpt | 30 - .../pimple/pimple/ext/pimple/tests/015.phpt | 17 - .../pimple/pimple/ext/pimple/tests/016.phpt | 24 - .../pimple/pimple/ext/pimple/tests/017.phpt | 17 - .../pimple/pimple/ext/pimple/tests/017_1.phpt | 17 - .../pimple/pimple/ext/pimple/tests/018.phpt | 23 - .../pimple/pimple/ext/pimple/tests/019.phpt | 18 - .../pimple/pimple/ext/pimple/tests/bench.phpb | 51 - .../pimple/ext/pimple/tests/bench_shared.phpb | 25 - base/vendor/pimple/pimple/phpunit.xml.dist | 4 + .../pimple/pimple/src/Pimple/Container.php | 14 +- .../src/Pimple/Psr11/ServiceLocator.php | 2 +- .../PimpleServiceProviderInterfaceTest.php | 9 +- .../pimple/src/Pimple/Tests/PimpleTest.php | 165 +- .../src/Pimple/Tests/Psr11/ContainerTest.php | 7 +- .../Pimple/Tests/Psr11/ServiceLocatorTest.php | 35 +- .../src/Pimple/Tests/ServiceIteratorTest.php | 4 +- .../psr/log/Psr/Log/LoggerInterface.php | 2 + base/vendor/psr/log/Psr/Log/LoggerTrait.php | 2 + base/vendor/psr/log/Psr/Log/NullLogger.php | 2 + .../log/Psr/Log/Test/LoggerInterfaceTest.php | 4 +- .../psr/log/Psr/Log/Test/TestLogger.php | 1 + base/vendor/psr/log/README.md | 6 + base/vendor/psr/log/composer.json | 2 +- base/vendor/ralouphie/getallheaders/LICENSE | 21 + base/vendor/ralouphie/getallheaders/README.md | 27 + .../ralouphie/getallheaders/composer.json | 26 + .../getallheaders/src/getallheaders.php | 46 + base/vendor/slim/slim/Slim/App.php | 4 +- base/vendor/slim/slim/Slim/Container.php | 16 +- .../slim/Slim/DefaultServicesProvider.php | 2 +- .../Slim/Exception/ContainerException.php | 4 +- .../ContainerValueNotFoundException.php | 4 +- .../slim/slim/Slim/Http/Environment.php | 1 - .../Interfaces/Http/EnvironmentInterface.php | 2 +- base/vendor/slim/slim/composer.json | 1 - 240 files changed, 20011 insertions(+), 4129 deletions(-) delete mode 100644 base/vendor/container-interop/container-interop/.gitignore delete mode 100644 base/vendor/container-interop/container-interop/LICENSE delete mode 100644 base/vendor/container-interop/container-interop/README.md delete mode 100644 base/vendor/container-interop/container-interop/composer.json delete mode 100644 base/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md delete mode 100644 base/vendor/container-interop/container-interop/docs/ContainerInterface.md delete mode 100644 base/vendor/container-interop/container-interop/docs/Delegate-lookup-meta.md delete mode 100644 base/vendor/container-interop/container-interop/docs/Delegate-lookup.md delete mode 100644 base/vendor/container-interop/container-interop/docs/images/interoperating_containers.png delete mode 100644 base/vendor/container-interop/container-interop/docs/images/priority.png delete mode 100644 base/vendor/container-interop/container-interop/docs/images/side_by_side_containers.png delete mode 100644 base/vendor/container-interop/container-interop/src/Interop/Container/ContainerInterface.php delete mode 100644 base/vendor/container-interop/container-interop/src/Interop/Container/Exception/ContainerException.php delete mode 100644 base/vendor/container-interop/container-interop/src/Interop/Container/Exception/NotFoundException.php create mode 100644 base/vendor/guzzlehttp/guzzle/.php_cs create mode 100644 base/vendor/guzzlehttp/guzzle/CHANGELOG.md create mode 100644 base/vendor/guzzlehttp/guzzle/Dockerfile create mode 100644 base/vendor/guzzlehttp/guzzle/LICENSE create mode 100644 base/vendor/guzzlehttp/guzzle/README.md create mode 100644 base/vendor/guzzlehttp/guzzle/UPGRADING.md create mode 100644 base/vendor/guzzlehttp/guzzle/composer.json create mode 100644 base/vendor/guzzlehttp/guzzle/src/Client.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/ClientInterface.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Cookie/CookieJar.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Cookie/FileCookieJar.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/ClientException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/ConnectException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/GuzzleException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/InvalidArgumentException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/RequestException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/TooManyRedirectsException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Exception/TransferException.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/CurlFactory.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/CurlHandler.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Handler/StreamHandler.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/HandlerStack.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/MessageFormatter.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Middleware.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/Pool.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/RequestOptions.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/RetryMiddleware.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/TransferStats.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/UriTemplate.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/functions.php create mode 100644 base/vendor/guzzlehttp/guzzle/src/functions_include.php create mode 100644 base/vendor/guzzlehttp/promises/CHANGELOG.md create mode 100644 base/vendor/guzzlehttp/promises/LICENSE create mode 100644 base/vendor/guzzlehttp/promises/Makefile create mode 100644 base/vendor/guzzlehttp/promises/README.md create mode 100644 base/vendor/guzzlehttp/promises/composer.json create mode 100644 base/vendor/guzzlehttp/promises/src/AggregateException.php create mode 100644 base/vendor/guzzlehttp/promises/src/CancellationException.php create mode 100644 base/vendor/guzzlehttp/promises/src/Coroutine.php create mode 100644 base/vendor/guzzlehttp/promises/src/EachPromise.php create mode 100644 base/vendor/guzzlehttp/promises/src/FulfilledPromise.php create mode 100644 base/vendor/guzzlehttp/promises/src/Promise.php create mode 100644 base/vendor/guzzlehttp/promises/src/PromiseInterface.php create mode 100644 base/vendor/guzzlehttp/promises/src/PromisorInterface.php create mode 100644 base/vendor/guzzlehttp/promises/src/RejectedPromise.php create mode 100644 base/vendor/guzzlehttp/promises/src/RejectionException.php create mode 100644 base/vendor/guzzlehttp/promises/src/TaskQueue.php create mode 100644 base/vendor/guzzlehttp/promises/src/TaskQueueInterface.php create mode 100644 base/vendor/guzzlehttp/promises/src/functions.php create mode 100644 base/vendor/guzzlehttp/promises/src/functions_include.php create mode 100644 base/vendor/guzzlehttp/psr7/CHANGELOG.md create mode 100644 base/vendor/guzzlehttp/psr7/LICENSE create mode 100644 base/vendor/guzzlehttp/psr7/README.md create mode 100644 base/vendor/guzzlehttp/psr7/composer.json create mode 100644 base/vendor/guzzlehttp/psr7/src/AppendStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/BufferStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/CachingStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/DroppingStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/FnStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/InflateStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/LazyOpenStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/LimitStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/MessageTrait.php create mode 100644 base/vendor/guzzlehttp/psr7/src/MultipartStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/NoSeekStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/PumpStream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/Request.php create mode 100644 base/vendor/guzzlehttp/psr7/src/Response.php create mode 100644 base/vendor/guzzlehttp/psr7/src/Rfc7230.php create mode 100644 base/vendor/guzzlehttp/psr7/src/ServerRequest.php create mode 100644 base/vendor/guzzlehttp/psr7/src/Stream.php create mode 100644 base/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php create mode 100644 base/vendor/guzzlehttp/psr7/src/StreamWrapper.php create mode 100644 base/vendor/guzzlehttp/psr7/src/UploadedFile.php create mode 100644 base/vendor/guzzlehttp/psr7/src/Uri.php create mode 100644 base/vendor/guzzlehttp/psr7/src/UriNormalizer.php create mode 100644 base/vendor/guzzlehttp/psr7/src/UriResolver.php create mode 100644 base/vendor/guzzlehttp/psr7/src/functions.php create mode 100644 base/vendor/guzzlehttp/psr7/src/functions_include.php create mode 100644 base/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php create mode 100644 base/vendor/pimple/pimple/.php_cs.dist delete mode 100644 base/vendor/pimple/pimple/ext/pimple/.gitignore delete mode 100644 base/vendor/pimple/pimple/ext/pimple/README.md delete mode 100644 base/vendor/pimple/pimple/ext/pimple/config.m4 delete mode 100644 base/vendor/pimple/pimple/ext/pimple/config.w32 delete mode 100644 base/vendor/pimple/pimple/ext/pimple/php_pimple.h delete mode 100644 base/vendor/pimple/pimple/ext/pimple/pimple.c delete mode 100644 base/vendor/pimple/pimple/ext/pimple/pimple_compat.h delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/001.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/002.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/003.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/004.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/005.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/006.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/007.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/008.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/009.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/010.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/011.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/012.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/013.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/014.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/015.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/016.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/017.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/017_1.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/018.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/019.phpt delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/bench.phpb delete mode 100644 base/vendor/pimple/pimple/ext/pimple/tests/bench_shared.phpb create mode 100644 base/vendor/ralouphie/getallheaders/LICENSE create mode 100644 base/vendor/ralouphie/getallheaders/README.md create mode 100644 base/vendor/ralouphie/getallheaders/composer.json create mode 100644 base/vendor/ralouphie/getallheaders/src/getallheaders.php diff --git a/base/composer.json b/base/composer.json index f0be7b27..b162f02a 100644 --- a/base/composer.json +++ b/base/composer.json @@ -3,11 +3,12 @@ "homepage" : "https://github.com/bjverde/formDin", "description" : "formDin FrameWork", "require" : { - "php" : ">=5.6.0", - "phpmailer/phpmailer" : "^6.0.0", - "components/font-awesome" : "^5.4.2", - "slim/slim" : "^3.12", - "tuupola/slim-basic-auth" : "^3.2", - "tuupola/slim-jwt-auth" : "^3.2" + "php" : ">=5.6.0" + ,"phpmailer/phpmailer" : "^6.0.0" + ,"components/font-awesome" : "^5.4.2" + ,"slim/slim" : "^3.12" + ,"tuupola/slim-basic-auth" : "^3.2" + ,"tuupola/slim-jwt-auth" : "^3.2" + ,"guzzlehttp/guzzle" : "^6.5" } } \ No newline at end of file diff --git a/base/composer.lock b/base/composer.lock index 09919d55..d4a0748a 100644 --- a/base/composer.lock +++ b/base/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "03e0bc383e6878f06b610adf65713396", + "content-hash": "e12ec4a5560dfc880bce1d3b4059c0e4", "packages": [ { "name": "components/font-awesome", - "version": "5.9.0", + "version": "5.12.1", "source": { "type": "git", "url": "https://github.com/components/font-awesome.git", - "reference": "1be57c473b964c8130f2dbd9edc4f64db5394114" + "reference": "f033e952d0e20684443c0466045deae61fd4e733" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/components/font-awesome/zipball/1be57c473b964c8130f2dbd9edc4f64db5394114", - "reference": "1be57c473b964c8130f2dbd9edc4f64db5394114", + "url": "https://api.github.com/repos/components/font-awesome/zipball/f033e952d0e20684443c0466045deae61fd4e733", + "reference": "f033e952d0e20684443c0466045deae61fd4e733", "shasum": "" }, "type": "component", @@ -39,84 +39,242 @@ "OFL-1.1" ], "description": "Font Awesome, the iconic SVG, font, and CSS framework.", - "time": "2019-06-07T02:02:10+00:00" + "time": "2020-02-05T15:33:46+00:00" }, { - "name": "container-interop/container-interop", - "version": "1.2.0", + "name": "firebase/php-jwt", + "version": "v5.1.0", "source": { "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + "url": "https://github.com/firebase/php-jwt.git", + "reference": "4566062c68f76f43d44f1643f4970fe89757d4c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/4566062c68f76f43d44f1643f4970fe89757d4c6", + "reference": "4566062c68f76f43d44f1643f4970fe89757d4c6", "shasum": "" }, "require": { - "psr/container": "^1.0" + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5" }, "type": "library", "autoload": { "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" + "Firebase\\JWT\\": "src" } }, "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt", + "time": "2020-02-24T23:15:03+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.2", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "homepage": "https://github.com/container-interop/container-interop", - "time": "2017-02-14T19:40:03+00:00" + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ], + "time": "2019-12-23T11:57:10+00:00" }, { - "name": "firebase/php-jwt", - "version": "v5.0.0", + "name": "guzzlehttp/promises", + "version": "v1.3.1", "source": { "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", - "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": " 4.8.35" + "phpunit/phpunit": "^4.0" }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, "autoload": { "psr-4": { - "Firebase\\JWT\\": "src" + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "time": "2016-12-20T10:07:11+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Neuman Vong", - "role": "Developer", - "email": "neuman+pear@twilio.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Anant Narayanan", - "role": "Developer", - "email": "anant@php.net" + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt", - "time": "2017-06-27T22:17:23+00:00" + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "time": "2019-07-01T23:21:34+00:00" }, { "name": "nikic/fast-route", @@ -166,16 +324,16 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.0.7", + "version": "v6.1.4", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59" + "reference": "c5e61d0729507049cec9673aa1a679f9adefd683" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/0c41a36d4508d470e376498c1c0c527aa36a2d59", - "reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c5e61d0729507049cec9673aa1a679f9adefd683", + "reference": "c5e61d0729507049cec9673aa1a679f9adefd683", "shasum": "" }, "require": { @@ -184,13 +342,9 @@ "php": ">=5.5.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", + "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.*" + "phpunit/phpunit": "^4.8 || ^5.7" }, "suggest": { "ext-mbstring": "Needed to send email in multibyte encoding charset", @@ -208,17 +362,17 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1" + "LGPL-2.1-only" ], "authors": [ - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, { "name": "Marcus Bointon", "email": "phpmailer@synchromedia.co.uk" }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, { "name": "Andy Prevost", "email": "codeworxtech@users.sourceforge.net" @@ -228,33 +382,33 @@ } ], "description": "PHPMailer is a full-featured email creation and transfer class for PHP", - "time": "2019-02-01T15:04:28+00:00" + "time": "2019-12-10T11:17:38+00:00" }, { "name": "pimple/pimple", - "version": "v3.2.3", + "version": "v3.3.0", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" + "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930", + "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930", "shasum": "" }, "require": { - "php": ">=5.3.0", + "php": "^7.2.5", "psr/container": "^1.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.2" + "symfony/phpunit-bridge": "^3.4|^4.4|^5.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "3.3.x-dev" } }, "autoload": { @@ -273,12 +427,12 @@ } ], "description": "Pimple, a simple Dependency Injection Container", - "homepage": "http://pimple.sensiolabs.org", + "homepage": "https://pimple.symfony.com", "keywords": [ "container", "dependency injection" ], - "time": "2018-01-21T07:42:36+00:00" + "time": "2020-03-03T09:12:48+00:00" }, { "name": "psr/container", @@ -539,16 +693,16 @@ }, { "name": "psr/log", - "version": "1.1.0", + "version": "1.1.2", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", "shasum": "" }, "require": { @@ -557,7 +711,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "autoload": { @@ -582,24 +736,63 @@ "psr", "psr-3" ], - "time": "2018-11-20T15:27:04+00:00" + "time": "2019-11-01T11:05:21+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "time": "2019-03-08T08:55:37+00:00" }, { "name": "slim/slim", - "version": "3.12.2", + "version": "3.12.3", "source": { "type": "git", "url": "https://github.com/slimphp/Slim.git", - "reference": "200c6143f15baa477601879b64ab2326847aac0b" + "reference": "1c9318a84ffb890900901136d620b4f03a59da38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/200c6143f15baa477601879b64ab2326847aac0b", - "reference": "200c6143f15baa477601879b64ab2326847aac0b", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38", + "reference": "1c9318a84ffb890900901136d620b4f03a59da38", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.2", "ext-json": "*", "ext-libxml": "*", "ext-simplexml": "*", @@ -656,7 +849,7 @@ "micro", "router" ], - "time": "2019-08-20T18:46:05+00:00" + "time": "2019-11-28T17:40:33+00:00" }, { "name": "tuupola/callable-handler", diff --git a/base/vendor/components/font-awesome/component.json b/base/vendor/components/font-awesome/component.json index f17e170e..110f9e92 100644 --- a/base/vendor/components/font-awesome/component.json +++ b/base/vendor/components/font-awesome/component.json @@ -1,10 +1,10 @@ { "name": "font-awesome", "repo": "components/font-awesome", - "version": "5.9.0", + "version": "5.12.1", "description": "Font Awesome, the iconic SVG, font, and CSS framework.", "styles": [ - "css/fontawesome-all.css" + "css/all.css" ], "files": [ "webfonts/fa-brands-400.eot", diff --git a/base/vendor/components/font-awesome/css/all.css b/base/vendor/components/font-awesome/css/all.css index 33611ba4..ba15e192 100644 --- a/base/vendor/components/font-awesome/css/all.css +++ b/base/vendor/components/font-awesome/css/all.css @@ -1,11 +1,12 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ .fa, .fas, .far, .fal, +.fad, .fab { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; @@ -440,6 +441,9 @@ readers do not read off random characters that represent icons */ .fa-bacon:before { content: "\f7e5"; } +.fa-bahai:before { + content: "\f666"; } + .fa-balance-scale:before { content: "\f24e"; } @@ -686,6 +690,9 @@ readers do not read off random characters that represent icons */ .fa-business-time:before { content: "\f64a"; } +.fa-buy-n-large:before { + content: "\f8a6"; } + .fa-buysellads:before { content: "\f20d"; } @@ -752,6 +759,9 @@ readers do not read off random characters that represent icons */ .fa-car-side:before { content: "\f5e4"; } +.fa-caravan:before { + content: "\f8ff"; } + .fa-caret-down:before { content: "\f0d7"; } @@ -1061,6 +1071,9 @@ readers do not read off random characters that represent icons */ .fa-compress:before { content: "\f066"; } +.fa-compress-alt:before { + content: "\f422"; } + .fa-compress-arrows-alt:before { content: "\f78c"; } @@ -1088,6 +1101,9 @@ readers do not read off random characters that represent icons */ .fa-copyright:before { content: "\f1f9"; } +.fa-cotton-bureau:before { + content: "\f89e"; } + .fa-couch:before { content: "\f4b8"; } @@ -1187,6 +1203,9 @@ readers do not read off random characters that represent icons */ .fa-d-and-d-beyond:before { content: "\f6ca"; } +.fa-dailymotion:before { + content: "\f952"; } + .fa-dashcube:before { content: "\f210"; } @@ -1457,6 +1476,9 @@ readers do not read off random characters that represent icons */ .fa-expand:before { content: "\f065"; } +.fa-expand-alt:before { + content: "\f424"; } + .fa-expand-arrows-alt:before { content: "\f31e"; } @@ -1622,6 +1644,9 @@ readers do not read off random characters that represent icons */ .fa-firefox:before { content: "\f269"; } +.fa-firefox-browser:before { + content: "\f907"; } + .fa-first-aid:before { content: "\f479"; } @@ -2042,12 +2067,15 @@ readers do not read off random characters that represent icons */ .fa-hashtag:before { content: "\f292"; } +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + .fa-hat-wizard:before { content: "\f6e8"; } -.fa-haykal:before { - content: "\f666"; } - .fa-hdd:before { content: "\f0a0"; } @@ -2183,6 +2211,9 @@ readers do not read off random characters that represent icons */ .fa-id-card-alt:before { content: "\f47f"; } +.fa-ideal:before { + content: "\f913"; } + .fa-igloo:before { content: "\f7ae"; } @@ -2216,6 +2247,9 @@ readers do not read off random characters that represent icons */ .fa-instagram:before { content: "\f16d"; } +.fa-instagram-square:before { + content: "\f955"; } + .fa-intercom:before { content: "\f7af"; } @@ -2522,6 +2556,9 @@ readers do not read off random characters that represent icons */ .fa-maxcdn:before { content: "\f136"; } +.fa-mdb:before { + content: "\f8ca"; } + .fa-medal:before { content: "\f5a2"; } @@ -2570,6 +2607,9 @@ readers do not read off random characters that represent icons */ .fa-meteor:before { content: "\f753"; } +.fa-microblog:before { + content: "\f91a"; } + .fa-microchip:before { content: "\f2db"; } @@ -2609,6 +2649,9 @@ readers do not read off random characters that represent icons */ .fa-mixcloud:before { content: "\f289"; } +.fa-mixer:before { + content: "\f956"; } + .fa-mizuni:before { content: "\f3cc"; } @@ -2660,6 +2703,9 @@ readers do not read off random characters that represent icons */ .fa-mountain:before { content: "\f6fc"; } +.fa-mouse:before { + content: "\f8cc"; } + .fa-mouse-pointer:before { content: "\f245"; } @@ -2741,6 +2787,9 @@ readers do not read off random characters that represent icons */ .fa-optin-monster:before { content: "\f23c"; } +.fa-orcid:before { + content: "\f8d2"; } + .fa-osi:before { content: "\f41a"; } @@ -2903,6 +2952,9 @@ readers do not read off random characters that represent icons */ .fa-pied-piper-pp:before { content: "\f1a7"; } +.fa-pied-piper-square:before { + content: "\f91e"; } + .fa-piggy-bank:before { content: "\f4d3"; } @@ -3083,6 +3135,9 @@ readers do not read off random characters that represent icons */ .fa-receipt:before { content: "\f543"; } +.fa-record-vinyl:before { + content: "\f8d9"; } + .fa-recycle:before { content: "\f1b8"; } @@ -3302,6 +3357,9 @@ readers do not read off random characters that represent icons */ .fa-shoe-prints:before { content: "\f54b"; } +.fa-shopify:before { + content: "\f957"; } + .fa-shopping-bag:before { content: "\f290"; } @@ -3671,6 +3729,9 @@ readers do not read off random characters that represent icons */ .fa-swatchbook:before { content: "\f5c3"; } +.fa-swift:before { + content: "\f8e1"; } + .fa-swimmer:before { content: "\f5c4"; } @@ -3869,6 +3930,9 @@ readers do not read off random characters that represent icons */ .fa-traffic-light:before { content: "\f637"; } +.fa-trailer:before { + content: "\f941"; } + .fa-train:before { content: "\f238"; } @@ -3956,6 +4020,9 @@ readers do not read off random characters that represent icons */ .fa-uikit:before { content: "\f403"; } +.fa-umbraco:before { + content: "\f8e8"; } + .fa-umbrella:before { content: "\f0e9"; } @@ -3974,6 +4041,9 @@ readers do not read off random characters that represent icons */ .fa-uniregistry:before { content: "\f404"; } +.fa-unity:before { + content: "\f949"; } + .fa-universal-access:before { content: "\f29a"; } @@ -4360,13 +4430,14 @@ readers do not read off random characters that represent icons */ @font-face { font-family: 'Font Awesome 5 Brands'; font-style: normal; - font-weight: normal; + font-weight: 400; font-display: auto; src: url("../webfonts/fa-brands-400.eot"); src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } .fab { - font-family: 'Font Awesome 5 Brands'; } + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } @font-face { font-family: 'Font Awesome 5 Free'; font-style: normal; diff --git a/base/vendor/components/font-awesome/css/all.min.css b/base/vendor/components/font-awesome/css/all.min.css index b7d052b6..d16a4d55 100644 --- a/base/vendor/components/font-awesome/css/all.min.css +++ b/base/vendor/components/font-awesome/css/all.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\f952"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\f955"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\f956"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\f957"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/base/vendor/components/font-awesome/css/brands.css b/base/vendor/components/font-awesome/css/brands.css index cd6f5bd7..46f4266d 100644 --- a/base/vendor/components/font-awesome/css/brands.css +++ b/base/vendor/components/font-awesome/css/brands.css @@ -1,14 +1,15 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @font-face { font-family: 'Font Awesome 5 Brands'; font-style: normal; - font-weight: normal; + font-weight: 400; font-display: auto; src: url("../webfonts/fa-brands-400.eot"); src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); } .fab { - font-family: 'Font Awesome 5 Brands'; } + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } diff --git a/base/vendor/components/font-awesome/css/brands.min.css b/base/vendor/components/font-awesome/css/brands.min.css index 29daa44f..1455bae3 100644 --- a/base/vendor/components/font-awesome/css/brands.min.css +++ b/base/vendor/components/font-awesome/css/brands.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:normal;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"} \ No newline at end of file +@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file diff --git a/base/vendor/components/font-awesome/css/fontawesome.css b/base/vendor/components/font-awesome/css/fontawesome.css index 1d2b35f2..b3e0c53a 100644 --- a/base/vendor/components/font-awesome/css/fontawesome.css +++ b/base/vendor/components/font-awesome/css/fontawesome.css @@ -1,11 +1,12 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ .fa, .fas, .far, .fal, +.fad, .fab { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; @@ -440,6 +441,9 @@ readers do not read off random characters that represent icons */ .fa-bacon:before { content: "\f7e5"; } +.fa-bahai:before { + content: "\f666"; } + .fa-balance-scale:before { content: "\f24e"; } @@ -686,6 +690,9 @@ readers do not read off random characters that represent icons */ .fa-business-time:before { content: "\f64a"; } +.fa-buy-n-large:before { + content: "\f8a6"; } + .fa-buysellads:before { content: "\f20d"; } @@ -752,6 +759,9 @@ readers do not read off random characters that represent icons */ .fa-car-side:before { content: "\f5e4"; } +.fa-caravan:before { + content: "\f8ff"; } + .fa-caret-down:before { content: "\f0d7"; } @@ -1061,6 +1071,9 @@ readers do not read off random characters that represent icons */ .fa-compress:before { content: "\f066"; } +.fa-compress-alt:before { + content: "\f422"; } + .fa-compress-arrows-alt:before { content: "\f78c"; } @@ -1088,6 +1101,9 @@ readers do not read off random characters that represent icons */ .fa-copyright:before { content: "\f1f9"; } +.fa-cotton-bureau:before { + content: "\f89e"; } + .fa-couch:before { content: "\f4b8"; } @@ -1187,6 +1203,9 @@ readers do not read off random characters that represent icons */ .fa-d-and-d-beyond:before { content: "\f6ca"; } +.fa-dailymotion:before { + content: "\f952"; } + .fa-dashcube:before { content: "\f210"; } @@ -1457,6 +1476,9 @@ readers do not read off random characters that represent icons */ .fa-expand:before { content: "\f065"; } +.fa-expand-alt:before { + content: "\f424"; } + .fa-expand-arrows-alt:before { content: "\f31e"; } @@ -1622,6 +1644,9 @@ readers do not read off random characters that represent icons */ .fa-firefox:before { content: "\f269"; } +.fa-firefox-browser:before { + content: "\f907"; } + .fa-first-aid:before { content: "\f479"; } @@ -2042,12 +2067,15 @@ readers do not read off random characters that represent icons */ .fa-hashtag:before { content: "\f292"; } +.fa-hat-cowboy:before { + content: "\f8c0"; } + +.fa-hat-cowboy-side:before { + content: "\f8c1"; } + .fa-hat-wizard:before { content: "\f6e8"; } -.fa-haykal:before { - content: "\f666"; } - .fa-hdd:before { content: "\f0a0"; } @@ -2183,6 +2211,9 @@ readers do not read off random characters that represent icons */ .fa-id-card-alt:before { content: "\f47f"; } +.fa-ideal:before { + content: "\f913"; } + .fa-igloo:before { content: "\f7ae"; } @@ -2216,6 +2247,9 @@ readers do not read off random characters that represent icons */ .fa-instagram:before { content: "\f16d"; } +.fa-instagram-square:before { + content: "\f955"; } + .fa-intercom:before { content: "\f7af"; } @@ -2522,6 +2556,9 @@ readers do not read off random characters that represent icons */ .fa-maxcdn:before { content: "\f136"; } +.fa-mdb:before { + content: "\f8ca"; } + .fa-medal:before { content: "\f5a2"; } @@ -2570,6 +2607,9 @@ readers do not read off random characters that represent icons */ .fa-meteor:before { content: "\f753"; } +.fa-microblog:before { + content: "\f91a"; } + .fa-microchip:before { content: "\f2db"; } @@ -2609,6 +2649,9 @@ readers do not read off random characters that represent icons */ .fa-mixcloud:before { content: "\f289"; } +.fa-mixer:before { + content: "\f956"; } + .fa-mizuni:before { content: "\f3cc"; } @@ -2660,6 +2703,9 @@ readers do not read off random characters that represent icons */ .fa-mountain:before { content: "\f6fc"; } +.fa-mouse:before { + content: "\f8cc"; } + .fa-mouse-pointer:before { content: "\f245"; } @@ -2741,6 +2787,9 @@ readers do not read off random characters that represent icons */ .fa-optin-monster:before { content: "\f23c"; } +.fa-orcid:before { + content: "\f8d2"; } + .fa-osi:before { content: "\f41a"; } @@ -2903,6 +2952,9 @@ readers do not read off random characters that represent icons */ .fa-pied-piper-pp:before { content: "\f1a7"; } +.fa-pied-piper-square:before { + content: "\f91e"; } + .fa-piggy-bank:before { content: "\f4d3"; } @@ -3083,6 +3135,9 @@ readers do not read off random characters that represent icons */ .fa-receipt:before { content: "\f543"; } +.fa-record-vinyl:before { + content: "\f8d9"; } + .fa-recycle:before { content: "\f1b8"; } @@ -3302,6 +3357,9 @@ readers do not read off random characters that represent icons */ .fa-shoe-prints:before { content: "\f54b"; } +.fa-shopify:before { + content: "\f957"; } + .fa-shopping-bag:before { content: "\f290"; } @@ -3671,6 +3729,9 @@ readers do not read off random characters that represent icons */ .fa-swatchbook:before { content: "\f5c3"; } +.fa-swift:before { + content: "\f8e1"; } + .fa-swimmer:before { content: "\f5c4"; } @@ -3869,6 +3930,9 @@ readers do not read off random characters that represent icons */ .fa-traffic-light:before { content: "\f637"; } +.fa-trailer:before { + content: "\f941"; } + .fa-train:before { content: "\f238"; } @@ -3956,6 +4020,9 @@ readers do not read off random characters that represent icons */ .fa-uikit:before { content: "\f403"; } +.fa-umbraco:before { + content: "\f8e8"; } + .fa-umbrella:before { content: "\f0e9"; } @@ -3974,6 +4041,9 @@ readers do not read off random characters that represent icons */ .fa-uniregistry:before { content: "\f404"; } +.fa-unity:before { + content: "\f949"; } + .fa-universal-access:before { content: "\f29a"; } diff --git a/base/vendor/components/font-awesome/css/fontawesome.min.css b/base/vendor/components/font-awesome/css/fontawesome.min.css index deb5b4a5..e00f0ed5 100644 --- a/base/vendor/components/font-awesome/css/fontawesome.min.css +++ b/base/vendor/components/font-awesome/css/fontawesome.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} \ No newline at end of file +.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\f952"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\f907"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\f913"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\f955"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\f91a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\f956"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\f91e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\f957"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\f941"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\f949"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} \ No newline at end of file diff --git a/base/vendor/components/font-awesome/css/regular.css b/base/vendor/components/font-awesome/css/regular.css index 8ce207f4..7e70f660 100644 --- a/base/vendor/components/font-awesome/css/regular.css +++ b/base/vendor/components/font-awesome/css/regular.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @font-face { diff --git a/base/vendor/components/font-awesome/css/regular.min.css b/base/vendor/components/font-awesome/css/regular.min.css index dfc44696..0d04bb80 100644 --- a/base/vendor/components/font-awesome/css/regular.min.css +++ b/base/vendor/components/font-awesome/css/regular.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400} \ No newline at end of file diff --git a/base/vendor/components/font-awesome/css/solid.css b/base/vendor/components/font-awesome/css/solid.css index ee76f87c..6ff136ac 100644 --- a/base/vendor/components/font-awesome/css/solid.css +++ b/base/vendor/components/font-awesome/css/solid.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @font-face { diff --git a/base/vendor/components/font-awesome/css/solid.min.css b/base/vendor/components/font-awesome/css/solid.min.css index 71486495..d80a5ca9 100644 --- a/base/vendor/components/font-awesome/css/solid.min.css +++ b/base/vendor/components/font-awesome/css/solid.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900} \ No newline at end of file diff --git a/base/vendor/components/font-awesome/css/svg-with-js.css b/base/vendor/components/font-awesome/css/svg-with-js.css index 661a68dd..9a7be4a7 100644 --- a/base/vendor/components/font-awesome/css/svg-with-js.css +++ b/base/vendor/components/font-awesome/css/svg-with-js.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ svg:not(:root).svg-inline--fa { @@ -344,3 +344,28 @@ svg:not(:root).svg-inline--fa { overflow: visible; position: static; width: auto; } + +.svg-inline--fa .fa-primary { + fill: var(--fa-primary-color, currentColor); + opacity: 1; + opacity: var(--fa-primary-opacity, 1); } + +.svg-inline--fa .fa-secondary { + fill: var(--fa-secondary-color, currentColor); + opacity: 0.4; + opacity: var(--fa-secondary-opacity, 0.4); } + +.svg-inline--fa.fa-swap-opacity .fa-primary { + opacity: 0.4; + opacity: var(--fa-secondary-opacity, 0.4); } + +.svg-inline--fa.fa-swap-opacity .fa-secondary { + opacity: 1; + opacity: var(--fa-primary-opacity, 1); } + +.svg-inline--fa mask .fa-primary, +.svg-inline--fa mask .fa-secondary { + fill: black; } + +.fad.fa-inverse { + color: #fff; } diff --git a/base/vendor/components/font-awesome/css/svg-with-js.min.css b/base/vendor/components/font-awesome/css/svg-with-js.min.css index d7093a19..5e158fa1 100644 --- a/base/vendor/components/font-awesome/css/svg-with-js.min.css +++ b/base/vendor/components/font-awesome/css/svg-with-js.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;transform:translate(-50%,-50%);transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;transform:scale(.25);transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;transform:scale(.25);transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;transform:scale(.25);transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;transform:scale(.25);transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;transform:scale(.25);transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto} \ No newline at end of file +.svg-inline--fa,svg:not(:root).svg-inline--fa{overflow:visible}.svg-inline--fa{display:inline-block;font-size:inherit;height:1em;vertical-align:-.125em}.svg-inline--fa.fa-lg{vertical-align:-.225em}.svg-inline--fa.fa-w-1{width:.0625em}.svg-inline--fa.fa-w-2{width:.125em}.svg-inline--fa.fa-w-3{width:.1875em}.svg-inline--fa.fa-w-4{width:.25em}.svg-inline--fa.fa-w-5{width:.3125em}.svg-inline--fa.fa-w-6{width:.375em}.svg-inline--fa.fa-w-7{width:.4375em}.svg-inline--fa.fa-w-8{width:.5em}.svg-inline--fa.fa-w-9{width:.5625em}.svg-inline--fa.fa-w-10{width:.625em}.svg-inline--fa.fa-w-11{width:.6875em}.svg-inline--fa.fa-w-12{width:.75em}.svg-inline--fa.fa-w-13{width:.8125em}.svg-inline--fa.fa-w-14{width:.875em}.svg-inline--fa.fa-w-15{width:.9375em}.svg-inline--fa.fa-w-16{width:1em}.svg-inline--fa.fa-w-17{width:1.0625em}.svg-inline--fa.fa-w-18{width:1.125em}.svg-inline--fa.fa-w-19{width:1.1875em}.svg-inline--fa.fa-w-20{width:1.25em}.svg-inline--fa.fa-pull-left{margin-right:.3em;width:auto}.svg-inline--fa.fa-pull-right{margin-left:.3em;width:auto}.svg-inline--fa.fa-border{height:1.5em}.svg-inline--fa.fa-li{width:2em}.svg-inline--fa.fa-fw{width:1.25em}.fa-layers svg.svg-inline--fa{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.fa-layers{display:inline-block;height:1em;position:relative;text-align:center;vertical-align:-.125em;width:1em}.fa-layers svg.svg-inline--fa{-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter,.fa-layers-text{display:inline-block;position:absolute;text-align:center}.fa-layers-text{left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);-webkit-transform-origin:center center;transform-origin:center center}.fa-layers-counter{background-color:#ff253a;border-radius:1em;-webkit-box-sizing:border-box;box-sizing:border-box;color:#fff;height:1.5em;line-height:1;max-width:5em;min-width:1.5em;overflow:hidden;padding:.25em;right:0;text-overflow:ellipsis;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-bottom-right{bottom:0;right:0;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom right;transform-origin:bottom right}.fa-layers-bottom-left{bottom:0;left:0;right:auto;top:auto;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:bottom left;transform-origin:bottom left}.fa-layers-top-right{right:0;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top right;transform-origin:top right}.fa-layers-top-left{left:0;right:auto;top:0;-webkit-transform:scale(.25);transform:scale(.25);-webkit-transform-origin:top left;transform-origin:top left}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;position:relative;width:2.5em}.fa-stack-1x,.fa-stack-2x{bottom:0;left:0;margin:auto;position:absolute;right:0;top:0}.svg-inline--fa.fa-stack-1x{height:1em;width:1.25em}.svg-inline--fa.fa-stack-2x{height:2em;width:2.5em}.fa-inverse{color:#fff}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}.svg-inline--fa .fa-primary{fill:var(--fa-primary-color,currentColor);opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa .fa-secondary{fill:var(--fa-secondary-color,currentColor)}.svg-inline--fa .fa-secondary,.svg-inline--fa.fa-swap-opacity .fa-primary{opacity:.4;opacity:var(--fa-secondary-opacity,.4)}.svg-inline--fa.fa-swap-opacity .fa-secondary{opacity:1;opacity:var(--fa-primary-opacity,1)}.svg-inline--fa mask .fa-primary,.svg-inline--fa mask .fa-secondary{fill:#000}.fad.fa-inverse{color:#fff} \ No newline at end of file diff --git a/base/vendor/components/font-awesome/css/v4-shims.css b/base/vendor/components/font-awesome/css/v4-shims.css index 047ae9b7..9e077427 100644 --- a/base/vendor/components/font-awesome/css/v4-shims.css +++ b/base/vendor/components/font-awesome/css/v4-shims.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ .fa.fa-glass:before { @@ -154,6 +154,12 @@ .fa.fa-mail-forward:before { content: "\f064"; } +.fa.fa-expand:before { + content: "\f424"; } + +.fa.fa-compress:before { + content: "\f422"; } + .fa.fa-eye { font-family: 'Font Awesome 5 Free'; font-weight: 400; } @@ -747,19 +753,19 @@ content: "\f15d"; } .fa.fa-sort-alpha-desc:before { - content: "\f15e"; } + content: "\f881"; } .fa.fa-sort-amount-asc:before { content: "\f160"; } .fa.fa-sort-amount-desc:before { - content: "\f161"; } + content: "\f884"; } .fa.fa-sort-numeric-asc:before { content: "\f162"; } .fa.fa-sort-numeric-desc:before { - content: "\f163"; } + content: "\f886"; } .fa.fa-youtube-square { font-family: 'Font Awesome 5 Brands'; @@ -1055,9 +1061,6 @@ .fa.fa-automobile:before { content: "\f1b9"; } -.fa.fa-cab:before { - content: "\f1ba"; } - .fa.fa-envelope-o { font-family: 'Font Awesome 5 Free'; font-weight: 400; } @@ -1065,6 +1068,10 @@ .fa.fa-envelope-o:before { content: "\f0e0"; } +.fa.fa-spotify { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } + .fa.fa-deviantart { font-family: 'Font Awesome 5 Brands'; font-weight: 400; } @@ -2161,6 +2168,5 @@ font-family: 'Font Awesome 5 Brands'; font-weight: 400; } -.fa.fa-spotify { - font-family: 'Font Awesome 5 Brands'; - font-weight: 400; } +.fa.fa-cab:before { + content: "\f1ba"; } diff --git a/base/vendor/components/font-awesome/css/v4-shims.min.css b/base/vendor/components/font-awesome/css/v4-shims.min.css index 5f3fdc59..7942cea1 100644 --- a/base/vendor/components/font-awesome/css/v4-shims.min.css +++ b/base/vendor/components/font-awesome/css/v4-shims.min.css @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ -.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file +.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f884"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cab:before{content:"\f1ba"} \ No newline at end of file diff --git a/base/vendor/components/font-awesome/less/_core.less b/base/vendor/components/font-awesome/less/_core.less index 82031d65..e8c2ff38 100644 --- a/base/vendor/components/font-awesome/less/_core.less +++ b/base/vendor/components/font-awesome/less/_core.less @@ -1,7 +1,7 @@ // Base Class Definition // ------------------------- -.@{fa-css-prefix}, .fas, .far, .fal, .fab { +.@{fa-css-prefix}, .fas, .far, .fal, .fad, .fab { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; display: inline-block; diff --git a/base/vendor/components/font-awesome/less/_icons.less b/base/vendor/components/font-awesome/less/_icons.less index 3e7a8e16..89cd1e5f 100644 --- a/base/vendor/components/font-awesome/less/_icons.less +++ b/base/vendor/components/font-awesome/less/_icons.less @@ -85,6 +85,7 @@ .@{fa-css-prefix}-backspace:before { content: @fa-var-backspace; } .@{fa-css-prefix}-backward:before { content: @fa-var-backward; } .@{fa-css-prefix}-bacon:before { content: @fa-var-bacon; } +.@{fa-css-prefix}-bahai:before { content: @fa-var-bahai; } .@{fa-css-prefix}-balance-scale:before { content: @fa-var-balance-scale; } .@{fa-css-prefix}-balance-scale-left:before { content: @fa-var-balance-scale-left; } .@{fa-css-prefix}-balance-scale-right:before { content: @fa-var-balance-scale-right; } @@ -167,6 +168,7 @@ .@{fa-css-prefix}-bus:before { content: @fa-var-bus; } .@{fa-css-prefix}-bus-alt:before { content: @fa-var-bus-alt; } .@{fa-css-prefix}-business-time:before { content: @fa-var-business-time; } +.@{fa-css-prefix}-buy-n-large:before { content: @fa-var-buy-n-large; } .@{fa-css-prefix}-buysellads:before { content: @fa-var-buysellads; } .@{fa-css-prefix}-calculator:before { content: @fa-var-calculator; } .@{fa-css-prefix}-calendar:before { content: @fa-var-calendar; } @@ -189,6 +191,7 @@ .@{fa-css-prefix}-car-battery:before { content: @fa-var-car-battery; } .@{fa-css-prefix}-car-crash:before { content: @fa-var-car-crash; } .@{fa-css-prefix}-car-side:before { content: @fa-var-car-side; } +.@{fa-css-prefix}-caravan:before { content: @fa-var-caravan; } .@{fa-css-prefix}-caret-down:before { content: @fa-var-caret-down; } .@{fa-css-prefix}-caret-left:before { content: @fa-var-caret-left; } .@{fa-css-prefix}-caret-right:before { content: @fa-var-caret-right; } @@ -292,6 +295,7 @@ .@{fa-css-prefix}-compact-disc:before { content: @fa-var-compact-disc; } .@{fa-css-prefix}-compass:before { content: @fa-var-compass; } .@{fa-css-prefix}-compress:before { content: @fa-var-compress; } +.@{fa-css-prefix}-compress-alt:before { content: @fa-var-compress-alt; } .@{fa-css-prefix}-compress-arrows-alt:before { content: @fa-var-compress-arrows-alt; } .@{fa-css-prefix}-concierge-bell:before { content: @fa-var-concierge-bell; } .@{fa-css-prefix}-confluence:before { content: @fa-var-confluence; } @@ -301,6 +305,7 @@ .@{fa-css-prefix}-cookie-bite:before { content: @fa-var-cookie-bite; } .@{fa-css-prefix}-copy:before { content: @fa-var-copy; } .@{fa-css-prefix}-copyright:before { content: @fa-var-copyright; } +.@{fa-css-prefix}-cotton-bureau:before { content: @fa-var-cotton-bureau; } .@{fa-css-prefix}-couch:before { content: @fa-var-couch; } .@{fa-css-prefix}-cpanel:before { content: @fa-var-cpanel; } .@{fa-css-prefix}-creative-commons:before { content: @fa-var-creative-commons; } @@ -334,6 +339,7 @@ .@{fa-css-prefix}-cuttlefish:before { content: @fa-var-cuttlefish; } .@{fa-css-prefix}-d-and-d:before { content: @fa-var-d-and-d; } .@{fa-css-prefix}-d-and-d-beyond:before { content: @fa-var-d-and-d-beyond; } +.@{fa-css-prefix}-dailymotion:before { content: @fa-var-dailymotion; } .@{fa-css-prefix}-dashcube:before { content: @fa-var-dashcube; } .@{fa-css-prefix}-database:before { content: @fa-var-database; } .@{fa-css-prefix}-deaf:before { content: @fa-var-deaf; } @@ -424,6 +430,7 @@ .@{fa-css-prefix}-exclamation-circle:before { content: @fa-var-exclamation-circle; } .@{fa-css-prefix}-exclamation-triangle:before { content: @fa-var-exclamation-triangle; } .@{fa-css-prefix}-expand:before { content: @fa-var-expand; } +.@{fa-css-prefix}-expand-alt:before { content: @fa-var-expand-alt; } .@{fa-css-prefix}-expand-arrows-alt:before { content: @fa-var-expand-arrows-alt; } .@{fa-css-prefix}-expeditedssl:before { content: @fa-var-expeditedssl; } .@{fa-css-prefix}-external-link-alt:before { content: @fa-var-external-link-alt; } @@ -479,6 +486,7 @@ .@{fa-css-prefix}-fire-alt:before { content: @fa-var-fire-alt; } .@{fa-css-prefix}-fire-extinguisher:before { content: @fa-var-fire-extinguisher; } .@{fa-css-prefix}-firefox:before { content: @fa-var-firefox; } +.@{fa-css-prefix}-firefox-browser:before { content: @fa-var-firefox-browser; } .@{fa-css-prefix}-first-aid:before { content: @fa-var-first-aid; } .@{fa-css-prefix}-first-order:before { content: @fa-var-first-order; } .@{fa-css-prefix}-first-order-alt:before { content: @fa-var-first-order-alt; } @@ -619,8 +627,9 @@ .@{fa-css-prefix}-hanukiah:before { content: @fa-var-hanukiah; } .@{fa-css-prefix}-hard-hat:before { content: @fa-var-hard-hat; } .@{fa-css-prefix}-hashtag:before { content: @fa-var-hashtag; } +.@{fa-css-prefix}-hat-cowboy:before { content: @fa-var-hat-cowboy; } +.@{fa-css-prefix}-hat-cowboy-side:before { content: @fa-var-hat-cowboy-side; } .@{fa-css-prefix}-hat-wizard:before { content: @fa-var-hat-wizard; } -.@{fa-css-prefix}-haykal:before { content: @fa-var-haykal; } .@{fa-css-prefix}-hdd:before { content: @fa-var-hdd; } .@{fa-css-prefix}-heading:before { content: @fa-var-heading; } .@{fa-css-prefix}-headphones:before { content: @fa-var-headphones; } @@ -666,6 +675,7 @@ .@{fa-css-prefix}-id-badge:before { content: @fa-var-id-badge; } .@{fa-css-prefix}-id-card:before { content: @fa-var-id-card; } .@{fa-css-prefix}-id-card-alt:before { content: @fa-var-id-card-alt; } +.@{fa-css-prefix}-ideal:before { content: @fa-var-ideal; } .@{fa-css-prefix}-igloo:before { content: @fa-var-igloo; } .@{fa-css-prefix}-image:before { content: @fa-var-image; } .@{fa-css-prefix}-images:before { content: @fa-var-images; } @@ -677,6 +687,7 @@ .@{fa-css-prefix}-info:before { content: @fa-var-info; } .@{fa-css-prefix}-info-circle:before { content: @fa-var-info-circle; } .@{fa-css-prefix}-instagram:before { content: @fa-var-instagram; } +.@{fa-css-prefix}-instagram-square:before { content: @fa-var-instagram-square; } .@{fa-css-prefix}-intercom:before { content: @fa-var-intercom; } .@{fa-css-prefix}-internet-explorer:before { content: @fa-var-internet-explorer; } .@{fa-css-prefix}-invision:before { content: @fa-var-invision; } @@ -779,6 +790,7 @@ .@{fa-css-prefix}-mask:before { content: @fa-var-mask; } .@{fa-css-prefix}-mastodon:before { content: @fa-var-mastodon; } .@{fa-css-prefix}-maxcdn:before { content: @fa-var-maxcdn; } +.@{fa-css-prefix}-mdb:before { content: @fa-var-mdb; } .@{fa-css-prefix}-medal:before { content: @fa-var-medal; } .@{fa-css-prefix}-medapps:before { content: @fa-var-medapps; } .@{fa-css-prefix}-medium:before { content: @fa-var-medium; } @@ -795,6 +807,7 @@ .@{fa-css-prefix}-menorah:before { content: @fa-var-menorah; } .@{fa-css-prefix}-mercury:before { content: @fa-var-mercury; } .@{fa-css-prefix}-meteor:before { content: @fa-var-meteor; } +.@{fa-css-prefix}-microblog:before { content: @fa-var-microblog; } .@{fa-css-prefix}-microchip:before { content: @fa-var-microchip; } .@{fa-css-prefix}-microphone:before { content: @fa-var-microphone; } .@{fa-css-prefix}-microphone-alt:before { content: @fa-var-microphone-alt; } @@ -808,6 +821,7 @@ .@{fa-css-prefix}-mitten:before { content: @fa-var-mitten; } .@{fa-css-prefix}-mix:before { content: @fa-var-mix; } .@{fa-css-prefix}-mixcloud:before { content: @fa-var-mixcloud; } +.@{fa-css-prefix}-mixer:before { content: @fa-var-mixer; } .@{fa-css-prefix}-mizuni:before { content: @fa-var-mizuni; } .@{fa-css-prefix}-mobile:before { content: @fa-var-mobile; } .@{fa-css-prefix}-mobile-alt:before { content: @fa-var-mobile-alt; } @@ -825,6 +839,7 @@ .@{fa-css-prefix}-mosque:before { content: @fa-var-mosque; } .@{fa-css-prefix}-motorcycle:before { content: @fa-var-motorcycle; } .@{fa-css-prefix}-mountain:before { content: @fa-var-mountain; } +.@{fa-css-prefix}-mouse:before { content: @fa-var-mouse; } .@{fa-css-prefix}-mouse-pointer:before { content: @fa-var-mouse-pointer; } .@{fa-css-prefix}-mug-hot:before { content: @fa-var-mug-hot; } .@{fa-css-prefix}-music:before { content: @fa-var-music; } @@ -852,6 +867,7 @@ .@{fa-css-prefix}-openid:before { content: @fa-var-openid; } .@{fa-css-prefix}-opera:before { content: @fa-var-opera; } .@{fa-css-prefix}-optin-monster:before { content: @fa-var-optin-monster; } +.@{fa-css-prefix}-orcid:before { content: @fa-var-orcid; } .@{fa-css-prefix}-osi:before { content: @fa-var-osi; } .@{fa-css-prefix}-otter:before { content: @fa-var-otter; } .@{fa-css-prefix}-outdent:before { content: @fa-var-outdent; } @@ -906,6 +922,7 @@ .@{fa-css-prefix}-pied-piper-alt:before { content: @fa-var-pied-piper-alt; } .@{fa-css-prefix}-pied-piper-hat:before { content: @fa-var-pied-piper-hat; } .@{fa-css-prefix}-pied-piper-pp:before { content: @fa-var-pied-piper-pp; } +.@{fa-css-prefix}-pied-piper-square:before { content: @fa-var-pied-piper-square; } .@{fa-css-prefix}-piggy-bank:before { content: @fa-var-piggy-bank; } .@{fa-css-prefix}-pills:before { content: @fa-var-pills; } .@{fa-css-prefix}-pinterest:before { content: @fa-var-pinterest; } @@ -966,6 +983,7 @@ .@{fa-css-prefix}-readme:before { content: @fa-var-readme; } .@{fa-css-prefix}-rebel:before { content: @fa-var-rebel; } .@{fa-css-prefix}-receipt:before { content: @fa-var-receipt; } +.@{fa-css-prefix}-record-vinyl:before { content: @fa-var-record-vinyl; } .@{fa-css-prefix}-recycle:before { content: @fa-var-recycle; } .@{fa-css-prefix}-red-river:before { content: @fa-var-red-river; } .@{fa-css-prefix}-reddit:before { content: @fa-var-reddit; } @@ -1039,6 +1057,7 @@ .@{fa-css-prefix}-shipping-fast:before { content: @fa-var-shipping-fast; } .@{fa-css-prefix}-shirtsinbulk:before { content: @fa-var-shirtsinbulk; } .@{fa-css-prefix}-shoe-prints:before { content: @fa-var-shoe-prints; } +.@{fa-css-prefix}-shopify:before { content: @fa-var-shopify; } .@{fa-css-prefix}-shopping-bag:before { content: @fa-var-shopping-bag; } .@{fa-css-prefix}-shopping-basket:before { content: @fa-var-shopping-basket; } .@{fa-css-prefix}-shopping-cart:before { content: @fa-var-shopping-cart; } @@ -1162,6 +1181,7 @@ .@{fa-css-prefix}-surprise:before { content: @fa-var-surprise; } .@{fa-css-prefix}-suse:before { content: @fa-var-suse; } .@{fa-css-prefix}-swatchbook:before { content: @fa-var-swatchbook; } +.@{fa-css-prefix}-swift:before { content: @fa-var-swift; } .@{fa-css-prefix}-swimmer:before { content: @fa-var-swimmer; } .@{fa-css-prefix}-swimming-pool:before { content: @fa-var-swimming-pool; } .@{fa-css-prefix}-symfony:before { content: @fa-var-symfony; } @@ -1228,6 +1248,7 @@ .@{fa-css-prefix}-trade-federation:before { content: @fa-var-trade-federation; } .@{fa-css-prefix}-trademark:before { content: @fa-var-trademark; } .@{fa-css-prefix}-traffic-light:before { content: @fa-var-traffic-light; } +.@{fa-css-prefix}-trailer:before { content: @fa-var-trailer; } .@{fa-css-prefix}-train:before { content: @fa-var-train; } .@{fa-css-prefix}-tram:before { content: @fa-var-tram; } .@{fa-css-prefix}-transgender:before { content: @fa-var-transgender; } @@ -1257,12 +1278,14 @@ .@{fa-css-prefix}-uber:before { content: @fa-var-uber; } .@{fa-css-prefix}-ubuntu:before { content: @fa-var-ubuntu; } .@{fa-css-prefix}-uikit:before { content: @fa-var-uikit; } +.@{fa-css-prefix}-umbraco:before { content: @fa-var-umbraco; } .@{fa-css-prefix}-umbrella:before { content: @fa-var-umbrella; } .@{fa-css-prefix}-umbrella-beach:before { content: @fa-var-umbrella-beach; } .@{fa-css-prefix}-underline:before { content: @fa-var-underline; } .@{fa-css-prefix}-undo:before { content: @fa-var-undo; } .@{fa-css-prefix}-undo-alt:before { content: @fa-var-undo-alt; } .@{fa-css-prefix}-uniregistry:before { content: @fa-var-uniregistry; } +.@{fa-css-prefix}-unity:before { content: @fa-var-unity; } .@{fa-css-prefix}-universal-access:before { content: @fa-var-universal-access; } .@{fa-css-prefix}-university:before { content: @fa-var-university; } .@{fa-css-prefix}-unlink:before { content: @fa-var-unlink; } diff --git a/base/vendor/components/font-awesome/less/_shims.less b/base/vendor/components/font-awesome/less/_shims.less index 8a618a18..3c8d86d7 100644 --- a/base/vendor/components/font-awesome/less/_shims.less +++ b/base/vendor/components/font-awesome/less/_shims.less @@ -124,6 +124,10 @@ .@{fa-css-prefix}.@{fa-css-prefix}-mail-forward:before { content: @fa-var-share; } +.@{fa-css-prefix}.@{fa-css-prefix}-expand:before { content: @fa-var-expand-alt; } + +.@{fa-css-prefix}.@{fa-css-prefix}-compress:before { content: @fa-var-compress-alt; } + .@{fa-css-prefix}.@{fa-css-prefix}-eye { font-family: 'Font Awesome 5 Free'; font-weight: 400; @@ -626,15 +630,15 @@ .@{fa-css-prefix}.@{fa-css-prefix}-sort-alpha-asc:before { content: @fa-var-sort-alpha-down; } -.@{fa-css-prefix}.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-up; } +.@{fa-css-prefix}.@{fa-css-prefix}-sort-alpha-desc:before { content: @fa-var-sort-alpha-down-alt; } .@{fa-css-prefix}.@{fa-css-prefix}-sort-amount-asc:before { content: @fa-var-sort-amount-down; } -.@{fa-css-prefix}.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-up; } +.@{fa-css-prefix}.@{fa-css-prefix}-sort-amount-desc:before { content: @fa-var-sort-amount-down-alt; } .@{fa-css-prefix}.@{fa-css-prefix}-sort-numeric-asc:before { content: @fa-var-sort-numeric-down; } -.@{fa-css-prefix}.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-up; } +.@{fa-css-prefix}.@{fa-css-prefix}-sort-numeric-desc:before { content: @fa-var-sort-numeric-down-alt; } .@{fa-css-prefix}.@{fa-css-prefix}-youtube-square { font-family: 'Font Awesome 5 Brands'; @@ -954,14 +958,17 @@ .@{fa-css-prefix}.@{fa-css-prefix}-automobile:before { content: @fa-var-car; } -.@{fa-css-prefix}.@{fa-css-prefix}-cab:before { content: @fa-var-taxi; } - .@{fa-css-prefix}.@{fa-css-prefix}-envelope-o { font-family: 'Font Awesome 5 Free'; font-weight: 400; } .@{fa-css-prefix}.@{fa-css-prefix}-envelope-o:before { content: @fa-var-envelope; } +.@{fa-css-prefix}.@{fa-css-prefix}-spotify { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; +} + .@{fa-css-prefix}.@{fa-css-prefix}-deviantart { font-family: 'Font Awesome 5 Brands'; font-weight: 400; @@ -2055,8 +2062,5 @@ font-weight: 400; } -.@{fa-css-prefix}.@{fa-css-prefix}-spotify { - font-family: 'Font Awesome 5 Brands'; - font-weight: 400; -} +.@{fa-css-prefix}.@{fa-css-prefix}-cab:before { content: @fa-var-taxi; } diff --git a/base/vendor/components/font-awesome/less/_variables.less b/base/vendor/components/font-awesome/less/_variables.less index 7eaabf99..ce29da94 100644 --- a/base/vendor/components/font-awesome/less/_variables.less +++ b/base/vendor/components/font-awesome/less/_variables.less @@ -1,15 +1,17 @@ // Variables // -------------------------- -@fa-font-path: "../webfonts"; -@fa-font-size-base: 16px; -@fa-font-display: auto; -@fa-line-height-base: 1; -@fa-css-prefix: fa; -@fa-version: "5.9.0"; -@fa-border-color: #eee; -@fa-inverse: #fff; -@fa-li-width: 2em; +@fa-font-path: "../webfonts"; +@fa-font-size-base: 16px; +@fa-font-display: auto; +@fa-line-height-base: 1; +@fa-css-prefix: fa; +@fa-version: "5.12.1"; +@fa-border-color: #eee; +@fa-inverse: #fff; +@fa-li-width: 2em; +@fa-primary-opacity: 1; +@fa-secondary-opacity: .4; @fa-var-500px: "\f26e"; @fa-var-accessible-icon: "\f368"; @@ -95,6 +97,7 @@ @fa-var-backspace: "\f55a"; @fa-var-backward: "\f04a"; @fa-var-bacon: "\f7e5"; +@fa-var-bahai: "\f666"; @fa-var-balance-scale: "\f24e"; @fa-var-balance-scale-left: "\f515"; @fa-var-balance-scale-right: "\f516"; @@ -177,6 +180,7 @@ @fa-var-bus: "\f207"; @fa-var-bus-alt: "\f55e"; @fa-var-business-time: "\f64a"; +@fa-var-buy-n-large: "\f8a6"; @fa-var-buysellads: "\f20d"; @fa-var-calculator: "\f1ec"; @fa-var-calendar: "\f133"; @@ -199,6 +203,7 @@ @fa-var-car-battery: "\f5df"; @fa-var-car-crash: "\f5e1"; @fa-var-car-side: "\f5e4"; +@fa-var-caravan: "\f8ff"; @fa-var-caret-down: "\f0d7"; @fa-var-caret-left: "\f0d9"; @fa-var-caret-right: "\f0da"; @@ -302,6 +307,7 @@ @fa-var-compact-disc: "\f51f"; @fa-var-compass: "\f14e"; @fa-var-compress: "\f066"; +@fa-var-compress-alt: "\f422"; @fa-var-compress-arrows-alt: "\f78c"; @fa-var-concierge-bell: "\f562"; @fa-var-confluence: "\f78d"; @@ -311,6 +317,7 @@ @fa-var-cookie-bite: "\f564"; @fa-var-copy: "\f0c5"; @fa-var-copyright: "\f1f9"; +@fa-var-cotton-bureau: "\f89e"; @fa-var-couch: "\f4b8"; @fa-var-cpanel: "\f388"; @fa-var-creative-commons: "\f25e"; @@ -344,6 +351,7 @@ @fa-var-cuttlefish: "\f38c"; @fa-var-d-and-d: "\f38d"; @fa-var-d-and-d-beyond: "\f6ca"; +@fa-var-dailymotion: "\f952"; @fa-var-dashcube: "\f210"; @fa-var-database: "\f1c0"; @fa-var-deaf: "\f2a4"; @@ -434,6 +442,7 @@ @fa-var-exclamation-circle: "\f06a"; @fa-var-exclamation-triangle: "\f071"; @fa-var-expand: "\f065"; +@fa-var-expand-alt: "\f424"; @fa-var-expand-arrows-alt: "\f31e"; @fa-var-expeditedssl: "\f23e"; @fa-var-external-link-alt: "\f35d"; @@ -489,6 +498,7 @@ @fa-var-fire-alt: "\f7e4"; @fa-var-fire-extinguisher: "\f134"; @fa-var-firefox: "\f269"; +@fa-var-firefox-browser: "\f907"; @fa-var-first-aid: "\f479"; @fa-var-first-order: "\f2b0"; @fa-var-first-order-alt: "\f50a"; @@ -629,8 +639,9 @@ @fa-var-hanukiah: "\f6e6"; @fa-var-hard-hat: "\f807"; @fa-var-hashtag: "\f292"; +@fa-var-hat-cowboy: "\f8c0"; +@fa-var-hat-cowboy-side: "\f8c1"; @fa-var-hat-wizard: "\f6e8"; -@fa-var-haykal: "\f666"; @fa-var-hdd: "\f0a0"; @fa-var-heading: "\f1dc"; @fa-var-headphones: "\f025"; @@ -676,6 +687,7 @@ @fa-var-id-badge: "\f2c1"; @fa-var-id-card: "\f2c2"; @fa-var-id-card-alt: "\f47f"; +@fa-var-ideal: "\f913"; @fa-var-igloo: "\f7ae"; @fa-var-image: "\f03e"; @fa-var-images: "\f302"; @@ -687,6 +699,7 @@ @fa-var-info: "\f129"; @fa-var-info-circle: "\f05a"; @fa-var-instagram: "\f16d"; +@fa-var-instagram-square: "\f955"; @fa-var-intercom: "\f7af"; @fa-var-internet-explorer: "\f26b"; @fa-var-invision: "\f7b0"; @@ -789,6 +802,7 @@ @fa-var-mask: "\f6fa"; @fa-var-mastodon: "\f4f6"; @fa-var-maxcdn: "\f136"; +@fa-var-mdb: "\f8ca"; @fa-var-medal: "\f5a2"; @fa-var-medapps: "\f3c6"; @fa-var-medium: "\f23a"; @@ -805,6 +819,7 @@ @fa-var-menorah: "\f676"; @fa-var-mercury: "\f223"; @fa-var-meteor: "\f753"; +@fa-var-microblog: "\f91a"; @fa-var-microchip: "\f2db"; @fa-var-microphone: "\f130"; @fa-var-microphone-alt: "\f3c9"; @@ -818,6 +833,7 @@ @fa-var-mitten: "\f7b5"; @fa-var-mix: "\f3cb"; @fa-var-mixcloud: "\f289"; +@fa-var-mixer: "\f956"; @fa-var-mizuni: "\f3cc"; @fa-var-mobile: "\f10b"; @fa-var-mobile-alt: "\f3cd"; @@ -835,6 +851,7 @@ @fa-var-mosque: "\f678"; @fa-var-motorcycle: "\f21c"; @fa-var-mountain: "\f6fc"; +@fa-var-mouse: "\f8cc"; @fa-var-mouse-pointer: "\f245"; @fa-var-mug-hot: "\f7b6"; @fa-var-music: "\f001"; @@ -862,6 +879,7 @@ @fa-var-openid: "\f19b"; @fa-var-opera: "\f26a"; @fa-var-optin-monster: "\f23c"; +@fa-var-orcid: "\f8d2"; @fa-var-osi: "\f41a"; @fa-var-otter: "\f700"; @fa-var-outdent: "\f03b"; @@ -916,6 +934,7 @@ @fa-var-pied-piper-alt: "\f1a8"; @fa-var-pied-piper-hat: "\f4e5"; @fa-var-pied-piper-pp: "\f1a7"; +@fa-var-pied-piper-square: "\f91e"; @fa-var-piggy-bank: "\f4d3"; @fa-var-pills: "\f484"; @fa-var-pinterest: "\f0d2"; @@ -976,6 +995,7 @@ @fa-var-readme: "\f4d5"; @fa-var-rebel: "\f1d0"; @fa-var-receipt: "\f543"; +@fa-var-record-vinyl: "\f8d9"; @fa-var-recycle: "\f1b8"; @fa-var-red-river: "\f3e3"; @fa-var-reddit: "\f1a1"; @@ -1049,6 +1069,7 @@ @fa-var-shipping-fast: "\f48b"; @fa-var-shirtsinbulk: "\f214"; @fa-var-shoe-prints: "\f54b"; +@fa-var-shopify: "\f957"; @fa-var-shopping-bag: "\f290"; @fa-var-shopping-basket: "\f291"; @fa-var-shopping-cart: "\f07a"; @@ -1172,6 +1193,7 @@ @fa-var-surprise: "\f5c2"; @fa-var-suse: "\f7d6"; @fa-var-swatchbook: "\f5c3"; +@fa-var-swift: "\f8e1"; @fa-var-swimmer: "\f5c4"; @fa-var-swimming-pool: "\f5c5"; @fa-var-symfony: "\f83d"; @@ -1238,6 +1260,7 @@ @fa-var-trade-federation: "\f513"; @fa-var-trademark: "\f25c"; @fa-var-traffic-light: "\f637"; +@fa-var-trailer: "\f941"; @fa-var-train: "\f238"; @fa-var-tram: "\f7da"; @fa-var-transgender: "\f224"; @@ -1267,12 +1290,14 @@ @fa-var-uber: "\f402"; @fa-var-ubuntu: "\f7df"; @fa-var-uikit: "\f403"; +@fa-var-umbraco: "\f8e8"; @fa-var-umbrella: "\f0e9"; @fa-var-umbrella-beach: "\f5ca"; @fa-var-underline: "\f0cd"; @fa-var-undo: "\f0e2"; @fa-var-undo-alt: "\f2ea"; @fa-var-uniregistry: "\f404"; +@fa-var-unity: "\f949"; @fa-var-universal-access: "\f29a"; @fa-var-university: "\f19c"; @fa-var-unlink: "\f127"; diff --git a/base/vendor/components/font-awesome/less/brands.less b/base/vendor/components/font-awesome/less/brands.less index 30b0307f..268053cb 100644 --- a/base/vendor/components/font-awesome/less/brands.less +++ b/base/vendor/components/font-awesome/less/brands.less @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import "_variables.less"; @@ -7,7 +7,7 @@ @font-face { font-family: 'Font Awesome 5 Brands'; font-style: normal; - font-weight: normal; + font-weight: 400; font-display: @fa-font-display; src: url('@{fa-font-path}/fa-brands-400.eot'); src: url('@{fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'), @@ -19,4 +19,5 @@ .fab { font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } diff --git a/base/vendor/components/font-awesome/less/fontawesome.less b/base/vendor/components/font-awesome/less/fontawesome.less index 7eb6a4c6..8cf1e3f7 100644 --- a/base/vendor/components/font-awesome/less/fontawesome.less +++ b/base/vendor/components/font-awesome/less/fontawesome.less @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import "_variables.less"; diff --git a/base/vendor/components/font-awesome/less/regular.less b/base/vendor/components/font-awesome/less/regular.less index 77847c80..a1d76208 100644 --- a/base/vendor/components/font-awesome/less/regular.less +++ b/base/vendor/components/font-awesome/less/regular.less @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import "_variables.less"; diff --git a/base/vendor/components/font-awesome/less/solid.less b/base/vendor/components/font-awesome/less/solid.less index 0fb03758..1f3880dc 100644 --- a/base/vendor/components/font-awesome/less/solid.less +++ b/base/vendor/components/font-awesome/less/solid.less @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import "_variables.less"; diff --git a/base/vendor/components/font-awesome/less/v4-shims.less b/base/vendor/components/font-awesome/less/v4-shims.less index 0701bb2a..ad92dc4d 100644 --- a/base/vendor/components/font-awesome/less/v4-shims.less +++ b/base/vendor/components/font-awesome/less/v4-shims.less @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import '_variables.less'; diff --git a/base/vendor/components/font-awesome/package.json b/base/vendor/components/font-awesome/package.json index dd7c8612..9cb2053c 100644 --- a/base/vendor/components/font-awesome/package.json +++ b/base/vendor/components/font-awesome/package.json @@ -1,7 +1,7 @@ { "name": "components-font-awesome", "description": "Font Awesome, the iconic SVG, font, and CSS framework.", - "version": "5.9.0", + "version": "5.12.1", "repository": { "type": "git", "url": "git://github.com/components/font-awesome.git" diff --git a/base/vendor/components/font-awesome/scss/_core.scss b/base/vendor/components/font-awesome/scss/_core.scss index a4ee7e84..cbd4cf7c 100644 --- a/base/vendor/components/font-awesome/scss/_core.scss +++ b/base/vendor/components/font-awesome/scss/_core.scss @@ -5,6 +5,7 @@ .fas, .far, .fal, +.fad, .fab { -moz-osx-font-smoothing: grayscale; -webkit-font-smoothing: antialiased; diff --git a/base/vendor/components/font-awesome/scss/_icons.scss b/base/vendor/components/font-awesome/scss/_icons.scss index ac3be461..0dbb856e 100644 --- a/base/vendor/components/font-awesome/scss/_icons.scss +++ b/base/vendor/components/font-awesome/scss/_icons.scss @@ -85,6 +85,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-backspace:before { content: fa-content($fa-var-backspace); } .#{$fa-css-prefix}-backward:before { content: fa-content($fa-var-backward); } .#{$fa-css-prefix}-bacon:before { content: fa-content($fa-var-bacon); } +.#{$fa-css-prefix}-bahai:before { content: fa-content($fa-var-bahai); } .#{$fa-css-prefix}-balance-scale:before { content: fa-content($fa-var-balance-scale); } .#{$fa-css-prefix}-balance-scale-left:before { content: fa-content($fa-var-balance-scale-left); } .#{$fa-css-prefix}-balance-scale-right:before { content: fa-content($fa-var-balance-scale-right); } @@ -167,6 +168,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-bus:before { content: fa-content($fa-var-bus); } .#{$fa-css-prefix}-bus-alt:before { content: fa-content($fa-var-bus-alt); } .#{$fa-css-prefix}-business-time:before { content: fa-content($fa-var-business-time); } +.#{$fa-css-prefix}-buy-n-large:before { content: fa-content($fa-var-buy-n-large); } .#{$fa-css-prefix}-buysellads:before { content: fa-content($fa-var-buysellads); } .#{$fa-css-prefix}-calculator:before { content: fa-content($fa-var-calculator); } .#{$fa-css-prefix}-calendar:before { content: fa-content($fa-var-calendar); } @@ -189,6 +191,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-car-battery:before { content: fa-content($fa-var-car-battery); } .#{$fa-css-prefix}-car-crash:before { content: fa-content($fa-var-car-crash); } .#{$fa-css-prefix}-car-side:before { content: fa-content($fa-var-car-side); } +.#{$fa-css-prefix}-caravan:before { content: fa-content($fa-var-caravan); } .#{$fa-css-prefix}-caret-down:before { content: fa-content($fa-var-caret-down); } .#{$fa-css-prefix}-caret-left:before { content: fa-content($fa-var-caret-left); } .#{$fa-css-prefix}-caret-right:before { content: fa-content($fa-var-caret-right); } @@ -292,6 +295,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-compact-disc:before { content: fa-content($fa-var-compact-disc); } .#{$fa-css-prefix}-compass:before { content: fa-content($fa-var-compass); } .#{$fa-css-prefix}-compress:before { content: fa-content($fa-var-compress); } +.#{$fa-css-prefix}-compress-alt:before { content: fa-content($fa-var-compress-alt); } .#{$fa-css-prefix}-compress-arrows-alt:before { content: fa-content($fa-var-compress-arrows-alt); } .#{$fa-css-prefix}-concierge-bell:before { content: fa-content($fa-var-concierge-bell); } .#{$fa-css-prefix}-confluence:before { content: fa-content($fa-var-confluence); } @@ -301,6 +305,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-cookie-bite:before { content: fa-content($fa-var-cookie-bite); } .#{$fa-css-prefix}-copy:before { content: fa-content($fa-var-copy); } .#{$fa-css-prefix}-copyright:before { content: fa-content($fa-var-copyright); } +.#{$fa-css-prefix}-cotton-bureau:before { content: fa-content($fa-var-cotton-bureau); } .#{$fa-css-prefix}-couch:before { content: fa-content($fa-var-couch); } .#{$fa-css-prefix}-cpanel:before { content: fa-content($fa-var-cpanel); } .#{$fa-css-prefix}-creative-commons:before { content: fa-content($fa-var-creative-commons); } @@ -334,6 +339,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-cuttlefish:before { content: fa-content($fa-var-cuttlefish); } .#{$fa-css-prefix}-d-and-d:before { content: fa-content($fa-var-d-and-d); } .#{$fa-css-prefix}-d-and-d-beyond:before { content: fa-content($fa-var-d-and-d-beyond); } +.#{$fa-css-prefix}-dailymotion:before { content: fa-content($fa-var-dailymotion); } .#{$fa-css-prefix}-dashcube:before { content: fa-content($fa-var-dashcube); } .#{$fa-css-prefix}-database:before { content: fa-content($fa-var-database); } .#{$fa-css-prefix}-deaf:before { content: fa-content($fa-var-deaf); } @@ -424,6 +430,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-exclamation-circle:before { content: fa-content($fa-var-exclamation-circle); } .#{$fa-css-prefix}-exclamation-triangle:before { content: fa-content($fa-var-exclamation-triangle); } .#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-expand); } +.#{$fa-css-prefix}-expand-alt:before { content: fa-content($fa-var-expand-alt); } .#{$fa-css-prefix}-expand-arrows-alt:before { content: fa-content($fa-var-expand-arrows-alt); } .#{$fa-css-prefix}-expeditedssl:before { content: fa-content($fa-var-expeditedssl); } .#{$fa-css-prefix}-external-link-alt:before { content: fa-content($fa-var-external-link-alt); } @@ -479,6 +486,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-fire-alt:before { content: fa-content($fa-var-fire-alt); } .#{$fa-css-prefix}-fire-extinguisher:before { content: fa-content($fa-var-fire-extinguisher); } .#{$fa-css-prefix}-firefox:before { content: fa-content($fa-var-firefox); } +.#{$fa-css-prefix}-firefox-browser:before { content: fa-content($fa-var-firefox-browser); } .#{$fa-css-prefix}-first-aid:before { content: fa-content($fa-var-first-aid); } .#{$fa-css-prefix}-first-order:before { content: fa-content($fa-var-first-order); } .#{$fa-css-prefix}-first-order-alt:before { content: fa-content($fa-var-first-order-alt); } @@ -619,8 +627,9 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-hanukiah:before { content: fa-content($fa-var-hanukiah); } .#{$fa-css-prefix}-hard-hat:before { content: fa-content($fa-var-hard-hat); } .#{$fa-css-prefix}-hashtag:before { content: fa-content($fa-var-hashtag); } +.#{$fa-css-prefix}-hat-cowboy:before { content: fa-content($fa-var-hat-cowboy); } +.#{$fa-css-prefix}-hat-cowboy-side:before { content: fa-content($fa-var-hat-cowboy-side); } .#{$fa-css-prefix}-hat-wizard:before { content: fa-content($fa-var-hat-wizard); } -.#{$fa-css-prefix}-haykal:before { content: fa-content($fa-var-haykal); } .#{$fa-css-prefix}-hdd:before { content: fa-content($fa-var-hdd); } .#{$fa-css-prefix}-heading:before { content: fa-content($fa-var-heading); } .#{$fa-css-prefix}-headphones:before { content: fa-content($fa-var-headphones); } @@ -666,6 +675,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-id-badge:before { content: fa-content($fa-var-id-badge); } .#{$fa-css-prefix}-id-card:before { content: fa-content($fa-var-id-card); } .#{$fa-css-prefix}-id-card-alt:before { content: fa-content($fa-var-id-card-alt); } +.#{$fa-css-prefix}-ideal:before { content: fa-content($fa-var-ideal); } .#{$fa-css-prefix}-igloo:before { content: fa-content($fa-var-igloo); } .#{$fa-css-prefix}-image:before { content: fa-content($fa-var-image); } .#{$fa-css-prefix}-images:before { content: fa-content($fa-var-images); } @@ -677,6 +687,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-info:before { content: fa-content($fa-var-info); } .#{$fa-css-prefix}-info-circle:before { content: fa-content($fa-var-info-circle); } .#{$fa-css-prefix}-instagram:before { content: fa-content($fa-var-instagram); } +.#{$fa-css-prefix}-instagram-square:before { content: fa-content($fa-var-instagram-square); } .#{$fa-css-prefix}-intercom:before { content: fa-content($fa-var-intercom); } .#{$fa-css-prefix}-internet-explorer:before { content: fa-content($fa-var-internet-explorer); } .#{$fa-css-prefix}-invision:before { content: fa-content($fa-var-invision); } @@ -779,6 +790,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-mask:before { content: fa-content($fa-var-mask); } .#{$fa-css-prefix}-mastodon:before { content: fa-content($fa-var-mastodon); } .#{$fa-css-prefix}-maxcdn:before { content: fa-content($fa-var-maxcdn); } +.#{$fa-css-prefix}-mdb:before { content: fa-content($fa-var-mdb); } .#{$fa-css-prefix}-medal:before { content: fa-content($fa-var-medal); } .#{$fa-css-prefix}-medapps:before { content: fa-content($fa-var-medapps); } .#{$fa-css-prefix}-medium:before { content: fa-content($fa-var-medium); } @@ -795,6 +807,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-menorah:before { content: fa-content($fa-var-menorah); } .#{$fa-css-prefix}-mercury:before { content: fa-content($fa-var-mercury); } .#{$fa-css-prefix}-meteor:before { content: fa-content($fa-var-meteor); } +.#{$fa-css-prefix}-microblog:before { content: fa-content($fa-var-microblog); } .#{$fa-css-prefix}-microchip:before { content: fa-content($fa-var-microchip); } .#{$fa-css-prefix}-microphone:before { content: fa-content($fa-var-microphone); } .#{$fa-css-prefix}-microphone-alt:before { content: fa-content($fa-var-microphone-alt); } @@ -808,6 +821,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-mitten:before { content: fa-content($fa-var-mitten); } .#{$fa-css-prefix}-mix:before { content: fa-content($fa-var-mix); } .#{$fa-css-prefix}-mixcloud:before { content: fa-content($fa-var-mixcloud); } +.#{$fa-css-prefix}-mixer:before { content: fa-content($fa-var-mixer); } .#{$fa-css-prefix}-mizuni:before { content: fa-content($fa-var-mizuni); } .#{$fa-css-prefix}-mobile:before { content: fa-content($fa-var-mobile); } .#{$fa-css-prefix}-mobile-alt:before { content: fa-content($fa-var-mobile-alt); } @@ -825,6 +839,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-mosque:before { content: fa-content($fa-var-mosque); } .#{$fa-css-prefix}-motorcycle:before { content: fa-content($fa-var-motorcycle); } .#{$fa-css-prefix}-mountain:before { content: fa-content($fa-var-mountain); } +.#{$fa-css-prefix}-mouse:before { content: fa-content($fa-var-mouse); } .#{$fa-css-prefix}-mouse-pointer:before { content: fa-content($fa-var-mouse-pointer); } .#{$fa-css-prefix}-mug-hot:before { content: fa-content($fa-var-mug-hot); } .#{$fa-css-prefix}-music:before { content: fa-content($fa-var-music); } @@ -852,6 +867,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-openid:before { content: fa-content($fa-var-openid); } .#{$fa-css-prefix}-opera:before { content: fa-content($fa-var-opera); } .#{$fa-css-prefix}-optin-monster:before { content: fa-content($fa-var-optin-monster); } +.#{$fa-css-prefix}-orcid:before { content: fa-content($fa-var-orcid); } .#{$fa-css-prefix}-osi:before { content: fa-content($fa-var-osi); } .#{$fa-css-prefix}-otter:before { content: fa-content($fa-var-otter); } .#{$fa-css-prefix}-outdent:before { content: fa-content($fa-var-outdent); } @@ -906,6 +922,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-pied-piper-alt:before { content: fa-content($fa-var-pied-piper-alt); } .#{$fa-css-prefix}-pied-piper-hat:before { content: fa-content($fa-var-pied-piper-hat); } .#{$fa-css-prefix}-pied-piper-pp:before { content: fa-content($fa-var-pied-piper-pp); } +.#{$fa-css-prefix}-pied-piper-square:before { content: fa-content($fa-var-pied-piper-square); } .#{$fa-css-prefix}-piggy-bank:before { content: fa-content($fa-var-piggy-bank); } .#{$fa-css-prefix}-pills:before { content: fa-content($fa-var-pills); } .#{$fa-css-prefix}-pinterest:before { content: fa-content($fa-var-pinterest); } @@ -966,6 +983,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-readme:before { content: fa-content($fa-var-readme); } .#{$fa-css-prefix}-rebel:before { content: fa-content($fa-var-rebel); } .#{$fa-css-prefix}-receipt:before { content: fa-content($fa-var-receipt); } +.#{$fa-css-prefix}-record-vinyl:before { content: fa-content($fa-var-record-vinyl); } .#{$fa-css-prefix}-recycle:before { content: fa-content($fa-var-recycle); } .#{$fa-css-prefix}-red-river:before { content: fa-content($fa-var-red-river); } .#{$fa-css-prefix}-reddit:before { content: fa-content($fa-var-reddit); } @@ -1039,6 +1057,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-shipping-fast:before { content: fa-content($fa-var-shipping-fast); } .#{$fa-css-prefix}-shirtsinbulk:before { content: fa-content($fa-var-shirtsinbulk); } .#{$fa-css-prefix}-shoe-prints:before { content: fa-content($fa-var-shoe-prints); } +.#{$fa-css-prefix}-shopify:before { content: fa-content($fa-var-shopify); } .#{$fa-css-prefix}-shopping-bag:before { content: fa-content($fa-var-shopping-bag); } .#{$fa-css-prefix}-shopping-basket:before { content: fa-content($fa-var-shopping-basket); } .#{$fa-css-prefix}-shopping-cart:before { content: fa-content($fa-var-shopping-cart); } @@ -1162,6 +1181,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-surprise:before { content: fa-content($fa-var-surprise); } .#{$fa-css-prefix}-suse:before { content: fa-content($fa-var-suse); } .#{$fa-css-prefix}-swatchbook:before { content: fa-content($fa-var-swatchbook); } +.#{$fa-css-prefix}-swift:before { content: fa-content($fa-var-swift); } .#{$fa-css-prefix}-swimmer:before { content: fa-content($fa-var-swimmer); } .#{$fa-css-prefix}-swimming-pool:before { content: fa-content($fa-var-swimming-pool); } .#{$fa-css-prefix}-symfony:before { content: fa-content($fa-var-symfony); } @@ -1228,6 +1248,7 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-trade-federation:before { content: fa-content($fa-var-trade-federation); } .#{$fa-css-prefix}-trademark:before { content: fa-content($fa-var-trademark); } .#{$fa-css-prefix}-traffic-light:before { content: fa-content($fa-var-traffic-light); } +.#{$fa-css-prefix}-trailer:before { content: fa-content($fa-var-trailer); } .#{$fa-css-prefix}-train:before { content: fa-content($fa-var-train); } .#{$fa-css-prefix}-tram:before { content: fa-content($fa-var-tram); } .#{$fa-css-prefix}-transgender:before { content: fa-content($fa-var-transgender); } @@ -1257,12 +1278,14 @@ readers do not read off random characters that represent icons */ .#{$fa-css-prefix}-uber:before { content: fa-content($fa-var-uber); } .#{$fa-css-prefix}-ubuntu:before { content: fa-content($fa-var-ubuntu); } .#{$fa-css-prefix}-uikit:before { content: fa-content($fa-var-uikit); } +.#{$fa-css-prefix}-umbraco:before { content: fa-content($fa-var-umbraco); } .#{$fa-css-prefix}-umbrella:before { content: fa-content($fa-var-umbrella); } .#{$fa-css-prefix}-umbrella-beach:before { content: fa-content($fa-var-umbrella-beach); } .#{$fa-css-prefix}-underline:before { content: fa-content($fa-var-underline); } .#{$fa-css-prefix}-undo:before { content: fa-content($fa-var-undo); } .#{$fa-css-prefix}-undo-alt:before { content: fa-content($fa-var-undo-alt); } .#{$fa-css-prefix}-uniregistry:before { content: fa-content($fa-var-uniregistry); } +.#{$fa-css-prefix}-unity:before { content: fa-content($fa-var-unity); } .#{$fa-css-prefix}-universal-access:before { content: fa-content($fa-var-universal-access); } .#{$fa-css-prefix}-university:before { content: fa-content($fa-var-university); } .#{$fa-css-prefix}-unlink:before { content: fa-content($fa-var-unlink); } diff --git a/base/vendor/components/font-awesome/scss/_shims.scss b/base/vendor/components/font-awesome/scss/_shims.scss index 00fc279c..d1753445 100644 --- a/base/vendor/components/font-awesome/scss/_shims.scss +++ b/base/vendor/components/font-awesome/scss/_shims.scss @@ -124,6 +124,10 @@ .#{$fa-css-prefix}.#{$fa-css-prefix}-mail-forward:before { content: fa-content($fa-var-share); } +.#{$fa-css-prefix}.#{$fa-css-prefix}-expand:before { content: fa-content($fa-var-expand-alt); } + +.#{$fa-css-prefix}.#{$fa-css-prefix}-compress:before { content: fa-content($fa-var-compress-alt); } + .#{$fa-css-prefix}.#{$fa-css-prefix}-eye { font-family: 'Font Awesome 5 Free'; font-weight: 400; @@ -626,15 +630,15 @@ .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-asc:before { content: fa-content($fa-var-sort-alpha-down); } -.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before { content: fa-content($fa-var-sort-alpha-up); } +.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-alpha-desc:before { content: fa-content($fa-var-sort-alpha-down-alt); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-asc:before { content: fa-content($fa-var-sort-amount-down); } -.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before { content: fa-content($fa-var-sort-amount-up); } +.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-amount-desc:before { content: fa-content($fa-var-sort-amount-down-alt); } .#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-asc:before { content: fa-content($fa-var-sort-numeric-down); } -.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before { content: fa-content($fa-var-sort-numeric-up); } +.#{$fa-css-prefix}.#{$fa-css-prefix}-sort-numeric-desc:before { content: fa-content($fa-var-sort-numeric-down-alt); } .#{$fa-css-prefix}.#{$fa-css-prefix}-youtube-square { font-family: 'Font Awesome 5 Brands'; @@ -954,14 +958,17 @@ .#{$fa-css-prefix}.#{$fa-css-prefix}-automobile:before { content: fa-content($fa-var-car); } -.#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before { content: fa-content($fa-var-taxi); } - .#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o { font-family: 'Font Awesome 5 Free'; font-weight: 400; } .#{$fa-css-prefix}.#{$fa-css-prefix}-envelope-o:before { content: fa-content($fa-var-envelope); } +.#{$fa-css-prefix}.#{$fa-css-prefix}-spotify { + font-family: 'Font Awesome 5 Brands'; + font-weight: 400; +} + .#{$fa-css-prefix}.#{$fa-css-prefix}-deviantart { font-family: 'Font Awesome 5 Brands'; font-weight: 400; @@ -2055,8 +2062,5 @@ font-weight: 400; } -.#{$fa-css-prefix}.#{$fa-css-prefix}-spotify { - font-family: 'Font Awesome 5 Brands'; - font-weight: 400; -} +.#{$fa-css-prefix}.#{$fa-css-prefix}-cab:before { content: fa-content($fa-var-taxi); } diff --git a/base/vendor/components/font-awesome/scss/_variables.scss b/base/vendor/components/font-awesome/scss/_variables.scss index 08695803..5de350e0 100644 --- a/base/vendor/components/font-awesome/scss/_variables.scss +++ b/base/vendor/components/font-awesome/scss/_variables.scss @@ -1,15 +1,17 @@ // Variables // -------------------------- -$fa-font-path: "../webfonts" !default; -$fa-font-size-base: 16px !default; -$fa-font-display: auto !default; -$fa-css-prefix: fa !default; -$fa-version: "5.9.0" !default; -$fa-border-color: #eee !default; -$fa-inverse: #fff !default; -$fa-li-width: 2em !default; -$fa-fw-width: (20em / 16); +$fa-font-path: "../webfonts" !default; +$fa-font-size-base: 16px !default; +$fa-font-display: auto !default; +$fa-css-prefix: fa !default; +$fa-version: "5.12.1" !default; +$fa-border-color: #eee !default; +$fa-inverse: #fff !default; +$fa-li-width: 2em !default; +$fa-fw-width: (20em / 16); +$fa-primary-opacity: 1 !default; +$fa-secondary-opacity: .4 !default; // Convenience function used to set content property @function fa-content($fa-var) { @@ -100,6 +102,7 @@ $fa-var-baby-carriage: \f77d; $fa-var-backspace: \f55a; $fa-var-backward: \f04a; $fa-var-bacon: \f7e5; +$fa-var-bahai: \f666; $fa-var-balance-scale: \f24e; $fa-var-balance-scale-left: \f515; $fa-var-balance-scale-right: \f516; @@ -182,6 +185,7 @@ $fa-var-buromobelexperte: \f37f; $fa-var-bus: \f207; $fa-var-bus-alt: \f55e; $fa-var-business-time: \f64a; +$fa-var-buy-n-large: \f8a6; $fa-var-buysellads: \f20d; $fa-var-calculator: \f1ec; $fa-var-calendar: \f133; @@ -204,6 +208,7 @@ $fa-var-car-alt: \f5de; $fa-var-car-battery: \f5df; $fa-var-car-crash: \f5e1; $fa-var-car-side: \f5e4; +$fa-var-caravan: \f8ff; $fa-var-caret-down: \f0d7; $fa-var-caret-left: \f0d9; $fa-var-caret-right: \f0da; @@ -307,6 +312,7 @@ $fa-var-comments-dollar: \f653; $fa-var-compact-disc: \f51f; $fa-var-compass: \f14e; $fa-var-compress: \f066; +$fa-var-compress-alt: \f422; $fa-var-compress-arrows-alt: \f78c; $fa-var-concierge-bell: \f562; $fa-var-confluence: \f78d; @@ -316,6 +322,7 @@ $fa-var-cookie: \f563; $fa-var-cookie-bite: \f564; $fa-var-copy: \f0c5; $fa-var-copyright: \f1f9; +$fa-var-cotton-bureau: \f89e; $fa-var-couch: \f4b8; $fa-var-cpanel: \f388; $fa-var-creative-commons: \f25e; @@ -349,6 +356,7 @@ $fa-var-cut: \f0c4; $fa-var-cuttlefish: \f38c; $fa-var-d-and-d: \f38d; $fa-var-d-and-d-beyond: \f6ca; +$fa-var-dailymotion: \f952; $fa-var-dashcube: \f210; $fa-var-database: \f1c0; $fa-var-deaf: \f2a4; @@ -439,6 +447,7 @@ $fa-var-exclamation: \f12a; $fa-var-exclamation-circle: \f06a; $fa-var-exclamation-triangle: \f071; $fa-var-expand: \f065; +$fa-var-expand-alt: \f424; $fa-var-expand-arrows-alt: \f31e; $fa-var-expeditedssl: \f23e; $fa-var-external-link-alt: \f35d; @@ -494,6 +503,7 @@ $fa-var-fire: \f06d; $fa-var-fire-alt: \f7e4; $fa-var-fire-extinguisher: \f134; $fa-var-firefox: \f269; +$fa-var-firefox-browser: \f907; $fa-var-first-aid: \f479; $fa-var-first-order: \f2b0; $fa-var-first-order-alt: \f50a; @@ -634,8 +644,9 @@ $fa-var-handshake: \f2b5; $fa-var-hanukiah: \f6e6; $fa-var-hard-hat: \f807; $fa-var-hashtag: \f292; +$fa-var-hat-cowboy: \f8c0; +$fa-var-hat-cowboy-side: \f8c1; $fa-var-hat-wizard: \f6e8; -$fa-var-haykal: \f666; $fa-var-hdd: \f0a0; $fa-var-heading: \f1dc; $fa-var-headphones: \f025; @@ -681,6 +692,7 @@ $fa-var-icons: \f86d; $fa-var-id-badge: \f2c1; $fa-var-id-card: \f2c2; $fa-var-id-card-alt: \f47f; +$fa-var-ideal: \f913; $fa-var-igloo: \f7ae; $fa-var-image: \f03e; $fa-var-images: \f302; @@ -692,6 +704,7 @@ $fa-var-infinity: \f534; $fa-var-info: \f129; $fa-var-info-circle: \f05a; $fa-var-instagram: \f16d; +$fa-var-instagram-square: \f955; $fa-var-intercom: \f7af; $fa-var-internet-explorer: \f26b; $fa-var-invision: \f7b0; @@ -794,6 +807,7 @@ $fa-var-mars-stroke-v: \f22a; $fa-var-mask: \f6fa; $fa-var-mastodon: \f4f6; $fa-var-maxcdn: \f136; +$fa-var-mdb: \f8ca; $fa-var-medal: \f5a2; $fa-var-medapps: \f3c6; $fa-var-medium: \f23a; @@ -810,6 +824,7 @@ $fa-var-mendeley: \f7b3; $fa-var-menorah: \f676; $fa-var-mercury: \f223; $fa-var-meteor: \f753; +$fa-var-microblog: \f91a; $fa-var-microchip: \f2db; $fa-var-microphone: \f130; $fa-var-microphone-alt: \f3c9; @@ -823,6 +838,7 @@ $fa-var-minus-square: \f146; $fa-var-mitten: \f7b5; $fa-var-mix: \f3cb; $fa-var-mixcloud: \f289; +$fa-var-mixer: \f956; $fa-var-mizuni: \f3cc; $fa-var-mobile: \f10b; $fa-var-mobile-alt: \f3cd; @@ -840,6 +856,7 @@ $fa-var-mortar-pestle: \f5a7; $fa-var-mosque: \f678; $fa-var-motorcycle: \f21c; $fa-var-mountain: \f6fc; +$fa-var-mouse: \f8cc; $fa-var-mouse-pointer: \f245; $fa-var-mug-hot: \f7b6; $fa-var-music: \f001; @@ -867,6 +884,7 @@ $fa-var-opencart: \f23d; $fa-var-openid: \f19b; $fa-var-opera: \f26a; $fa-var-optin-monster: \f23c; +$fa-var-orcid: \f8d2; $fa-var-osi: \f41a; $fa-var-otter: \f700; $fa-var-outdent: \f03b; @@ -921,6 +939,7 @@ $fa-var-pied-piper: \f2ae; $fa-var-pied-piper-alt: \f1a8; $fa-var-pied-piper-hat: \f4e5; $fa-var-pied-piper-pp: \f1a7; +$fa-var-pied-piper-square: \f91e; $fa-var-piggy-bank: \f4d3; $fa-var-pills: \f484; $fa-var-pinterest: \f0d2; @@ -981,6 +1000,7 @@ $fa-var-reacteurope: \f75d; $fa-var-readme: \f4d5; $fa-var-rebel: \f1d0; $fa-var-receipt: \f543; +$fa-var-record-vinyl: \f8d9; $fa-var-recycle: \f1b8; $fa-var-red-river: \f3e3; $fa-var-reddit: \f1a1; @@ -1054,6 +1074,7 @@ $fa-var-ship: \f21a; $fa-var-shipping-fast: \f48b; $fa-var-shirtsinbulk: \f214; $fa-var-shoe-prints: \f54b; +$fa-var-shopify: \f957; $fa-var-shopping-bag: \f290; $fa-var-shopping-basket: \f291; $fa-var-shopping-cart: \f07a; @@ -1177,6 +1198,7 @@ $fa-var-supple: \f3f9; $fa-var-surprise: \f5c2; $fa-var-suse: \f7d6; $fa-var-swatchbook: \f5c3; +$fa-var-swift: \f8e1; $fa-var-swimmer: \f5c4; $fa-var-swimming-pool: \f5c5; $fa-var-symfony: \f83d; @@ -1243,6 +1265,7 @@ $fa-var-tractor: \f722; $fa-var-trade-federation: \f513; $fa-var-trademark: \f25c; $fa-var-traffic-light: \f637; +$fa-var-trailer: \f941; $fa-var-train: \f238; $fa-var-tram: \f7da; $fa-var-transgender: \f224; @@ -1272,12 +1295,14 @@ $fa-var-typo3: \f42b; $fa-var-uber: \f402; $fa-var-ubuntu: \f7df; $fa-var-uikit: \f403; +$fa-var-umbraco: \f8e8; $fa-var-umbrella: \f0e9; $fa-var-umbrella-beach: \f5ca; $fa-var-underline: \f0cd; $fa-var-undo: \f0e2; $fa-var-undo-alt: \f2ea; $fa-var-uniregistry: \f404; +$fa-var-unity: \f949; $fa-var-universal-access: \f29a; $fa-var-university: \f19c; $fa-var-unlink: \f127; diff --git a/base/vendor/components/font-awesome/scss/brands.scss b/base/vendor/components/font-awesome/scss/brands.scss index 3dd019aa..1e873093 100644 --- a/base/vendor/components/font-awesome/scss/brands.scss +++ b/base/vendor/components/font-awesome/scss/brands.scss @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import 'variables'; @@ -7,7 +7,7 @@ @font-face { font-family: 'Font Awesome 5 Brands'; font-style: normal; - font-weight: normal; + font-weight: 400; font-display: $fa-font-display; src: url('#{$fa-font-path}/fa-brands-400.eot'); src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'), @@ -19,4 +19,5 @@ .fab { font-family: 'Font Awesome 5 Brands'; + font-weight: 400; } diff --git a/base/vendor/components/font-awesome/scss/fontawesome.scss b/base/vendor/components/font-awesome/scss/fontawesome.scss index bdf0f656..1dfa0952 100644 --- a/base/vendor/components/font-awesome/scss/fontawesome.scss +++ b/base/vendor/components/font-awesome/scss/fontawesome.scss @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import 'variables'; diff --git a/base/vendor/components/font-awesome/scss/regular.scss b/base/vendor/components/font-awesome/scss/regular.scss index f74ac628..09b6b8d8 100644 --- a/base/vendor/components/font-awesome/scss/regular.scss +++ b/base/vendor/components/font-awesome/scss/regular.scss @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import 'variables'; diff --git a/base/vendor/components/font-awesome/scss/solid.scss b/base/vendor/components/font-awesome/scss/solid.scss index a408f38b..af632036 100644 --- a/base/vendor/components/font-awesome/scss/solid.scss +++ b/base/vendor/components/font-awesome/scss/solid.scss @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import 'variables'; diff --git a/base/vendor/components/font-awesome/scss/v4-shims.scss b/base/vendor/components/font-awesome/scss/v4-shims.scss index 5a091123..19033f41 100644 --- a/base/vendor/components/font-awesome/scss/v4-shims.scss +++ b/base/vendor/components/font-awesome/scss/v4-shims.scss @@ -1,5 +1,5 @@ /*! - * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 5.12.1 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) */ @import 'variables'; diff --git a/base/vendor/components/font-awesome/webfonts/fa-brands-400.eot b/base/vendor/components/font-awesome/webfonts/fa-brands-400.eot index e79f40f98a8be036d04d8b0def788bd02609b877..e4ccce2d5c2355fd80f8a3fa48ca66d0dee2c1f5 100644 GIT binary patch delta 8248 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 delta 4577 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 diff --git a/base/vendor/components/font-awesome/webfonts/fa-brands-400.svg b/base/vendor/components/font-awesome/webfonts/fa-brands-400.svg index ba0d850b..eb0f26fc 100644 --- a/base/vendor/components/font-awesome/webfonts/fa-brands-400.svg +++ b/base/vendor/components/font-awesome/webfonts/fa-brands-400.svg @@ -1,12 +1,12 @@ -Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019 +Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 By Robert Madole Copyright (c) Font Awesome @@ -22,8 +22,8 @@ Copyright (c) Font Awesome descent="-64" bbox="-0.200195 -66.9505 641.5 448.3" underline-thickness="25" - underline-position="-51" - unicode-range="U+0020-F842" + underline-position="-50" + unicode-range="U+0020-F957" /> - + - + +d="M274.69 173.31l-108.69 -71.3096l71.3096 108.69zM256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM411.85 265.21c-2.71094 -1.13477 -4.91211 -4.44043 -4.91211 -7.37988c0 -0.880859 0.274414 -2.25684 0.612305 -3.07031 +v0c1.12988 -2.72559 4.44043 -4.9375 7.39062 -4.9375c0.87793 0 2.24902 0.272461 3.05957 0.607422l14.75 6.11035c2.72754 1.12891 4.94141 4.44043 4.94141 7.39258c0 0.879883 -0.273438 2.25391 -0.611328 3.06738v0 +c-1.12793 2.73047 -4.44043 4.94629 -7.39453 4.94629c-0.876953 0 -2.24512 -0.271484 -3.05566 -0.606445zM314.43 354c-0.341797 -0.818359 -0.620117 -2.20117 -0.620117 -3.08789c0 -2.95215 2.21387 -6.26367 4.94043 -7.39258v0 +c0.810547 -0.334961 2.18164 -0.607422 3.05957 -0.607422c2.9502 0 6.26074 2.21191 7.39062 4.9375l6.12988 14.7803c0.335938 0.811523 0.608398 2.18164 0.608398 3.05957c0 2.9502 -2.21289 6.26172 -4.93848 7.39062v0 +c-0.813477 0.337891 -2.18848 0.612305 -3.07031 0.612305c-2.93848 0 -6.24512 -2.20117 -7.37988 -4.91211zM256 388c-4.41602 0 -8 -3.58398 -8 -8v-16c0 -4.41602 3.58398 -8 8 -8v0c4.41602 0 8 3.58398 8 8v16c0 4.41602 -3.58398 8 -8 8v0zM181 373.08 +c-2.72461 -1.12988 -4.93555 -4.44043 -4.93555 -7.38965c0 -0.869141 0.266602 -2.22656 0.595703 -3.03027l6.12988 -14.7803c1.09863 -2.80664 4.43555 -5.08398 7.44922 -5.08398c4.41602 0 8 3.58398 8 8c0 0.922852 -0.299805 2.3584 -0.668945 3.2041l-6.11035 14.75 +c-1.12891 2.72754 -4.44043 4.94141 -7.39258 4.94141c-0.879883 0 -2.25391 -0.273438 -3.06738 -0.611328zM117.42 330.59c-1.29297 -1.29297 -2.35156 -3.82617 -2.35156 -5.65527c0 -1.81445 1.03613 -4.33398 2.31152 -5.625l11.3105 -11.3096 +c1.29297 -1.29199 3.82617 -2.34082 5.6543 -2.34082s4.3623 1.04883 5.65527 2.34082v0c1.28418 1.29199 2.32617 3.81836 2.32617 5.63965c0 1.82227 -1.04199 4.34863 -2.32617 5.64062l-11.2695 11.3096c-1.29395 1.29297 -3.82715 2.3418 -5.65527 2.3418 +s-4.3623 -1.04883 -5.65527 -2.3418v0zM60 192c0 -4.41602 3.58398 -8 8 -8h16c4.41602 0 8 3.58398 8 8v0c0 4.41602 -3.58398 8 -8 8h-16c-4.41602 0 -8 -3.58398 -8 -8v0zM100.15 118.79c2.71094 1.13477 4.91211 4.44043 4.91211 7.37988 +c0 0.880859 -0.274414 2.25684 -0.612305 3.07031v0c-1.12988 2.72559 -4.44043 4.9375 -7.39062 4.9375c-0.87793 0 -2.24902 -0.272461 -3.05957 -0.607422l-14.75 -6.11035c-2.72754 -1.12891 -4.94141 -4.44043 -4.94141 -7.39258 +c0 -0.879883 0.273438 -2.25391 0.611328 -3.06738v0c1.12793 -2.73047 4.44043 -4.94629 7.39453 -4.94629c0.876953 0 2.24512 0.271484 3.05566 0.606445zM104.48 254.79c0.333008 0.80957 0.604492 2.14551 0.604492 3.02051 +c0 2.94922 -2.21094 6.25977 -4.93457 7.38965l-14.7803 6.12988c-0.811523 0.335938 -2.18164 0.608398 -3.05957 0.608398c-2.9502 0 -6.26172 -2.21289 -7.39062 -4.93848v0c-0.337891 -0.813477 -0.612305 -2.18848 -0.612305 -3.07031 +c0 -2.93848 2.20117 -6.24512 4.91211 -7.37988l14.7803 -6.12012c0.814453 -0.338867 2.19141 -0.614258 3.07422 -0.614258c2.96582 0 6.28418 2.22852 7.40625 4.97461v0zM197.57 30c0.369141 0.845703 0.668945 2.28125 0.668945 3.2041c0 4.41602 -3.58398 8 -8 8 +c-3.01367 0 -6.35059 -2.27734 -7.44922 -5.08398l-6.12988 -14.7803c-0.335938 -0.811523 -0.608398 -2.18164 -0.608398 -3.05957c0 -4.41797 3.58594 -8.00293 8.00293 -8.00293c2.95312 0 6.2666 2.21387 7.39551 4.94238zM264 4v16c0 4.41602 -3.58398 8 -8 8v0 +c-4.41602 0 -8 -3.58398 -8 -8v-16c0 -4.41602 3.58398 -8 8 -8v0c4.41602 0 8 3.58398 8 8zM331 10.9199c2.72461 1.12988 4.93555 4.44043 4.93555 7.38965c0 0.869141 -0.266602 2.22656 -0.595703 3.03027l-6.12988 14.7803 +c-1.12891 2.72559 -4.44043 4.9375 -7.39062 4.9375c-0.87793 0 -2.24805 -0.272461 -3.05957 -0.607422v0c-2.72559 -1.12988 -4.9375 -4.44043 -4.9375 -7.39062c0 -0.87793 0.272461 -2.24902 0.607422 -3.05957l6.11035 -14.75 +c1.12891 -2.72754 4.44043 -4.94141 7.39258 -4.94141c0.879883 0 2.25391 0.273438 3.06738 0.611328v0zM394.58 53.4102c1.29297 1.29297 2.35156 3.82617 2.35156 5.65527c0 1.81445 -1.03613 4.33398 -2.31152 5.625l-11.3105 11.3096 +c-1.29297 1.29199 -3.82617 2.34082 -5.6543 2.34082s-4.3623 -1.04883 -5.65527 -2.34082v0c-1.28418 -1.29199 -2.32617 -3.81836 -2.32617 -5.63965c0 -1.82227 1.04199 -4.34863 2.32617 -5.64062l11.2695 -11.3096c1.29395 -1.29297 3.82715 -2.3418 5.65527 -2.3418 +s4.3623 1.04883 5.65527 2.3418v0zM286.25 161.75l115.41 175.91l-175.91 -115.41l-115.41 -175.91zM437.08 117c0.337891 0.813477 0.612305 2.18848 0.612305 3.07031c0 2.93848 -2.20117 6.24512 -4.91211 7.37988l-14.7803 6.12012 +c-0.818359 0.341797 -2.20117 0.620117 -3.08789 0.620117c-2.95215 0 -6.26367 -2.21387 -7.39258 -4.94043v0c-0.334961 -0.810547 -0.607422 -2.18164 -0.607422 -3.05957c0 -2.9502 2.21191 -6.26074 4.9375 -7.39062l14.7803 -6.12988 +c0.811523 -0.335938 2.18164 -0.608398 3.05957 -0.608398c2.9502 0 6.26172 2.21289 7.39062 4.93848v0zM444 184c4.41602 0 8 3.58398 8 8v0c0 4.41602 -3.58398 8 -8 8h-16c-4.41602 0 -8 -3.58398 -8 -8v0c0 -4.41602 3.58398 -8 8 -8h16z" /> - + +d="M481.92 313.52c6.46973 -12.7793 22.4697 -41.6494 21.9697 -85.0791c-0.0791016 -37.5908 -26.4893 -83.4844 -58.9492 -102.44c-14.957 -8.88379 -41.2148 -16.1318 -58.6104 -16.1797c-0.139648 0 -52.6504 -2.56055 -80.5098 16.8096 +c-5.85059 4.08008 -9.14062 8.94043 -9.14062 14c0 6.16016 4.82031 9 6.39062 11c9.7998 12.75 15.1094 28.1699 15.1094 38.5703c0 32.71 -11 59.2998 -33 83.0996c-1.16016 1.25 -42.9795 50.1807 -122.25 50.1807c-63.2393 0 -123.46 -32.6504 -149.46 -79.1406 +c24.04 111.98 123.58 195.66 242.44 195.66c96.3496 0 184.96 -46.1797 226.01 -126.48zM212.77 -27.6699c1.28027 -0.570312 29.0107 -20.5898 67.1309 -27.21c-6.53809 -0.628906 -17.1748 -1.13965 -23.7422 -1.13965c-87.0234 0 -187.626 63.9521 -224.559 142.75 +c-25.75 55.4697 -24.0801 105.96 -23 118.27c4.16992 34.2803 27.0801 59.7002 46.8408 74.7998c29.6299 22.6904 68.8193 35.6904 107.529 35.6904c7.0498 0 43.9199 -0.900391 77.6406 -18.5898c32.5596 -17.1006 47.3193 -37.5801 56.5596 -53.5107 +c1.54688 -2.70312 3.73828 -7.24609 4.88965 -10.1396c-4.21973 4.65039 -40.0596 44.2002 -99.0596 -1c-22.9014 -16.6006 -48.4238 -51.957 -56.9697 -78.9199c-14.1406 -40.4004 -12.8398 -88.5801 20.0996 -136c10.2158 -15.1748 31.1104 -35.334 46.6396 -45z +M463.49 70.6602c1.99316 -1.25879 3.6123 -4.19531 3.6123 -6.55273c0 -1.25195 -0.547852 -3.12305 -1.22266 -4.17773c-47.5703 -75.4297 -127.86 -108.87 -163 -108.87c-22.7002 0 -48.1299 6.95996 -71.7002 19.6104c-33 17.6699 -49.4893 38.7598 -56 47.6699 +c-46.3301 63.5303 -28.25 122.29 -13.3301 151.66c8.06445 15.8418 25.4287 38.2422 38.7607 50c-3.50684 -6.9668 -6.42773 -18.9512 -6.52051 -26.75c0 -80.9404 79.8506 -144 171.521 -144h0.341797c19.7266 0 50.7314 5.6084 69.208 12.5195 +c5.78809 2.16992 14.9316 6.25586 20.4102 9.12012c0.969727 0.539062 2.65723 0.975586 3.76562 0.975586c1.24316 0 3.10449 -0.540039 4.1543 -1.20508z" /> - + +d="M97.2197 351.79c-43.2197 -41.6201 -64.9697 -92.5898 -64.8193 -154.021c0.15918 -68 23.0293 -122.67 67.4795 -165c9.33984 -8.34961 13.2002 -14.9199 13.2002 -20.5498c0 -2.75 -1.90039 -5.62012 -3.81055 -8.37988 +c-1.92676 -1.89453 -5.67676 -3.61426 -8.36914 -3.83984c-10.2803 0 -24.6807 12.1396 -43.4707 35.79c-36.5898 44.8701 -53.1992 94.3398 -54.0596 161.87s20.3096 113.34 61.79 160.6c14.9199 16.9004 27.3594 25.6904 35.8398 25.6904 +c2.56152 -0.0585938 6.32031 -1.33105 8.38965 -2.83984c1.91016 -1.91016 3.83008 -4.66016 3.83008 -7.41992c0 -4.78027 -5.63965 -11.25 -16 -21.9004zM239.47 27.9297c0.580078 -0.370117 0.910156 -0.549805 0.910156 -0.549805zM333.26 27.3799l0.169922 0.129883 +c-0.189453 -0.129883 -0.259766 -0.179688 -0.169922 -0.129883zM336.39 185.56c16.2305 -4.14941 24.04 24.04 30.0303 30.0508c84.71 -110.101 -27.5098 -184.45 -33 -188.101c3.86035 3.04004 44.3301 49.7705 21.5801 76.5498 +c-1 1.03027 -67.2998 -20.0596 -54.8398 53.54c8.30957 48.6807 -7.60059 71.1309 -7.60059 71.1309c-17.9697 -37.29 -32.5 -53.8604 -43.5 -72.1602c-56.9492 -92.9404 -16.2793 -124.29 -9.5498 -128.641c-10.54 6.5 -108.27 70.8799 -34 175.23 +c78.3701 110.189 62.8301 159.57 62.8301 159.57c118.46 -94.2803 51.8105 -173.021 68.0498 -177.171zM510.88 358.31c41.4404 -47.3096 62.6699 -93.1592 61.75 -160.649s-17.4697 -117.021 -54.0596 -161.87c-18.79 -23.6602 -33.1904 -35.79 -43.4707 -35.79 +c-2.69238 0.231445 -6.44141 1.95605 -8.36914 3.84961c-1.91016 2.76074 -3.81055 5.63086 -3.81055 8.38086c0.0205078 5.62988 3.86035 12.1992 13.2002 20.5498c44.4795 42.3701 67.3203 97 67.4795 165c0.180664 61.4697 -21.5898 112.45 -64.8193 154.06 +c-10.4004 10.6406 -16 17.1201 -16 21.9004c0 2.75977 1.91992 5.50977 3.83008 7.41992c2.06934 1.50977 5.82812 2.78125 8.38965 2.83984c8.51953 0 21 -8.79004 35.8799 -25.6904z" /> @@ -1694,15 +1704,24 @@ c-16.3994 15.8994 -44.5996 17.2998 -61.3994 -7l-44.8008 -64.7002v38.7998z" /> - + +d="M286.17 29c9.93652 0 18 -8.06445 18 -18s-8.06348 -18 -18 -18c-9.93555 0 -18 8.06445 -18 18s8.06445 18 18 18zM398.09 176.6c22.9102 -33.46 35.9102 -72.3398 35.9102 -110.92c0 -31.6797 -5 -60.6797 -14.5996 -86.2295 +c-3.04004 -8.0498 -10.9502 -12.7197 -18.3701 -11.1504c-6.83984 1.24023 -11.1201 9.28027 -8.60059 15.7402c11.1904 28.71 14.8799 58.3398 14.8799 81.6396c-0.0517578 7.91797 -1.30566 20.6543 -2.7998 28.4307 +c-0.649414 -1.06055 -1.12988 -2.2207 -1.84961 -3.2207c-17.29 -24.5293 -50.54 -33.8896 -84.7402 -23.8398c-78.8701 23.1699 -178.02 3.81055 -236.25 -38.5898l24.6602 74.1104l-46.8203 -59.8301c2.04297 -15.3486 9.10352 -39.1504 15.7598 -53.1299 +c6.25 -13.1904 0.460938 -18.2402 -3.75 -20.1104c-4.76953 -2.12012 -13.8594 -2.7998 -19.6396 7.33008c-5.43652 9.81641 -11.96 26.6436 -14.5596 37.5596l-23.3203 -29.7998v33.6406c0 55.7695 0 125.109 62.6504 188.409c11.4258 11.5684 32.1631 27.4902 46.29 35.54 +l-8.93066 0.540039c-27.8799 1.64062 -49.2402 24.8506 -47.6299 51.8506l2.36035 36.6797c0 -6.24023 0.139648 45.8799 50.75 45.8799c2.05957 0 -0.470703 0.120117 41.0596 -2.33008c2.31641 -0.15625 6.03027 -0.71582 8.29004 -1.25 +c7.41992 11.3398 15.6504 22.8301 24.3398 34.8906l5.48047 7.55957l22.8994 -13.5195c-11.29 -24 -10 -33 -9.39941 -35c9.08008 0.229492 20 -1.6709 32.4102 -5.77051c29.6523 -9.84375 53.7188 -43.1914 53.7188 -74.4355 +c0 -8.5127 -2.61621 -21.8154 -5.83887 -29.6943c6.18652 -2.13965 12.3135 -4.56348 18.3799 -7.27051c47.8896 -21.2598 77.7598 -59.0898 87.2598 -73.71zM142.37 319.42c1.55664 5.42773 4.69336 14.0156 7 19.1699l-29.1104 1.73047 +c0.610352 -0.0507812 -12.2598 0.849609 -13.2598 -11.3203l-2.41016 -36.6602c-0.00585938 -0.143555 -0.0107422 -0.376953 -0.0107422 -0.520508c0 -6.50293 5.27344 -12 11.7705 -12.2695l22.3809 -1.33984c-0.380859 3.10645 -0.689453 8.16797 -0.689453 11.2969 +c0 2.28809 0.165039 5.99414 0.369141 8.27344l-13.1299 0.779297l1.38965 21.79zM290.79 147.24c2.06152 1.58789 3.73438 4.9873 3.73438 7.58887c0 1.80273 -0.893555 4.42383 -1.99414 5.85059l-81.0898 96.3203c-1.71484 1.99023 -5.23828 3.60547 -7.86523 3.60547 +c-1.99023 0 -4.87305 -1.00098 -6.43555 -2.23535c-2.05957 -1.58398 -3.73242 -4.97949 -3.73242 -7.57812c0 -1.7998 0.892578 -4.41699 1.99316 -5.8418c0.0898438 -0.140625 18.5996 -22.1406 18.5996 -22.1406l-16.9102 -13.29 +c-1.59473 -1.22266 -2.88867 -3.8457 -2.88867 -5.85547c0 -1.37988 0.680664 -3.38867 1.51855 -4.48438c0.0800781 -0.109375 2.52246 -3.07324 3.7998 -4.5293c1.27832 -1.45703 3.8877 -2.63867 5.8252 -2.63867c1.4707 0 3.60547 0.734375 4.76562 1.63867 +l17.0898 13.4492l14.1396 -16.7393l-34.5703 -27.1807c-1.58398 -1.22266 -2.86914 -3.83984 -2.86914 -5.84082c0 -1.38574 0.685547 -3.40039 1.5293 -4.49902l15.7803 -18.6396c1.33594 -1.55176 4.08203 -2.81055 6.12988 -2.81055 +c1.54492 0 3.78516 0.775391 5 1.73047l34.4199 27l9.68066 -11.4902c1.7334 -1.98242 5.27832 -3.5918 7.91211 -3.5918c1.98438 0 4.86816 0.986328 6.4375 2.20215zM187.44 29c9.93555 0 18 -8.06445 18 -18s-8.06445 -18 -18 -18c-9.93652 0 -18 8.06445 -18 18 +s8.06348 18 18 18z" /> + + + + + + + + + + + + + + + diff --git a/base/vendor/components/font-awesome/webfonts/fa-brands-400.ttf b/base/vendor/components/font-awesome/webfonts/fa-brands-400.ttf index 217ffe9e4b273741dcd6434767c115ab3b6297f2..08622a3b0fdea1ed16bdfd38f66f19d781fcc7e3 100644 GIT binary patch delta 8201 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 aI|g3befck-D1Z7+#Wk$^)*s-<+x{OZ>LPyt delta 4485 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 diff --git a/base/vendor/components/font-awesome/webfonts/fa-brands-400.woff b/base/vendor/components/font-awesome/webfonts/fa-brands-400.woff index a2d80254c3324ed27090e4f5d23847f7c85694c6..a43870c27ff588231006e02c71709f11e27360d7 100644 GIT binary patch literal 89824 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

w`Ao`B8FfP>nd2WTiT*&L> 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�d261qc>pomd%U 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

Xfe3df@HCHPEqQF4M3U za2HT@8JO(XlQLfK!ZqY`Fx?I8!2){OO4yN8K>^i-9(f0jm_Ow;-G$L_R(KwB{=V~oY z-$D=v%SIk}KM6bw6L>OmdLZEh%&Bi+%6TC&uPKNNfdl^q*s55HVB%RYN8gJ;`h-wim zL_BRlD8UBVaCav)N8gE16iOTDAcv|FV9Od=}Kl7JN#o-$zk=Ycm5+K!>7b9hO7 z-t^ME7~(1GH!$#runutTIw~v0P;J~si3Y4UBJ>a7E|Gi?RUzA{!KQwMP~pTi4m zyt?;(LwwelPFMYB7mU{!{!LoweF8%F*#T}->D8ev!EbGUB@QLX6|T&LS?9^!sM8O~ KTmHXqf8puCx%H#~ diff --git a/base/vendor/components/font-awesome/webfonts/fa-brands-400.woff2 b/base/vendor/components/font-awesome/webfonts/fa-brands-400.woff2 index e27b0bfaf805d30fa467a0332b7c61ac95ba616e..3c5189de1244568a736ee8875f7ad354caf67715 100644 GIT binary patch literal 76548 zcmV((K;XZ3Pew8T0RR910V@Om4FCWD0tR>h0V=8iO2EVb00000000000000000000 z0000#Mn+Uk92y=5U;vA15eN#0vs{Jdd;vBBBm<3f3x<3E1Rw>A1qZ1-Teh2VM0F9$ zKf>tgHsk>B)zYO?IAj#T#sLJ6W2UGGHVy~|Sv>py|35!j#JFa*%-mjAC7}oWd&s8Z zIFsrS7zJ*qIVKIYR#Z*3&Kj_g8&xQnGCIy>J#9126&n&mCN5*ewax=2sS0DEEYsw* z!`P+mNk4QuxWpo1gJ6{d9J?AHnfqm)pBNL^kZ zQKL)zixL^?Ngdqf7X9t-Z+;&1joaZITjYO_BP~OX6{|n>@OhtttK)JgD~wxsAtfVo ztq=cC`?d4#%oknJSq}+GL}+TQLdcXzY*2z|9sZyGpq=}7cMB-N2oegjB+5LIW||2x ziJu?UeZH>Uh=3c#kc0|sn!(J9imH{Js8O)J_S4mJOp3^ zmSLNuj0&b;N~B*%U+KT#w|%uXbtN^6oXLTSr;KhIC+AG!CvmzOlTFE3Jsm!xUY zElCv_i?kFxRmAEmvtLAKP?&gUj*N-I#Q26yMLR$M;QuR~pDybVF^Eb{pKDhaOr}=% zAy;*XWicQDvH@uknDxPb|8wu3UU^f=AaqwPpnPath23KlI}<2=05rbf|NnlyzLW3H z{ZlpbCJaK=BMk&pc=-zRw%xm`>%u_7g9ZNiEh}0+VO61e@7n*@cBhh5l1fr(pxYPt z(PtW9P)qC(>>9Odgj+znLZTbFYR(^+o1GBb-)3rvc;d2VmGqUqiJqWy5le=|mhX;V@R<2b}xpv3Pd2(Ey z$}dc^Ji!Cu)z4Q;{r{?WcU6B`Fd%T^?&$&Bvabb}Ar6>t9BhcAO%$E`^!d?Z)4iQO ze^)RdFwC%I83YywuM@}S?&$}+_s;$g&I@_OK@6TFn~+yMGIxG7?Ax;X_c~yZ zF*FPaqIf_SSOLkH@W6*9BD#UZ+kxk>pXSflA7_%AA>myPEHGvzjT2wuxUG+SxJp;) zs`q5aEeA@lP=-_c10Q&ga#@w}&D>{1WWg>M^o*APN~P)c?%j3Q&G~us_()&rn;@wS z1A+p>fZHzH4Z~nKgb+x8ne7M|*lzDgFo1)R+xgdNuJ#oWRpPhPu;4KFbr|(!h-4?J z;vggatcyXkcv`~rfa4G@CZCC9Y?8{ zlxQ8gPPDcEzp8$@(Wc%lv6}gFfypFcRl3rm*gNTTT zh)CGar#q~z5_9{UG75|WH8$kMFH>THb_I85Z|vEru8BKv%EJAdST{^AQmph1H_VZc{Inw-`KTv; zM$WjIF!$%h{H^Z}uDj9ZJKovu_r4eQ@_y2-zMfN@@MAg`Pj}wu!nt2W&o#U2yQw=% zl&MgoLnqz#-s`>9Cw+E9ujyX8>3!d8_sMd|aL#LhOIC8ajQz(}Yh6!fDduH59o zvgfaxe^NyA;Ua-(=YuNF7eYl^c|ZCs46 z)^4he^U;RW-Eha4@6_4-)!4WK8t>2WlQij&My*mxB_bY!N+A&u5dT_~DOMy+5<43| zDGB9leilUr2rWW|fB*K~+dm#&xpdJHX|@VzFww)crj%Eu5_XN)ho)kPP_@Cf&!9l^Nf^C8=g1Lg3f*FDa!5G0X!4T#V^DJ{e zbBNi(bTWBN2*WXAQ#08F`fvJA`YHVZ{U-ea{Rn-C{ttbeZloJ%j;4)|sduR7s3)k~ zsrA$vY85qss;6r6=qF}s%Y1dW$67khs=GG*I$k3m1q(W~^L6IUtph+GombO9^*H;uT$RVXOGtvRi7k&u=pa2KX%mh10 zM9~cmgoUdOmjZE0i_{z|$^}Ad#Z75XEUIkgI)a5u6{cW~pl2x=LK6`tje{lhA!Rti zS^>t^DV8P0r{~-Ym%z0FV$xIy%Y}V(O*kG&QcWPCA|x?MxrGLY@A=%cAdm@EO*Bpj zO?lwOooHJGnRd^0myDxmDZvNNUl%11ZE&HE7$yeLpGuBZknhApiCoCHlCd`-{30nh zfI#3eJhG+c+0Fp_$_?Gra9MPXYsDN9lJI~FDhWrD-=%!rlz_uZGA7e=cS&gGV3Pdd znFv>k7IUm-qQlF?5O1Ej4}mx8xM)12mv9j!hXoS_2R7m+BB8yca=~*|BsQFeomThp z$(AMd{HR2wwZe0A)arTkF}3I?U*wUzQ=r}*_E^cpXUcLbQpqVH6asnNZoJBf0(A#R ze6TQiH(^HMg|g_zN9F@sgM@0l+8&mv!0MUM+d#I$t$Wb}Sl${kL7ydcgml5eOs58q z1F<3TG0v*A+yw>Xc3>?>)^r-a2H<-xhF-1-X$?)sw_>1rl@NK44vU%`C0lZ~s9j0q zP6_}4m)7m}@>`xgw+1mDI%HfHivy31TS3NYdZD&9BtpE>0T`rK$Zpn$&Z%J7!`y)a zwG2$^FjUDq-(+WTL0)qrjj6MMw$hamnzBMy;*+i;m#qa@Yq)L)J}}-Q@suqaSZY33uBChdyPw;O6O zp-n}?i%kLNqXBW()M79-5}To3xtc0J+V(7}U_!>r^Zwvg&0HnCTGoO6G#GM)tZ<>yL#_PpPplT%* z$br(xja|;Hy?}Ur8)Mjj`}aCUQ>2Yhnfk^r|d?Vd#F793Mr+9tp@F<<Hhr-xs$85tycG~zL=|F0&Rx*}aI`;vP|56HTw2sh zD6NG8tgCOTe;I1%OnY+nPHpfdM5PJ~^GZht>n5Bz)jT+yzg9MU{odK*Ljcx#HOMM> z0Z5yZk`Pmq_H{AKaYe>WF6*Y~1My=~k*8T7*ZDvV)Z_thtjH@%ntY`J$ZvY?P5Nko zJYsw(Hh3MWlK5CU#!DyFyi{;)ZDW0v(6Al?gnL7)15{xDr0Whb<>u@6AH!G|-)oC{ z@V*PVdiUDr)e5x-La+iYSlQo7Wv;G6ZH_i8p8~4wdE2}(S2&=H&dt_+Qvl}J{qtCz z*_H>B5u4)1j7bNhG-!R@(}m0C<1_BZPfiqtDT3WJ%dd8`AI?`NHaVTHF8}?whI}@My4o&7g z_e~Q@<#6(jJ(`~jK=x$4q}kzV8pb&+2mJ1Su2dPh*qvzD6TlVk(0PNEWlcW1##)Df z_L1}c$?V4nx+Nq73rRIepxfkOa2*o&Wr?GqW7V&p0niFvk!(k9`W|e!zPh-aEsV>q zI*5B8n(PHYH78<*UF`!)x7AOGY#mi%FzQ{QBMYI!0hbV;>t0wtp-sf&T+=1m*GU)7V}EGECAUo z%T03IVV`wFX{rsVlw}VAeuf)7t5hKp5rCx(lO|6q1d5EACrf8ikyV(o=zNV*q!2(q8oy+J&fkbc zvw&j<0+8hnBj~vv;%onnXL1ZU;KT2d(;eOacS1aniQRRmNcXySx_qN27zd|fmq+UyJiepLVuzcZN#PUn;Z`KQ5 zg1896vijHZ5No3Ql#<>mwQ0)($?>8*7$EM|b*;{C-&P@PogG{TtI=+y6GCB=~LhMg1(h%bXSft4{LHqiSmj0-1bW@pneJkdetZSi8RVq(=2Pc6h1?5z z))rD-PBEK|tWd%_G)MDF_fN205UtRoI=Q?#9pRa+@(XXK$+n4B;1 z?r`o;Lm)tgtva2F_>!{?Iy)tc^E6~~#PFR6M8 z>be%_f1|jb0t*@?a?!F3G1x>U)I~<4C{n9tay840pb-!*vYD8~*&{D?$- z!#~*K5P-1oLG7vQjmc~4v)^D z0zxoJbx!AGA(ik*Y?(#^D9uSmHSCTCR~ZEznp#8y(bTF-+;46W*Afy%EQ?y5G{JWS zkr4}jsOF&aMmb5M zGL9Cp)CU+@NxgNU#)=WPPB2_zm2v=p)toB{dgovmA*$9^z(J+7g1W4=;#n0z%x^Ov z41_i)rF#N4lVWIL7u62Ko9jM28&F8%ysHq;li9^FZG-$i_rtRS{rhq?D8$r@I zedE)S(RyiHD%F0_d$4Xio@{pS43?laeJF_v)uV3yN4|VGrUpW_YNo}S!r8rzmW{9NPt+3%V6AR-Kuk}bvh(Y+7XPrvKVsW}QFsonSM zqUa2NJ=7(48D_P={rFmce`^yR-xsE*zG>2aoUa^ zxR6F~rCk77-uI#2pih+KyC6i{MintOkRcw&g3GV|!t~D?V^$mq-0ixCJ@i^GtV+1A z8${o1)}acqBRJl+!;I!^n)_rG5H;gvh^H$o`!^15`f)H996Jm!zC8w}UEU=HF~@t8 z=4$7X=PV%_aqZFm2_4g%){4W484C{cFFeJ-;{>k{q%1|ft>-Bn zMb@sw7p+Wv>?FzW6$yT62DMI3@LZawN7ew0>x&UnB(3s;#C;7bQy6q4hD1r@s5q*@ZL*2viR zjY$YcsXz~U9k>ZK5;XlBQ+d@CTC#x)ga9YgKhS!~%!K9e42sqq6#5rEiNyU=NyCE6 zn8j+AOp?6@B|KQ(Nfy>ENu|i?;mTqCbU#Howz%z=I>)08UY}%8n%bv*ks2{2Kzc+e zARW&ESj)QA1F*irYM@V(!h;k+PoX$Mzt}R+@(?nCCGvXKy?Zeay^x&f z>vdj_E>hgS&T4>yc<^@%Y9|635{O}n2hgmT%0W5W%n;&p!W~6G-rU;lTt{|E|JXY= zU&nU)!Sv-;c@|N4{_Szrx!bMo2UDl}G_UeT?F&|VH_uaV|#ucb^BH{qBHoSH5itstyoH}urC%s4nz%@8Pp#C+&p-ITv5{vuh z+Ksk*wmntM?3WQcp+Jrt-oO8X9i6sPdtrEOB;_V+WHk=EA-gA0omWbuR%}SZ;FdYE z1{GmvTj{V9Z@j~JJA94QUoxVEn0z0u-a5~;_wh@mE2}}3nGO%)`{~{2{3oe&^+;db zJTzbVl$?>MhUtvdnn)L+>#P4z-1Adt)kL+$1+)gR2?L>8;8TuXrb0OGywU^JvcBR{ z@jiQ^IyfJcF;Gbb#6qbcyX)WwkHNSOwjR)fPAAO_+;)rvItspM$BM>AIEW)29*7O+A zVw4sIw>26iG4L$B(fnw;u6AaJa_iV?@G?1{RGHm6w>~ZD@|sW7tpxgm<17y*2u>c| zJALVFZuJ<5ByqfUW_1`zD~hb(M_72=X<&Equ#nG>6;+ERCOmSJ@5AkL>xFh4 zD!01%(&FeE2n40Ku9vHU8o=#jmxi(P#3L7FY*t>0+Sm1IQ8@NgkG+!A;>p!D_CEP2 zR?tXVFYOmZ2OY8SXd9chNqtGyPu_mSo`&o0vnnx`eM0t~8gUdmd2l7@Q0EcEX;+X_ z6+k*nHF5R59`z-i-TxMdx0bXGPxk#X^)H&cE76h}to=`Cr+es^lrt;-XFZ*rsY7ID z6$_kL=D3x4vzK{81^V@R>8-jIX)GEv)9-ZCf0RD{sgi%Y;vp@iVEqW->1rlfn@$!e z7faqx+sZd*0`oFL0p5VnAgwPG>Sh~D0GoAK85;FT*mOb&G*||Na1H>Ck-WFu+m)UX zuz-^2D$N)Ns(?;;So1S>*}QG5Bzs;hp;STC*VZ7`j*ls9VnC%52EeZugkIa1T-giE zz}fYHIW;)4zg3Tc@x){-lq`_v3`({}g)FuGv}?bF0}!|>N!@TW+|^s?5iRuQN`_P` z_CIZDV4XF1V)kW^rDx-}%BZI$;DVq!?ff0m<@rfDf+FFir0@IpS#`PW`46t4tSmzL z%e^vFf7p2hQ46rD?R0Z*A{Q??j--nlDng_I@k+2?UV1a+szy{D55$p*0P!U^g?;G8 zx{5>NBJMXHP4dqcQKi7%EVBO`>_>N!d-0XGaljHc?D6i6$-$^}zZ43Z zDt_~1St~g^r>&c!Z;QO>fk%A`_hS`SRvsEhXphzd(SzxUMRE1kleWf^LaeV0Rd}M} zLe++Qr9VL_Cjn<9)7`i>Vyb0I6W+B)gvK5-CGO##l6wOC8sA*!blJ^0&y4wvlatL{ zFXHcNI_B1zAgzWRcza`nJrS8FGlaQ0YK=PW^&XY*mocdUS23%!XoffzCGKnm3og_h zou)fD6YX>f95Lq&HBG%6MC3_;yWH-7;+NwO$d?SR0%}QcVxWNuXdqAIPeKa=hO3Pe z1o0sA8$u3@Wv+K5^?&#=)w%D?t~EsG`@v`5__jnObg@kWb}m+0Oesh_%$H9S@XCx5 zC+lI?0)*tNhM*}Zvm@K8j)GeF6Rv5SYqn!HZ&Q0h{esZj=rpAlQVVj+f3YA0^s64T zO9j|81Q_8EpdHLG2aG1hgrjwpQH&uq|y;8wwRg^OdFdnMsCl5A6f0P>F;!m94w6;(h{HcQK6TB@_{`0`#5)0(eI` z@B(@jIC1>xI8~_JU(LIJy`8Rqi&~RjI_8fdX zlQ2TH(=!T&9tL4=2yoaxAV>Bh!w5xt2xl)g3?x=0Tw2N1a?X@Nr!nqqxTvn}hG6)u zOCWFv{6L^n)s_0;>BKv!6zB8u1b!lL;*-+$2?X7t!y4eeWF9jP!z?18G8$QyE#{RhGjePu7NRTRh3uE+el$a ze3q4JQ#Q%H(w*NvzwLq%$UYcVvMS|(GdoF3uHd8^IDgaWnf9?zGA(?o*04@;`eoP7 zdm@<7ZW?^>ktbHzA#p)4s%`CO>JTtqfv`%sOBBf7OaETW$Vev;Rtn3j*sCy~(l&YE zGP^sp*4ylcn%*<2viVj?TsvToi7XFI`l~)0yV`7^E7478-8V`OQhvO1;H$SQu!Dn% zeYBBq*o+1i*h={IIV}(P&0metfON{9j$T?Y3R0{H7KI6T@V-K+BRQxB9;fMUz)yq= z9}3EE)J-Y#Y9^#S*@Ykam})Hgeg+`HuUi;NW<^Lm*oo*yje~mvr&UGm1UWv)3=)QP zuRlXNj3+X%k5du#EJ_Y&dg-*VA=jX4U?JTo;ei6WJ&p&B_hsbJu8I5AT|;+w6U!sx z`jjUDIO%<*;Pi)pCymWQP-alukm3}EG3mt5eS)?-em3O=Ve4U!YyPQMu+NG6m$-qc zehzplF>Lo8A-dsyn>9z$OA6L0P7SngExvbu>+1Lv8lL_sRc_dHKBVuPYl!wIpI}|s zx}_!`6P~|^c&&%Lo>u8Js($msnU5b9&V1P3dil=$_3^%+%Qg?R{&SJWfKUpzQ_CwO zzC%AxxjUux+30KeCZW*wENa*ybpdr`Iu4Lt`qsKa)Wf;hntv)Udk@5}4&M&m1#f&; zG@DcZDQs`E4QQ1oP%^cvONfnfY!Eh(VNRqo#kNbCX0fNB>(~Pt2#4cCmULtx8D>UO zjRMpIi~OlZD@c)YNYg9Wa0HQRMJoT|)Ke;j{dIm(o*idl-yi?{%{y;WeVzxIGFmtR zjFsPyv5pg^-JR{^;Oj>$uUpvalUb9(w`^1&3P_2R*x~HtqYzgI7EESt5REd=6Y@D3 z#8h2CQ*8bY?LPfDeaTl7Qu>n(u@A!3ZUplF(d7O{C-}+UpD=cR+_k;(wucl`(81#D zIEmruqGPk?Bt3N92S zHGbGhM>fEbE=8>NVA!}!^AeLX0$ja4R7W{-{)$55Va@ZUzsR%4;0j^kLuk&Ih!sP4 zy_p5#z;+tFdh)F7r}qH|0ikg^#p1mDbA@6RI_(vVIAB#SWn3WK7$d-{yDqLF8S`N> zOPu7CHw<9JPLz`jaN)L{{YGPZt;weQa1ISincc5ym}T+OCq$|0yo> z-+}}ah?z4PGXPQPoa>9XVD+?Ewi;zd=;q-rWKEl@PG~pYPvh;d`rFx~fc+OQ6wQTS z4hLs1=EH2dmAMX3HIEQ*=r4bVx$uMkBd>q1eSg!7n&WgHJIxO=*f%j9C+n!rJcp|RO@GGDZvdy~dCK4j$O%nsU&7c`6TmWLNQ3NF_<}jVlSGxH<-lrIKb+HW@rr7^c;LiOSlurI-xv>@4;UC}i!J_(&dunxrcl7JMp z5M`#a!+@5`3CBMVU43nzVxOA$XZN~!n^c8-PXjE{W-`_dKAo|9gL;4+615i$lf8zd)fZQ59D*rB1*zsH zUn5hw45O~}Qws@9`-%}s(OZv3k_$2rzKuvgd+?=8V2o_RkeWHD!7Lg&rB1A0R_0bTVwOg%0Wta>Gjc!sN`}1SA+x~dYRPCLzbF06d{~W8cI)#U9YWTF^ zBrn|V=F~hMPQa#nny+EZoBs7N^yU^X%3>kNWXB{6n~&xb722SG5y6X>dPRCPp1(WQ z`P73=@uL&5ItkZvGG9<4B}6M!C%v@<9K28hHWzI#{wLL~;M?~Q&jYa{BV+0Hr2~JF zsIwebrM}&h@AB>2>3bK#NcK)o&+AaT&RzULYQ2H96*sXGjgY0YN_(ZkIW6(D&AMa} zV03L>f&gghX4#kwqbxhSJAgJ~R;XT5qzu`;ogOpZo@S}V-S^}E@~{L+3QnLn!!m&-;! z;Nv`g;;&`%UWrpaE`GS1Mo25Yao2;i;@B0g_)NYwYyg6s1dNArE}`)#Ic_@b0~;$o z0Bw!>w#p$c&nq!BKz&piAEKoKp9@zX>0zRg(+01W?ugpIhd9x&P7z;#Js7Cf9sHe; zE8wKC7BD0F)I)%_!w@?bdw#KRV-fH}u0ST>9-urQd_@@5m>sh#Wkn(IZPe)JN1Nxi z2AsZo94V=~E_=mZYsA}g2q3lc?Pu4D6Ua-hmwSpiW6eF*KGuOyzZr4HG~O>0*9a^1 zqj%gugr6nxUInJE%x=d%2B$?)Ge9%uPO^%K%IBF~M_C?t8=;Y~Zp4WY=$C{oNn(u5 zFTn^Tt6%Rm)c^0}slXg#ls(*2qmyjjP5$7ied$da;sF6@=%!~OcevM@rmt~nz86pg z^?Bhvw*1NyxCfo4@b(1bS4HkXj|Xo*@~qF5+Xp~=?faD9xp&}ZrR@(;I|G46t!?s- z=kc4aj4 z)vd4MHy6Z!jITx+sy;d$bPg`x9`H(#+uYATHRgR-7_l|C*1^3vT^FP=6lm(=T6=5_fa0{u;R z4X$e$-iSP-`eUVS@RDU`s7J=~QCW7=(6M1gmMb@e>70_AQxQ68MZV)U#*(l&9b?{z>RFlV#c!R- z55wL_qCgPvx?$VzKVr@=?eog804zMR+p7+gsi>l)FXHnrb1u@Nu$iHe~o&# zD@bw%MM}dnYPrI(m2Rz z6Wuo3R#_53#kt9D&Lx+GNFh);+|^s1EY4PIL`V>WHgp{lf^)lB+GR2&04;N+#db@E zEa>Kk$Bja$w0*ao`mJ~wEkDaZJVzIBOU~yfVR~jFLxWn5JtM5!>38nl41y^io~65O z=2_y1-FUECy-_NE)f~51n5PdP6-H$fs*T$;JvfCmEBy|{fd;3W<};r(({KKzlm4TZ z0Z4ScoqGLd+xYdVh7r+~ABvN$-18r{GVffQ&%9yh5Inrm&Hm}LuJx-wx28mKlSsar5ySbX{#c*=%bm zP~vvc-8k_3uLGSTXDen!RBA;zt3_k*?L$-!R*2Dyt&089Pf3Ef_w@Zk&BwvxqjXbbdCWHUoP>P2>TSeQo{4suudY!C8J z*8WhM-_bObc95t5M;UF*^xd51Q-XkyaX4Yg$%6D^izK<# zH!aCQ@93v?GplUwQ03!oO{CTl_M**kaPW?sSf%2Wr7e>E{eZTukI(~0DTH-mB4iO; z!OB%Tyyaq)Oiy+D&gQN`e%z75IE5FQ>&~%P>13FkajTZ7)v|9UUz@i6p1tmVo@bc} z7h`n4dm-C)flooY;wv$h$+;$lfe`d3FHt1Hk&vIe*~|`*V~R>BaRl=e_cfgnG+;@F z-v1bnmb%?(R6Jk|ChI>Sp;{b|waWu@i?ddbwF-{0jvds?+5G;1&Vj5F=8QegO2ial zt-6j;86}K&+7elxL8tLLBB)}Js;;wAIk}Bf9n7)zkg%fGs+8%faw7IczD!ca%FIWiYzL zefWeb%h8>-E7R2=x_@Bbo$!~(ZePr^%%==e%mYbZtSzzEv2Vu9iji6@_B-UPgAupk z3rKa7{HbQ@zHE-m{iHbCPN(GIQg1TdKdH#wn7@4Tl)s{HBNFzGJ~MiP6rddCU9R+z zmW#WG15!yGJEjKit{O%0b2y=EKsahyi6JY6UgP9_C$8jGe$hU|7U7rtrWh2RY zk*vpWVQOHQu-k)`L3A>HBVOJy|Cd1)AdKYXK&Xt?WE9CZ?hse`5V^YNM)FdlC>(0a zzrTCzxh0LBtD5rokN>Y{TTFFd5k}7{7fiM{tzu9hC?@THFpk{5L?Ny2g2gkbGuMbJ zQi%ISE6Y?r6}D(nu93d+35j#4;XE28ZKq;Qh@{X|3-$VPK! zLwO0eDpmWejN*g9q^p?PO*gbe!;%7VQ}PTTnHww!wFzqZ3Th?r{vB@`v9{nTVN#`_ z!XQ$rR?w56-B@(v?kVr``K$eVPrXH$zq&gWpZ!#{3LR^6j8hc@FLf`ApJWw$qf1vh zk-n}mE?%kJ-aDDdy*tRo{;IeqGn;c_USMxX+gj)UZjs^I{VWCRFIdG&JAGlQh;A3$(9CFQ%Ch4V&&iKhp_36Z zpmqLqU8)4X!d8tgt>4)Wnfi6p5oOp*2))@XXBmF>-rVZRaS~(?31y=MKWeWZbv{3x zKaHgEeNrW^vNcRB_E-u)xA)Id9#5)rXcmEvl`{{_mYdVxnqNVY$brLbX;J~f<2`03 zyQeg#8xy(D2vppdLWp|u5&lAg43;oYm2nJhqM87jX2eUPuX@t5vnUFHCa2zuUe^f( z0&N?WKrv;APuI+aC#8!}jF% zkMgJ?t(QZVHqM@H>RH2MmOW&Qjx3H}824Eel^OZt$gTXbE$d$*ChWEPBHq1_KA&!h8e_4I@M48@s;wT-y*iC*SYEhcPKrIme0okGv- z+KTLlQ@{BKn4QChtZ4>B{@ydbR{rOosXlt;0MUi~*V-QQf2<6&T>muew?3>qKiXGz zKdHZ>=c+E_X42GLjga?Tl6MLn@;bTs(e?tb8G4qWMZx!%9Ydp(gz0h6?69v*v)k(_ z15ge$Zz*9F&ToB!u&)^|P;RuL8;C70Lk|#! zwm4E8t0n|B)l(x#S2UJFd5`^tb4E^E2p!}BuJ3G}C~Zw2Ul&iL3y1C%246EJkxm@l z+vGaSAbt1Xq$G`}$G4}Zfr|T`g-(V~d>} zO)8@|1V;pG**kXX5@$K_FtQqX=#*~DgSVYDQos|Z`E#+}Qh$Z|h0XT_#RF!34^=0$ zfT$~t;FzE-iDMD1rWY3(^#7-m=mj;~E9%LcdoLZocmKuiM7Ou4+gkPtvNK}|&B~t6 z%Y}`I@0dQH&{jwSebQM#Dg*maZlJs~$s6D}6@)j__5C7(V z^nZW?PpS%eO_)cULrbgqvs?dq?pV4|C`Y6b=w02`F!y`0KI}G6?60o$mhZmRxW9YM zvuEEL#e+6hf|T7GCU@?>=*mpURI!qAN{m@Lq&OQ5Aw1DO#*0ICcv#6w>4UOEGa*+N zOcw1;Ye%Y*Q|$xHA%DM{_f_bNXc)S9wBlSYrVQ3T7KBI0pi}#Ep%netaigslx;Y-4 z84mZ7_7whP4v_`-J$ z@~vZz4|9)o0DqpVEzK30<%^Ugk~PmEi~vi*x?fvs7`zh^Qo~fWS=vZOtT$N|rE(Cd zgkFBwGq+9yXTvQD|dX-4es(mFaW=TayZ{Eg`Tlik*&RP$9(>%Dpbv zKpDiTlGT=GQ&Wdlku59~^yZv2z3MDs0T?Pk?NX+ z{KT(-Geq+G#g$VVWl0fFp89R?A?TLMJ36Oo)lPcpK<(V!88n^#lvh3jm2(vGL={dg z_M|%D=XjENGJd8RT+yGLSQ^9~M6)ycdZ!WTz+0TRP%~KMzvo~YIr0Jrc$tt92QJEI zJdLsdpWHGB97}`Lo?tcb{oFp?9Tz%x)7tF@9aQr_9Dlw5wNA@~2@3MC=iRqOuMv(tpTs%I4*0rS*!(SQq z&xR}S6$2=q+-cq8FJl0Y0H=o&H$I(rpHvrz2jc`bOaI^`R{s=&Q^Tg+l%xSB@RtF# zQk%5YJ|xk{$=uf5Boxlo7q%td7i_TEY2xCW$&C>cSa|Cy)x4I{68D<52IVK&i5lDl0;RfGZRi5b;1VV&25Ln>!cLscW8ip5yy{g3L z{haOzMhIb|hX*O_rROBB4Y;IJ-wuBDE-)=U`jy^3^vlTAc$oK+9eRd6kq|=ENld#69E;9k%frchR7>S?k#{6 zK9Gk}qV@;Y(S+T54_Xw4?+{mGljtccvVvmaudRHzN4~ z46L&9{xGcb=1vA`3R}ZI4$^PO9Bm<|{=(F=G=o4Wz2H z7h{M2#i+*2$Sz&d>oij&3xJrLIWxZ3D#^Ane^?&Nq?yYGSXoT~WV5L8JU)hkCTo>| z3L2%itk_DN>D@OfR*M)v7z91ROhmqz7LVv(Y@&{v=w_Z1<63s!{rn;PqAB4G(ih~| z>NE%Hu+IInS+i#IMfSq1C9)OvM-n=CmhIF--f#k*ziAK0B$v4H1*v4b$PF?Qd55-R zcREXpCEZ-^Pd(U@!xFIP3(-fPZa3^JGTW`w_xnd_KvpwiDc+I%SoY?RJHnr~ync&!)pabt?CI+pV zDFZ|*H-svcR^})L^U~G?I#OY4Ua^FLGSv(OB)Lize`uvji|Zq;TEp%_lvcw`ZnYZY z3*+?}v4ay;uahlnzgox(LQu913XiOTGwa;RrBo$nh^#tUS09t_sw^;`^tJS@rF<$$ zb6a(y$OviIB3VryfqQFjfzb*0>oU-)5y9hC@NMu0Q zUf2A+=DMHGJGn_K!JEVg!O$g{?SfnI2%5~7dE;0~CUHw6=`hlo-^%9YG+@zAT%aIP z%4Asq;FAPKh(>Y7;cFJ@ilzHO0xj||nAvse?LlcEI z2X$<+TvU(*fanZF<1jg@IdW2Go)7_*#@VwM#R2g-@lHYL4H&f$I<44`&SssS_!{+B zfEag%VkVj6m%%s!LJ)tgfICO4)1CL9YR5r$7w+h;yRE3dgi2;ccfs5a0>c{#E}zIM`8$>xRTyeOhl6qZ8Taj3S0mvw<*$j1-y?7MC|?511v zgZmJ1$&>f=5@Up1JVOv=D+0h{i_L`$jS^!M2tIWf0B(9z(W+-oj%8jGRuekMw}r$E z2AaH+lTMonSG6?cc5}REsKY%7BM?FW9xMr3!hC(%^~1Q4Y}nQwnw&O8CzpY zIqZF!Iudp{XDTb30U7P$vH-}c90`(1q>-Y<{h#?l$t)Q3M5MM0MZxn1csY~t!+TwC zUp<_rP!bTk`z`kgB@T{}!)={$4Zot$sK*_SRT2v|LV>ZOwSs$>OeNf?qQ=_-1r#bk zccH6X5qYxCR2vukB%rlX*K`1bm~XUkc43@cuHdM=is02|0GD1N{%Ryn&Et)+l2U7^ zf?RToxr)vL;3cbpVO&70MC|a}gPjw}Mm%4;f8`GIIc;!Z*xC+JqH)CDI(kHpyy8^J z^JYMqe_w#MI}%vL%qy!{yFnHKy@7Y>mW`CYbRY3aH1E5oEEhwq4J|*1$9H}H!7A^c z+dsjFE0dji57QMe`8~WlSvfMAlU*nj{aM1qufBukiGP*kSAuLDX&eACK+eBE{pjd) z@vLA}UsjXSDKfn~5Q8&k|5zUHxTYZL%}CRo4c3{xov=CcDBje%@ccos_nUw5kWlc= z8?xpXb5SA>Ri9PU*~Wc;y7xaxHKz5}FK0mBNXqRyt-$HDdn*5}5;=6>2I?p(?H7wj zFriE&WLZK1;UG8VJS;S&PGOir3jNRu!;ORnXoSX8uV@fNKPYQJB}~3*AifW@l+T<2 z$Ik&YwrvZ5nR%cjuw%#mPUN;xs)0uo3E^D>M+5H#)FX3N|Jm%SBcRd?|Lc)QARTOs zD_5c5I*eTa>s0q)ZTk(o&^wNoQMQC{z2@DwV_Sa;U<Rrx{rY}YDxs$i1aibZonh?VmB14I{DuB^5b}yaj|?k2M|T^odt((_1WO*JJtjoUNI3FW9JMmLiBIACw^rm1(|eRK<9w z{MF8+VdHDc+%VW4xJcK-uQ9(@9+l=aaB9o=$p5PGVw9UMx?wH&M!3AC5{B;=UvLoc zvRT=@t#U*>^oRqbMR~y7-9r)GQA9UaNsYb~Y2irZ$` zoEk>pPp94RMPpEHo+t$PdoV0xwS@72=9l{06AQTsJzhQ6yo3oX5&0uOW}Ovv zo|Sd8^Q4#FX)QzzY86Z{k^&vbKasMv&=FIz5O>;W>7`X6q_?h`^RLGHcAnWTwHEv3 zZdlutxuSI)R_v&Gp0}i~HBHsuL|R!Y`)-48v{Gd`LsHv|(*eqAzSkCiyM4bnIU2g3 zLwMz?sqtT^5WkA<&;KV}^x7z#&paMpgQ02Qz`xs=f5u3n`AZhVwqe0+z!N8};=>oG z#FWM2Z8>c?L@H<$Xslq>Y|`78RU~WL6P3Br+C;o2WKFN$nvW#J;c%2e={3V!aI4(O zRtufw)M}(}RI+)wKy>Aygqg*u-mo6kWpp~Mm`pC<;Mk!{uHQk66#sj3{+n+(2WH6k zSW7A)KDdhutzQu~bndJSrbZ_uv9sP8)`_8R^=#K)ew|bUqqj0Qj8A!IQm6!5ifC-x z2y3wYB{(sNtGIm}Pi{@q5X|StgI+mHeXwwZrQaJ_9V7c0pMO;a!=J}~4!$)1t5k3? z2))6E>@H6lLEGENyUBR}#j*W2^C%TUhz%@q)MIL7d;NA?lw9J~Z-wgM-i2ly1db9R zev55g705KF-|9yaKY#o7`_0{1|=}~z)>#BnA>nk+Y^09HL_K& z$XVZlX&Y<5DM4MVEXsJ$I(j*R^R@{F1pz>b^zv8wCqy4yPVzU}PR>Mueuxwy`H+FNvVE0Y`akL>14LrF(E zFxX4mEBARYSY)fr;a^1(LbV6DsxuSHz7ZjCG~ZPL3HQsIez06>tI2X;XI-qz@v0m8 z4a}$7&ovbakQJ4mTjb5Y2Do%4&4} zd&YXX+~Lln$F8dRqX*CGtyd%o8Sgf#XSg|cQVOiCnxEUia#fFmTqd30-2NOf0~Y`LA(NkZCjFKs zy(i=T(XF2`-Zsodf@=CT|e#aA?!Wi zkB<_THdgS3;gt<7K5R?e{ObD6RxPHSrM>L_OY00Dc{R^XI^<#0HG5|tn$peOId#NO z06U6}y0>PGQj)=RNd;MrbnjYka_~IfDBwngLKs%X%lkO#ra6GyMcS+ZZLc(UMUudx z!*dnCrfGPsg?A>@`FE;bMlQbthJa6MdQTGPQ;qzA!kVW4&w=xZi1eO)jy3Jz*P&iE z+6)HLhZ$B^ru)%xL}YE1#FZDkjeVOa@L;!s8aBih(TlX`k( zh>Tz5fLw-KONhu?p>wNlzqpLemrp#G!TtN1+o@Hht|Sd1j!d+rN+yg}aPu4czz$nG z9V6s1J|^~!G2(I4`&!hX>ly7WcRB9P8?HX5tHsf&0wtxU{sA_nPU>_^;Isal$HdLS z+j_`5LFl36J`YZ7)%t@ZILvwEAwq-|jK#@E%HnA1@``^K?@o=X1lUFJZl@APL#3EOe<%xq648G{EaBzO`V9vWtdHJ{abx_p0@ap7Ko zwX>{n1Qjm90!S3;8@^T^Se79)wf~x?lFk*>lZjM@xbb%6pv&~+$D21Sjz$b|hRtk} zdiCt(L&$}qFbV!v?toaS+-&)(AZw2zp=B*eK_*Yr=#Au)=B^2lJdJtIc)lO5gxPvvuWCbBCQKv z8OF)ShZ|mpptaF>V@2g7K#-=?nr9LdiBf#X0S<0QC4j1cWXK1Up;Dk!5Q&yn%r^&$ z#12w4+zw;otVtyf2VR(AJ#CyDB36N+Gz5QC11^%LKa46yB^*urj{&=PGq?XZWOAT! z?klB3uWy=#5TVOaAC@d+v$8a$jO*u(s>C#jaXLbv-i(%Z7K>s#m#3J{b`u)DQy)1~ zU7^-xL!CQPuW-Xo7q<59_D2Y*JYt9l)3w8p`y0-v^0kh1#=rqbf}y7+iA!T9)|NW+ID z@IIP9NeZbPNgG9yLIah2F3XHeiRIw-YB6i_j8))S++Qx4DQczj)U>IF=*1Ktw7bEJ z;6mSpV^_$jGand7(57wY&mPTOI&m>`1zsNfVC*t~|J()ZC?4L%NQ%$`*g`;Q{Rh;l z#d?*pndEWfWo~iiHbYZcmXF`OrKgBR_To$^A3zkBV6*S`KM_V(OB%nPst6?X%yvPZ z;{pg_e@4Ku>v0L5=Zc=UY-gnaUiVc9V=-clG%{jeiENaYr%TP6$}e#?^;-#-46xfB znTRc`#_B$Mz_W&x+(xxt$Q4Yr>Z33q;p)C;en(g&{~CdV#u?Uiu0g$>%Q#!sDmbwyN7j)oIZGvrlw#?W zkj$Rfgt6FYPXnpKx`7cz!UEb_PdWC?8Z4y9kS+;CR7Jqsjki<6hr9zmotK#FnUz*v zj@>}4ob}8bT1O|ajx}-jn_UY(yqO+DbFk8m<0Cd*S8PUc>?U<3e<$padwcJj-{4AZ zA~KpWSgZ7{aGt=FCz>6Q|7D1r!Vzw6P+(@xlZ5g&Y6M;rCy}=DdKTBY9*Cww{pp$m zEBH0y7zC|2Vm|eXm>kUEYwsL{tuPM)z@P^vUR%QB9v$VEwjayj2?vLRL9|qI@_Q(6 zNw-!Fhvz@Z_CweSKt`MZ)!z7xZ2^4zV5c!;T>(!W7*oY>H#^uw5MLkV2c~+p*Sbrc zLh=^r4i>witcvGx2l<`T%+`+PhcB03Pn(@I&H!CGh5X6vR7^A*$$tL@;(7f96SlC4 z#j^=wKvv7Uk#|4BoY>$c#w&L{)cn0+{d)^3^YuUSWgG{BE|7MiKf%0h%+Bb^h***; zO>)yTbLNGUrfDg$tUPNt6I+?8+{;d)i7LAbB4{F8o&xRb73;bBe41Z- zjP<^NSkGZu`#R{MZP=|tQ8>i8IJ_wO^h02hbAA8I0|P;quK|47yp%CwiONKpBL6Vc ziH#)*LIxVCgb3omfDrc+Ob$s#OFC8o(-tt@ZawlyK}+4H$6RyTIoaN)ArQVB(niqeg0v^V6ysVNc$wM+Tz_bM@M65pAu3@gbjkQAkN&NX71xt zrwRqj!izu!{W@mojRKW0!u{#`yX6rn5}XH$&L-hjc*n7@Qc#H|lUgfu8q^RllG8+b z>m0L^dAoKZPA6)*PRfXAqif2{JUvrmF|u}{9rQlA0}oIMsUw4cjC5G_Z(7j(6ix-> zd9EOBV3;WQm&=dAP_rKCmOHtrAoCOP;1KB05a>0NyTfyK1K$bfh$``#|ni z=n(E-z-=u$6^aV=ewak#%8(U;+>dE}F9&_{STw|Fu;c+Nl-D zueV%PRvMqK}=nvRp@EyRktov>9HP`5#%(XYghT7`P zPSJS9h;9(3JEd^D?|C{t3w~n@{9rd}H{ zx~-v90hhsx3tZ)F*RWx2`#PtUo^o8kfn1aR6x zCYb`S*6ZXU7f?vrKgU2Lqo{TJoGT z(GpoVpsdAa2^ocEv5y<+N-DE)prPO}M%QtZBsq?2TR=J_o$7!oy1bWR#_R>05Isg`;X|Fai6fWh9_E4L(-l2hJ#$K~Xum0nQWRaJchP=P!U z$uG4N%T#YijugN~Dr=eNJNG2Yxxmy5qD%{2jg49pr#W4+CJ9hH$Bmr^xqR_jtx_tZ zFhYag-Y8PAAVfMfF{U9zP+JD+x}UqJz{prn{~om4(cYGBZl>HYA}_#IZ28)6v1ZdY zWo0WO8j)X98;f)9^^{6W7Gb6af(^T+$(q}w9{C_j4_!P&`Q~+ z)B;P`1=%A>BRcihQ#y)C0B>Y7SrxXe5^D~IH^k|nIogGFa-;MwF#*&)@dPMy)_aY3 zVHMPPeQxs=J*)NdyuiojclPt@+(_I{!=)`!xbb45@5Rxj-lCXlK0NEW9#2>7)=Hkw z!`72o9$sLTtDPW6!4s%&6^U5xydX0lkj0sAjq^w4II)D4L8&{XsUigtw11{csW}P= zm^*ExBQfCY)LYuG*qST!6L>vofp!{M8b4h;nPr*q$b!xa;>l{g^bS|%73-4zS0BqKNK3F?=zS@2D!CZ+qa zzQGvu-c(ug%gol97v*)lbTj zg)t{}}!DW2Y7V8SAYcR$O1eVtBI{cJSWP$&D(x$}2|p%9E!l=u^y0 zv=XZf5|8%Dh-%@_RE5iGy){3pqnTDu`;t-v1hS|Og2Y-@DkkZnUP#a445=<)B>pq_ zOxu6Ff!7@zYEVdMKyRL!JmbJ4!^teq^O){o2_C!=_S(G<+t0DI_!5`@EgZ7%ObsY& z>HcgG3f3r%1qRhX0NN21?-x&+mhO$mmSM1ho>UbKHc0W2K#n|^B<=HpL4n4B!`E^k zX+iPG_q6OXA3q{Ug3Ag=%2$ep#3)0X)!Lp&|4jzDp72Y=5HM1@3BeR_I9eY(mQ(SEovVF+mSs*uxBU3Q zTG#Sgz3ve{?;V-Yl(W8Bp=@F|j}Yl2!F)!MgT7S9atK%ts{f5gT7SwJgU1RsRX&?O zqhR|Oc1b5i^I>m{(@Au`Qv@9}n)h`lY_IL%g{EL$1%UZu#Z&13Zl%i&d0$sU+sN#~l3td<{B=cb0Ae1NZs{2H|Y%<7W^E?-<%t~~c z6zSe*a^0MVaX7gJO4);8Wk}Pl4L$3esL5Kbzt~2QsTGg54`RtLl~usP#>!tAgJt-u z0&Xa7c;grx*q&~=#zh?D0d`Fs2Xpp| z=g+QvcelZKyP3GKcgcJ_V?!464ver9e0i8*^S6_Cc(5?E8eicVO|uyKf^!R-LKu5U zp<)|drbm5Jou(C0Z2s*0PAVFrceL?h$Y|%YXXMAb~0vq`UBQGY^y~N zq?gPnevILX_VGxYZPU&|Z7<)F*)$=9I$hgFEVJ41+NB6(c&?6WI3YH7@2t-2)}z7k zgZ*vxs;lJo9&PVTr`jLZ0#yF{gKrMC-+8b#fdL+G-`;#qZr!^)cIE26qFy;y{6?I3i4rAPOycj2&;YuOxMA)Sf!ft)?frv zhxT#czQoN8BU`{#2_W*TInY+z=lGhF%VO3 zHxi1(iHrfRX*_~mLF#8HriU*T&SB2`rH&;oDVFSgf1nC=K?D$(BTn#bqUKJ~k(Df- zd?gt~v%6Qk|M=6L5Asrbf4*fYT{%2j*H~0jbY;DzdAHC$E{#x@4gd>6s_^IPk<@4B zTgD>WC?YcMfwGe%bp$~9PViikwa~l8W#Ad7hXSWrUKyq3b7krvbFEbgK}-^@F#I(t zTK`VK#`Me;(n8zZtnH=_)!fp{v_3r7E!}tK*_`JYsi0bT+fH$9l9)nuZr2tF99;n< z&gEZRIF%JpA{fs&>lhM*ke46!UrmX-21_-l9D2s$`LYOzZO0-{9rjt9N*5G85NvH(U}|@d@As_#nIV-jSsj~GE{O?ln#DW!^Gv3IOcia(HvW6 zeJ+UHJcaL6m?Xo&R*UiP%5ynl$-t|>Ml*0uG0G{JQURuf|080w1s+gg%jR)qu!?gx zwx^X9lO21CVFPHNAt;ss`wUay9DqfGW+n#I+mj`hL8wp_sbz?0Gc*VftB|ycoDEPC z1>u8(GKfr*#N!Gy#E2q7)f`~h3}YLTYwX`KD!3^2-{MU2%r)M3W*KuS6kc&|*XI)7 zf~tqe)=u-JxJav3dzo{VdzC}y%#;r&2IHf-)E!+<^vJ`hg`vbmEVa!UW>N)F&6O6j zNqYU<6L*6Yc_6TYjeGpq(i&b|eqX8>ZlC#=Q?F(%LkIA@4b>`-lmTTKg$TFupRTvGiOU z;LYX->@u6m5Jo_*3h69sbkt(d94R`jQ!B%>Tv9$`j2J;Jp6Zje(UU=K>L<=_hkAo@ zafYXu;fk@_PxpwlDTDNCl>(uh z%lH+Cy$G2v z@){_cz98K>x=9F_1&Rhlb?&0$wd*dwo-{uoB<4C7%c=|WkV%igNT{2%`sMHrdrr0K zr&B#lFaijx9rr*kc^`;-YWeBsZ`}BSN@=0{$*+j>o%u&1(P*de zJN@+hv8#649Z&a_tlOAGS|(K;h<8!td)?^d0q0DBp~hq;n-6%4 zKv~J!cUn-5m<=GX;51_zyUc6e&9ZVxtYsAIwZWqO=_3dhm-cbm*8waLp(QTS%ur&^ zgo5WGaN+}ve*LfJ6!%RNW8jWHUVw%}f~ggj)8)$hyU?S1gG=3by%iB)oLyxEpoJQ6?1y`AemC*O{A0^~3=mm$ z<2&Y?bpf}g3f<^l{6^;XJ$tK85IvN@0 zU8DGw%{`^ZPrVYX?k4*i`URpgN-CSJ5#gUdt2j4%w7p#v&c%)iZ|t}8Dh5=wWafuK z_JVfFRDjI>pKrkw@yQdE8CijN7Q7RModVMK5P@;bJ_`9LN39e{+ZRVJ`PB{+e> zN^uQJ0<&(Z|HtHmw_?isU%}vCe!ur6@oFIxnK4pAaC~rx1{qLPJkA=03(ph;r};KL zGcAbfQh%C@RG87a_-ZoHkpZQj8uw4SAVs^K^5t;`2ahui+bigFazBIB#i0v5lEi># zds(Y)J7xE6+o9{ZH66*fsde02+4vaLgA{qnD9DImGgV24N1W_o^y57PzfRnjE$O4v z;MhQw!%rTk|Jr&pDCBF}N15*6!)WIxza&LRy04Usjd`XjHoCL317J0r5#iir+jf{B zLXqT7Fch48{-V@yyrS7{)HKUkhw7Vb_`I}bF{+BzAUIcm?ti~yicjgeqenL>S%mNTyzGA#^u zsqY#?ZnjF9yF^n*b`r^x+to=whnDA%&aly9Gku`Qr72{zLd;=OV1$v(4Ba55ocpNi zm9%P*s$k(x00$_|l=B{}Cax+7WdAVmwnI@eeL>)u&j~k5_ZMA{T>&%HDYY0%g5o}+ z*xkv0w}MFOQ(l=SCVBh%V|$-qRnE@jyfXYez!ubV1)s`v3ujlSwQipRP3Vq^T}j;#nfOzNUaZsUAzdWEXt^&+ zKh9bRprMYSK8RO{-GhjNAR){TJQye;B2#__WWjZkB$?NuKQVg1R5g_lu4}CeDc8cz zf#C4bM?c5W+@~lvAZ;(?D%|8lfe>TUCBmzD7OS+I8ScW59EOj#nw$g$5phLbF0sF< zC6MwKT87xOY)O{oq{f6>k%-zhBl?kmpwvl^uT)9nl(sNnk!m9d7yvpy65TCkU0yyH zR%IriXXaF#MQs}?&WuCICGG=}w5+9YN56y4Z#h1->89AzY&Kuk<-cXDQwYJ zFf)neJr<#)540Vc1|fRF?V14h9NPy9Sd1HcJzf|rGE~IE6sP zAq9d6K=VG9dmK_#YJgxWKQ#s^06dqx-zxzV=oJ}=>!+P;EwDUe9Se1)U^mj&Mvx-c zuN{H51F^PMsE{P@D%#~l1kgoOm;*9E?os9(ZtU2!Mi_~Zo=Xym+;gqb5Fr&7m#inLAJg-gglx zL)^~8stRG#udEd+2#UjGM+YYua0b8!LL}0?nkm!FPA*jnKQFLGHWk7WaiOf0a3ub} zBLe?MhpHrw)%AE_eq=p)FM$-W3^q*#M;ovrmi^2&JHIB-@ zl6L1fMhrQ2hj2VWu9uaA>=SX11X}yjH=^NCr%>JMicnIr8zD2-7mOTQ5UGu61an4 zQIdi@Z~j+9rtma zrPiT^l%cz+{_CMK{955>2fM^2DpD2z--RyM3jQcIF*HVeI!i3${x3_Y#{gHHFUCAF>>yZ;@qWrW}68{e^w(wQJd{l!%unK<_3)ylhOEm6-qFFZd!1L_xR` ztrw26t78rXiRGAJ0>}~FfwVP5OsVC&(T?SF)|y`NbpJ{jx;4uTs1VA~WvK#po!uZ8 zw`S&M&VX1sGZSa(*MhVKVlXLOMx3Kp#@9{F3M~*9JMGn&8165`sK&$gwJ5)^% zdZI(0nS(GVCY6J3;;y7dnqqE6@zPbO)ZpI1=9}!CnJn9;gB+0Xfdq>W8O$?clFK?2 zMyizU@^S%|VHA8^Ps;!-SEXrc({X5N)**s5f!d4aC+{vsyF(|dP`}j&LlThoO9ZEo ziVbk$gcPAwlh&F_@EI!Y7#3C19@?2hEYGryCgw=8S2Y43<|I^NCbHq_gLE@dCZ=-Gn|#l{`UfuxhEPpb2Gb< z^yCR+n0SPdG%1dsQpJwaKI`ONEhkAV`L)gD3%x+RI24iK6bdZHF82hZKYQ%v&?{^| zsTgs2+%0-mHJa!CpZu{>K%whL=Pfr2YUqm_T_K&fY>X(yUwwy(bW;yI>JiNz6* zQvHcehBj!s&_Y}3W*2`*Nq#t$Wtf{89=rBRR0!!+i>z&-oeJmKRjhj09~#pM zIYJ=iVQ8yF8&WH3O@^dbpTi%QuXppo-*aeEfJA;(>Zy}jry9~nQh6&`Hu!w-_TZhw z13`xdb_E8sj$s6K&Wa;TvuJ}NKkz1mn|xP}^zkYq+YlFV0 z;47BC2OWRCy5A=jeVKS9Jb&@FYVP(ixi2%R=UyXaiC-?DtfrDN(zkyr!Nz?(L7AVG z)G;-`D#)L%?|;?dliz)nQ9lC=2a$Y=3eE7^J9?$>?1O+alz&ZSV=R4Zpjuj!oHo~Yt@3PBh6(i1nF`9V9L<*&^{RCQ4Y6t)1%$WO zS1i#=q`DW&3!Nlp2voe>+G>J623(zX&!s?5Ve_ZH-0FVkHp2RA>XP~LjkWQI2|F}r+)va2NyP@Bg@ZptIfR|P|0cQFQXDRE31idd!^T0K~Sh1I-%j> z6aq66`*DDv3FsqneegVi7q@K8HZw$ug{^>>INL<<+v&#Tp{;}M)5G0B@3P$NRqFy- zh1v0v*-p=be2J^`ut3;s!duB610u4HX)YL}l8Lo<>%eYq8WCp$)_3TE?n5Kb`0R0|!K6@>hSz6-6KTyKoDS~Gk#zf5e_Kvby;Ahf z@?8SNUPoHI)h`!YN#}5Ie>BU?kKXatlM5H}JN!MneSd$D<$!;~z$i-K9;=lqX`D3e zs{i$3dxH+vBSmH8N%WU)PCva9eBtz;P?e8=o+32p2DUhSzcly{wZa5 z5J=jynM%?d?`1x!C$zNA-)Ux8s+XW^3AaX@lU2SoJm=JpI}?$qMUFjibi1Q)<41S+ z$ydqwpQ$$Xw$5u~kkwp#j|ji|fpD-T_m&Tp;$8|N|f-Ma-*lyW>n zwFN4XWvz9aSan33nVl?H!tfhw&UITU&ugOIw03-pg7kl8%=&Q32=Uo|rL#!#ig|15N zZa^+{5WCBbNzf9AK0N9)uV+8!b>VJP&=g=h;%bXQ3983usLYTWuT`p%c_!;x&ox#` z%z^3N36(IEWPH!fSdvkN9p2YS_d6j_Y--JDb3G9@^#;*)u(|?{JxsNVC-}Xt=H7Aa zDq)qW@a*cb{I% z?hQ??{2ocCr2CH0Fur!`5t$=cnxrALGRLSPFma52;`lIOomOJAft?IG({qyI4Wvl4 znrGI31C&1gG3=6*jBwTtMMP+bGvxB`(FaNE1PrdYZAB)RQ<&aH5)w@LIC&D~iD59l zYXpe(9uGpE0YoANL@f7Dk6Qm>ygHAV0-9oF`5Y0Dd^~5WVd19x$YX+ezX=pYSYSap z19X+)`?+Hjp*3e2|L!?T$r7@oq|kCI=6_)+PSQ52CG{ex*SdKmJW6^u=s;f4k5G)Y z4{Ql*maU!`IAlXEv)48e79PN^fIrDqTx!h;nmTJIiozjMPPjMB$t#;laTU+?}J!BCa9(qPc8qVnqchDM|^wVgUuc&lEl(-6zoZSvv5o@B`B(hHoh z`dv#9S06Efj=zjmG8PuNjop_9=E?TH(bx&UC?9 zhP6I={=cq6dt0eJWs&PKspUD`pKpTujOB(V+kQJsE;(Hsu;4PZkS4tZ>EX`EJ8>6Xq_%DVkwxx~h`MOnNDWF>p4*#KH-K{Q~hgR*xGe z&rc9z_%c$q*nfKnViWPJw+eLdRt4#JM=P4Ba_O7=80^vcy0P}3NgHfX89B>jh8zkr z@+}ceKv||qDk)&cp?Ud%?g4 z_K^_0wwlSLiR{2|o6s~)n9rZU)qlqBVg@kTzD>toxh0#Cygb)JQr;}*)^>OX*@XC7 zN!CMTv)BTI0ShherzXcrCMY0q1oZbP)d3cfArO}ymm$zVPfM}=ivd*I9xJtXZpN3a z!Q{yqdmXJ6xqHnBgy?mlFM_lvDqYT8gkjC%52 zAH|lNuuC1<&Ef@EDVUSSli$!w{a|-_=ntJ_%@F1!qxDYO$scz6S zupL_%%ulQ0_;6$$425^h{o|E(hrZ_6@>ESxYPSv{jo0!FkXDMf#>L+5ZnK&t=G1D4 z&?dP@m8!A#I*~SV`$>qhW^YKcf6kSz4?mpM>e_|O=W}U|sEO&@PVsvAYuJ~=teU@vUN1OLF(K$X)A2}XhAEA3klgiCh$ zxTwUTyZFMX6Gi^vQQ-^vEPiet;Z=9JeT+C3WHwNs2fe+orPrM^Y)_ zAG;RV%eotN9y;~fKKuMeNUr#8sgAmyNeYHc_J}+LYC7op^C^$kUA!bhuRo)iR z_dYyybI|AXzVD59%)Ero=Z8j11-F^PZsU37kon*K49`3pE3ELUi+^x<11m3&Acn-e z=2%X4r?YJ4439LbZ0EL;^-(2K2+^4-G_95Pv$SW ze^i<=G}Ug5OGynA?n^H~!XyOMD`Xxa2Cer3PpLVCNzYJocV^(|QQzaFeLMt3C{QT` zsycI2d;~9LazYdhaJc3m4)x8M@@M8RnsUCx>K>Y6GsdQ*gbDU$6rf-pO7P!})Z?t0 z)NKUbOUL8<+_2x(ZPYP}@MzfXpyPK5Ij6SFVXLWGo{Y9wqx!zLq~^Oc${L~8B*#{p zt5NZQ`g8va1c0J!kL)|FU!K2Mq~7m^uV+tnW)D&s6XL1Ta`|w!M}`~Je_tXyQ8q^k z_V>BSX#})hAT`JX;6tRHqjP=~)CvUT?1|^v_O+Wl5S5nCK5r@JU}k<0)5!~L z;hEbQ77}*>EN_?1SfcI!*HZ9VZ}5Fvvg5P$KFIVc9#r8)T(-v-JQ^8M^Dyy9B0a~^ z+TbzOgO(Rh_GGS3px8moFHE302XkQTty7V`0Fn*`C=pu>KvePMnCd5h*gu zc#l{`8p~m$6n6g|Z78O4dWqlBcL5D{*!rCHYfkiZLmXNwjZKm9?*X9w1GAPNGnqUEt^qWb3Taf(0$dNhsqd09-C#(N zLfTdT=8!R{R$>|{Q5M6x^!wt=P~#ci?tINE(p$Kx;|eJVzO$|QodLC%PB@6CN!T-H z=wW9Q(bv-f^ONfkqK(or;9CjD0Ae1IL|!BuAHg8m?eE4JT*@B=dcT7vsr&B_&a?Y{ zaEz1P@Ug2=K^7-5%*5P*XLEbx&fzQYU1kF-H!v)NB{uM^+iQKZIPw6@f zqv<$MfDR=H-(u3#P&?lpgzXEzusb2~Bk3AXeS&wxGi`TW!!6b;8-C|^8oz;;{p90gH2o!?-ZQ=?(}g` z;S59go07hdouct0$x}`i1&U!%KGN|dz6F_L4Z2H#`xY1n0cV!LQOJAt1f?}o)o9lm z;P0_M5$JQa3VeRiiWO&I=pI)d`f=Z0#010C#|`Fs+ta9+B8CqdBmGlP+|WRuM)@y! zw{nOA=|?p`C##j8FVsUq;jvGCL!Y8ga}rH0@(n){5W}l8ai*Z$9u;JmC4D?^hVUz? z@MsbM&MU!RK9>p^4Uf&+*j;VAuoi!oeN{4u4X1FnK#SvZdm zU!EVgI={|u`p4LxGK&oI2Nvmm0;}ftQWOBuSJx1T7v0f=1$$H3TffD=sq%$hT~nj5 zX=0EXVJ|4;c&wM3_{Fe?#s~jm+-0DKCpWB`>Zl|ZBzr~Y4^)b)A=I<&MguXB&G2&^ zPm6is6{jT@J+a_?vcT4%Y8P*#(c9&gla<`klFal|+s>&vFO#QRU5tffRv+rF9tTI>kR`FKrnn zyIk|_FNYZ|YRl5hP4ZHv|8m4S5UHMu9aoY}+JgrEKX;1Go!kGv?<)&He`;E~DX?^> zGp{o>s%t1J8hpcY*t?D5KubobzAW3aQ1vE!^7$~^=FJ0kzIsY3DSJFK&TT2?YwO9% z05hh&U_lrDck5kVWFSGsn%qIhT+FWzK7U&r{T$Koq>^HzONL5o=!fVbdXI#VSSej| z@AxyTn`e4VWM&+sCXtxI_igj#E{JPO=3Kp6c0ztWC8Heh6PK`rDSUcLdd4<>iqI>0 zN%G?A)$L(8#ZMKmmaqh={BxOliF3UvMwl}5H6}njV%ubL?T|7l>Yd^3+2W@O2=b$S zGiu91WdbjQGu#f!x)}#t4!DldeWuVi3i+DpW3C(N-WtY67iC|cSM&pjb519oNhd}{ z*gQ2lvGf4(?G4KH03C!XikRufk}$6#DfJ68DfW3?E$F1O>TFQ~$aSo?*n39Y060L$ zzstIIO0ATIqArzb{hg;_P@E*@Y{D6Vh8+MJ>o2 z^!ZEa0omv9OF_4K0`yfj2R3xH#b4nP7dS7;ENS01vr}Nc+U#LLN9e)7i{baGvGl|> z-s}Gu|83LfZ_nry`j3+Jvx9QI6SU80^k-)9-TtxNJ(ah?Q zoH6GW3lo&-=f@|-Tj&__`AFBK2Cdd&1{uI%(P}T4fUFSjq7WQedAHSar{4#^1)3U&m$;}q}mqECl1eUyl{k@7KIw&+0Eeo+->m3S2up6D$e z6N?XsE73=qKt!T18WATW)fGMyIzz4j-*!iw?+M<;Z$an~tIZ z8iSNhha;NCZAXr5BfCj~H?Y&=wEs@sYM+`d&W@Zq_3KnOhrnT1%~~#~wo*P3THwM) zomR)yZPkGb5;2P?sCE|Og-N4{0e&t-LC)WSon8@hWSrP zZ;^yTp;4!4l4W|j3yLIYc74U`MwB;&0rX?2v-6x(0tS$a-ah>Vfe{(qO_>~vtD~kgA)%qluH>52_k4clob!_X^~c%`gmkBt zBK1;`SJ=(S6umJK8Q`e*(aU=75$WX$IVGvaWacK*^H2QowUoeI5HQNEOpe>t!n z&GXxFuK}p$$~bI7bjiXoqK`|osIYKM3cY{s@e2X8_mgG zMa+a8m&jb6a1k+QNNtO&YjJ$BE0ma58`ABE9@X1ba3R zU{)$*(J}=T=e7$PeO8!7=ns6U+^v`TuA=uT`jiW4g#AM<^(M;t9o0<;mX8XUDLO_X zI!L5%D%YWQijA1G)M|< zjAB5(qDiq?{Q$&g34i*7zBGR6iD{&$WHx zPMg5;7LaIFVr&5TOT3)0hF$){;=_AK%?7flG$$-hbGv?H{X);Q-*hoW(~fAPN4fD@ zZhwVGjC(}jziTv+xl0qiCxjun8v{(c23E36r<@3PL*`S^(A!LlLpW5$CjuhTUTcpt zQdbS*g)Z4^PFht{BwdR{T0suWwb}dhF`Dt=M&~LBSe#mYlr>x>(mll8yN@Jf+1Z$rP-q)4Ro(rq@4lXNz zfF-DN4aIn1VGQ(k_cW?(d@IW6$e}ZW3cH3c7u;RcL8B2qElfSOec=`iBkO3HR^$ZS z*TLf$MJM`tmRt)`R@5*5G1*qKL?m8ZlH0a+J;8pRcWrW;{Un&t z`X4jv?P2hSw*oLH#G zX-XDXq}wBRs2`brPpM~Va9f|{ zJ3>}ySRPZSk>{dh%;OwwnC48+spsPF=-d{fNod_kiza4hmZ=STmC7#vxLS+5-6ksp zc^zS|x8`ocC3uu}_%G}qi&;ZJfI$-V)e{i$e`y#Cp@}^-8NV9zbsZO|K@x(8RRSpW zC7U{#VA~+JF8k|_-o3~$ZQKsIY)-`lT|m}?dOy(QBRVNGmc|Z@KKj-#1j4#c_f@pa zbGRxiT_dN|xVa|{*B_1XI1;iF69R6ih$Kne$6S0pCND54E)3k`?LKf~tKMI|Vs`yA z&Q!&B;|+#!-;3VFZe76z_So?YI%>6O)P#}IS~slB-I49_v?JwOciATsK&R4`TV$2x z^ixvGp$p0M%d|F+@+3E99__4)W_=Vstl&w-<^D*)eZ_r&TMgg!QK&=vs&uj>DL1>V zm78R*%DF2cHx=S&McyDz?j^AbSHXmNCFC27zE^ww-Pslh+dU(+n zl!+K_mJK31G3W#Y{WmhMRP?6^ch$J6&|q8l6MOpkv$T30!f z!~-*4-OHufjkb;tG~-zjr3~M9M}8%_o^>C8|aB2mA>!jGvE1 z#}7@2#Uaha+wsH}^j69z8K_NMK z&Hx|Q&AKo%qzsc;MNw1Mi#frjGquoL7@oSu^ z_FJtLXAJ2Lse(r*fyar=8`cVx0*2TQcuLxeX2Yx?+{%UUk8<&HKnBb{@QdKr1cC?> zGY2-kC}^DCqq*G)A%TrxVTmy$VbSj?^HL(JuuUv>)y7g}HAclL)Fm~)M28TgS%P)d zw34Pr@hTbzDbYYuSMsYVss^Vv($y&D%?8vKGE^^uD~Ep0M1$gxfESX#qkox(Zdj}y zlqh*>H6=d1Tc7uINq?mK{N&V9$#wp8P3+tbq3DeEn3_Zio3}|{Ux-tIWhv(DWWRm| zB`s+6?oPoe{bU?Ei30T#BJbK|w^)z6?`DUHo`j$_#Dxt}LEM(OtB%rX8v}2d+Xl!# zgko8Qi}lO)h)Zn8{qr514spwt>Sctn%`u2niP>HvjlxIdBhiRjczq7WkVDJg5U`3f zOBwz5gGMpCQ(d`6`aoz){(F%Z!4|DLwNJsUy19!WY2B3jfjpPAs-(SvRg9*v`x1o8 z?96N~d)NK}pSPnYEBc7;Z@x|QnpZ2vYB4c5*`oa$$U=qCBB1vmBx=s(>U|~t6mSQ{ z=mH-F5mZw!KnN+Ui%l}Q95F7XK^n~Zi~WUTsQCGhaW2CQ^2|IV8z`boqbSbhpHhBG zEZW#l5-Apsdr&+@tk>lWDIoqZi;Ha|x5etq<>fSuljChOd6$QI_ZyYRt{)&&%)=IQ z@tzr*%ii*MX?#G80M=`u1cmN1)D(0VWa+I^S$t5X6Z_GmcutOoytLw#al~63D6A00y8`0N00{^VA^->% z{m1!YKaU=<(+MoVk&|LYjMt!&MH=={mh39e+$Y!IgJW!GnL2&_j#i#PpN2 z8Y2Kb8iG0!Mxvk+5%iUrS#RvWSR~K~;h3)v#cUj(faq~dVyNB8N-%OcCs{51 z>x|@hGj1goY>D7?qP*+KMTmlJ_FuY7D*Qsg)px*I%(}*H$GKBfaFA&-MupH|H17h- zK5IqjQ&&m!?IsXs-%-eFN?r#i)f8YX)DI=*5_t0zvzqm%(zIvR zUJUTW26DOnF0?SC)f{1tGq58Tm0bB++!D`jPUsSZicuje8<~T{Ml*S6_#UquRO)7# z2T}1cPV|2RWw&8kVLe1;Yk zs_N10R)3KgfQ7=~@tNANAYqh1ISTLd)EVs>4V?j(273PwTOgmN>uo zd9**0oLhAQ`V^jIDINV~*Mf)w*YOPZfyXhYK&cq_K=uF^lf=C*yx;vd@8OmF8-e~kntKlDlo0AJ|!Y2GceGr2_tz-!yJg{7UHva zq1k}gH4Fgxe;v1wC~IJf6KRrcrgsO8g6B@aHQ_DJW6~m)>1!Qy6`MN-!4I{O@d8X7 zS+aWnVn$;6{QuL)I;s`LgPH+GVp+SZOOxj`24;W;3Q)&`F~b_@B42|w?Q7Y>0wg*c zW4@)uzbwbtBfO0IErpDY(@ug%D)*5T-17oy%#fDj)*jZ(nhbUZ2>5Edklh!X149~L zOFD#LvDFCD(qJJu$6C-tH-Vs*^c6;s*m6n<_r_#G05DtP@?Z#-gcXY!YbCjcC^S|b zi$IXLQK$|Al@_VuJojoZL-0hYT#9f}0Th98qkuVTanxZ5VD{AzkC-|(R9PEtlC3>> zWK6jy(e6l1bf#s3X_@8->7&MpcV+X7=m?ll4fY{64Vj7U7_A)A$La{}Ala#e0B}2} zCnOyTu8-5JgDW9Vp6n7-Twa&~v|X?w>L~*<|BiGORq&5mMk$uUIRWl_H)0msZ+!J zo=e&1@suk5?b`tP9KgTc7j5#;Mn!6-Xr>^oqVlIZtIR85iyLoeLNKjxtBe8*=k9$q`9KO+!JlV(}LL@hQxMA&ggKx5m~RIA8*0y1lKbh zk<82$*?UPzcubpHb!`8MCmT9=*oOZPp8@Mmi9;Go9%?`b9aZ693jUGDm2i#!x=4Bh zZOv-4Q6o&QpGjI!Z4tW9xcFc!)Vu+dBspPtK1TWd?U1Sr>Gp7UmBp%bm+sm=CaN^v zzu2OK^dqp|tkbKMGbr&*yw99LqjO{EwW`u`a;5Doogq*kk{BPtu7s%h zgnXB;Z9*ZKmSZwyWOa391>)L##r4-hvN|rUWo6EbtFDRzsXfUHsw(637yM{uE46UL z{OQ9`K#gmA`%nkstMNRpvKT|5bPxpsqyY!1%)8jnC+aRm=Cg!K^0fe?88^%{~OFx zv5{D;qTa8>_f=6BelX_qdIs9a@#=_Zk8Lo7>JJ}4qs$c)2sSbu0ADMgSAK0!+nv1p%E8`k1I)lq~&z(GT zP_K%2cFD^Zv&n7bA2hXy+%8tK{oS0Y2%N^SIXFh+3!|A>KWFFWr)H9zzPdib!=SAf zWE`3{ZP~TJ*7Fhu#nIvnN zhckIp#9n-Er3&!8DXFGn!6djMiUpr`I0RvgE$$jHT>Xe=dWnHHc;{4F9oSqmSW+@j zQaVW28tB<}<=@tbmKws(?Q+uCL-gF8-&+cM?av)aY^{w?YOc0t>QjBR=>Z9KHHqN2 z*I^A4YiM@;?5=4mu(5UMUA%bi^v&r+DD=dOva`=6kn}md~D3=BLWGgrzHd zO9uK&O<{HQX6rHg`1-Wurl#bS#_@J%a|_saw?xww@0jnx0)5*lXyamc>`WA&y$rXpemImb*FQm?SfDw|LiqUkZ zin1RRPJiA^8u{`;NImJ%TWXunZ1)WPII%~2y3)aoVtt<5GH+6=MU-nY<(il6YR=7_ z?3WmuKN?RF!BB|!W|4RJFio|@5N%qrYr4cWS(2XOnkMm@5WJ9vP$D7eb_Sv3AaUoq zjt0``zMmNy!#;hruA@{5Kx;xyq3S!?4pf0LvC zonP#0tK9jA@4-&R#>V=|cepF`g;!-2MjbCnm&D`WSJW#6aQJ^|yQD?hEcwuT!xi>* zSl;&zF@La3+35e}wp~fNQhWTOA)rENFr%d^Uajm~ltmCwM`!voR^DG3RM=7aP*pkO;_d1V5IFLz4p{ zG6N79C2=5VY>ZLF zbK+^s?!nM7rkK!}f}71`Cy@w9`-zK`>Twfy?`{~ICMCI2A8@y~(d1Yh1-hQawT0ID z#5wwZ)n+c>^7H)%=Cf;4lm;-B8;iuLlI-A5v%-H(MJMd+f)(t!(h-}XS~+}Ldh5&9 zY16^Gr;)Dap({gaPpha9!AZ|{Ogw$E!APAyyh_#%2=b|VBiqcM+s{~bEDlV2-8P}#H8vUSi^EL zSQXa2sOX-^yimC-?4r-irxCE5pTy=*(dTb{9szqiGWsrfDps0tDXEI5AIxl@@oaN* zd`!eo%2m?~xrA#I2b3gOt(F8@Qg4L~Q4vzZ33T1_hH<97N;;z|$}R1;%lzM8@!U`D zS!&{XM!yhIZqE{X1J6ZU7V-@`8_6P?28$%xe;j`#tIpW_Mq{DT_Yrm7Laz$fg5OO< z=h_OFm~(!adwK<$kD#P9nzL%9_2Q!(#M~g&0+l);NK`+gUKlW$C!AZWw5BES`79rL zX*&LWSe;Vr@1OiW4Jx{R9dnFf-eP>IhjUC2cY1jEX zGHv>N7<4;7nxL@kj;GdStrc`~$0?mTvk}i9BR`3bj#Ajs9?jqkxP_PbPlF-*^IrE$ zM+MeRNW@}E?t^1aCjdT}m=xlwXlq>u3c;V9e-;{z3Q7qN6JMRU9^Wtgv$?s)S#jbH z_3}B1aB-x!g_`2#gvDw0oyD%5H@z&#Df02nR;fPAF`S#8Ri6IOv}jts#D~4F8-`XIoa5<1fZkd@chQmRGIcU+4LGcXSqtkjn!{arQI5`o`^XPz{ASwx zM&s@Db{#%lIZynP!5?HXOvheGDzjitSgcD8o)Eq_Jb7Qx){vQ|6L=sBRUM2C@KcI- zL|-*ipk$%Y31o$h*TvoG3zK1+<5yc?P{pVxIX;zgKf@7-!VlfmQ|+imqQY)_nHtFd z7yCCqA+^2q!Gn_40* zp;AgHsdWCNMA+Q_B%>+K6wI^LWf;DWg7;c?tF*YJB9=-^%5@9AaXinCSFgkKlPHwZ zd>NF0M}b*x0*}dCB>}ZlF-YNKx-aZnhL6KTLra=AE3u&?=XCGd^|f{zA+$&t zWn_&-$IN*e>aNyk6byNBp!#ouK$FXf@HDtHZ5jju-xdT)X-8nlAj;RZCizm(gJMh6RH{_a-X=iSM*CRM~|8NCQ;4a|h z?Y)n{y>U$IzeAi-;s_X=ps9=T{X3%{c}hU!;CQ?A0z)Zp!a@k11QIMmm=8u_wtf2? zg)q#jAgwsRucctL!ORmld!bGOLpU4K|K+5`cA~d8mM&VNykT%F^@~Zh`Pp3I!k~ph zZgvV1ShwkVCU<5%G|r~^qOnmMsQCB?T>{bf)5-jX91+p|(M&%%a*jPs53FCsdE}(D z2=Y0fD~t9i-=buS)*qU*2nAU8%*^v+xwg2;1eg1|~{%j-9N=X;vP!0e{&jNJe+n7fnpl;zmxox$Cyb+r*qID4r`Q zD>bvdJdJD>w`6HdLh7Vx+oPj4WMyY%jz&j8+dgOmUyfCl3=PB1Hed_r_TS<{sulVaJW+n%yMA@i!EEKviy`Z;@Dru~7E96{u!TheUrqM+ zUp7uIDu0EP;oprB$;U18_b*1|Xrs@i%S!UVpOZu*a>jbP2f5#wqr6;1ox` z2CW5$8!KqNGzd{ltUwX;__U)(D~ctEu^$vK$WOl?%2P#%wVIpI<> z_-}I`HlSJwmZx;{6FuVNP)>IZ((U0{BTyTwV828;y@$QnhCAF!Gi;1>{7)Fo>%|P3rGFg|R_bjp{Q>_A!M$D~>L<(K6khqJK*<#Fb4+ zvWNQ@*sZbtzby3kk=JrTgv$A@{^r0nw6-fNl_#iCU8G>wLs5oGGQCU!36a)HkgtFp z3{|OK8P602@(npdze2LA)J?{<#>wOf0cB~nA-anj<)e9tna)K0(Lg-hWM$=IGK?xg zU_wu$!!$6`GsL%2)CH>|Qe1qtr3K9|B_7($$vb4e7SeG3{{;_E-$K03nvP9Aa_U+Q zLkY7Yj*w)<3W!_kd*;ahXtBEd=Bu=uH4+8FpSvlna$zW2C*WL@KNkk?=3FHHUcc;4 z^94F_O3mypMBHC@yN&+uXvIlY-OoI3JoP17L^fUeH#qY>0CbCeK(3j-PR zIfO3jIQ5ro-#}TG)UP0TzBia8upP}q8k<1ZqG}4%ZhX^z6a&CQPwsTxGDR23q5SuIu zGfWy?S{g0jTIA!Fd|dI3oj-p3rsd#L$VusYjegv^%u|KgMwN|DkjWDO`}*}Rb_wbj zW%0OhjBwKD;z0giW;i7jQg-yWq?H#0+l0q1;A-UtxO0HD{B2eDkKwO}UEJvmv$TL& zDZiU{Ui3Ty^ntr27v@;znkD$1xDOYMl%npW@P0dM70eQd%7Dp&uaZOOIBtz`VuV}=14)3VP z312LCG}IEx??R?${D>3zE#%gEqHHn8M3SAM7=;|!oKUX1ggwTOVYPT*ULk@$PK$|@ zNbxE*O@%ZLCY9La#14E0I^vc z6;;v}J%TsP6dr|R3u-*YT}6%#UXgE!<#;}+;2ZTC7#xu=o>)! zk5J|cbicBMcHE2aObCU$azipb)>>|%L3slu2cTJ-H!!D0Bkk{q^Err5-kcT-lCOVN|h!JjGd_aIE-j>+^b_URIRBeZ+ z3I!9-tqqk<2YI=MuuM>63O|oUqYX&$mlgw5VHQSzEhpl73!Ipq1Ii%e^r?6+gtWY}J~VUgUl1CFsDp#+XW@No$1M8R?kA*Gi; z^ss9%KWsADsV8krI)%^*jq$8Z2*l3cRhaDf`RKAj-%B$gC3?%EUEeB>18FmIG-)zn z8K0f!0kSSyLxJG*hFY5%Qud;sHn?R~-~F9IYb^mY3Kt`jw8p%i zW6c;LGsyFeE9yQQxG=I_Ku%Y}9YMx`tdwbks245IZRx`PI?&k}344^HaLP+DX!p)0o2z{bNl|0dv(17W{>0*T+-w$9aZ6%C zL4}7-s~cF9xNqXbz3XRGhTSRh;H@+?B6@E8DP2Y%|BZ@_@ZJ2H?jNcC0Z&do8N2T4 zL@%@BYDLv%!#o6D z6JXU-eLv2jt176`-3>gXw+qJHiOGOo!WXcBpuKSaG&a|Kx!a~S+<|Ae$x|a`|Hwbp z0tW-(K;~gp4_L$*JTDI*<4_2PiKt`L%?lKw-djfGKchjqFfLc%Knq6=nSKUOE1#8x zY9~Mt?+}#&TMiS}NZuZW(UWKXQiLrj@tbIe`5Dia_}q?7Uhnnxzi}7MA^*ECuz|yg z8v{+{$g2j=8SW3<`INCLLUb|}}P%RX*B$2+e3~}P|(*{bdx1{Ll9ICI4GCr1K z?09UWL)s6e^Q4d&LH2_|y~Nm#-WDINM7LQC@?+r1h-8e`O+P?8NgJh2qmEIB$L>L@>R93AVRQ2k0O|QDjzTOR*x_PegfHTh}-IeW|->!p*`@_Ij6|ahkWt6RTn1 z*|SimR)@r*P3_PE*oj4>MNoVdq8OCr(<7_qoo*it=;*Nh-+43$P7Hah7!#QY~2}d26`J;D~t^ZKcI5G}oo{|KKF|9v? zp^zZN366&|syUuXl;jpFt*oVVo>W?zL`gFKUmhL3G$432QkfGK?uNFZ));#pM*T3A zBNKn>`)Nf(jzxX#*^3L(76{FlKskMFD^ry$SfM@U;-BL+H`Z@yX5~{0JxF4ayD(4~ ziQ@=9boWA<3bbAIkWpoxQaaV`3%)6${u8_H2_ehR(b7g}-&=O)PnGMpc^cLIWG`jp zQOwEyniPc|cvqTY+zs$hGgZwq(M=3}W1V;$CePy$g9vTLmMjgcYugaIq8*^`?a4s0 zj~{+Kx_lF6|3eRS#Zo_}F*84E3BK*S!3^KJ`cDCq>qN!a`gJ)-+sS~;nKvkT+dCVQ zEDAae_*4ySjQw=3`iXmd+|jsy=$d&(h2M4`5UFcvT5}yc>yCeigHE}Z@Yqp^CZn>! zgz(lQd5*?1s_QfSqgr(VYGBI-5pj^KZ36G7&hbOs&WcQ#7f$}EaeslW!f0E)HZt)J zBG&bXG~(;)aR1lM``q=$%^I`+4wZ|2kRZa!JON$>|xBr=*L!b8%5E zAy@LW<&}Tp?Ju)Ks{SMo&l~m&fAz(0(QLmjx5NE3hC1ymQAhb>l!`jWAEl!I4w=5L zdh=pU!R?3mI!=r;fzem_Gx17Jf?1<5v_g_MBOq*Pyg0)sfyVah_%J7vnkL|CC~`H+ zv()OM@<0qO{*EHwdQ=&7yoV$Heh5r5x+~>ViNcK%`7{!HLc&NFtkH6Y4==8p`##h( z;-PI=;R!Co#iKfHyF`$IpvHuW7(pKuh;XBq7y^$Sjf+AM*BVyPPGO6~jZ)Yp1dwOBwntT$ct!M`Ms(L`fxVb!;iH0AZ7LR@MNn6F39|nlLb3Cn zdjE=w5A3Ou~tgz?48fF1)gzWa?hZLpGRa+^M4 zJ;Us8ra~8r)q1&+73G09X+uIJ_r*H#(71cn+1*j`@ndvn6M@MwU|32Ybb`|(8ctk* zHV&hSmn`AmjMSWFzoN5EMIe{@h+%mrHJ8+Ods+(PtOu9<3ZE&+#Vu~B2K&F_vWj7t z`8*YlAUjJ^<63YKXnREb?c14iDe^uCv(JvSO6itKOgQH4rt{%QUJa|>olV!#A0L7& z{7l~Ou3intAjB}`5}tgfWF~JpbvaKmTQR%X=n!JSpk)hxIc+&#(%WhL6+e->sd4>I zfSzR>aLMd;DWR$z(n0%Id)}*bDzefKW3SWG5DbZPH!TEg;K_7a`afU2;e@)|Dhqf| z!_^1ORGDEg{cuFSIn{A&pD6;0?iD;6>V3qD!dMAQXh5>1j2YLhDWJdd;t4bY$U|BT zR6`1sZhdW#LuV7HhL-S1HvJ*Tn=IQ+lF1U--kgWvyGz=)P1wybCpK*wt-H2y^QP_g zs49S@twtEQfj`AT00BPPwL=FksVFvIBW&m9v4NGF)*R&cYe{#_$3w7nKaMI9rV309h-GbI+(z<4^VAxzr)qCtn77*d{G^2H<3bg^U$QzxOd-i z$tH`tT0Mfkkt(i$yK0b06F*SFniz(_C6bY55%x~zPzG7X1|(6_rgaJykj<$PjIJ*-`U8`HOCV$7gwQ1!ZtaWQyrVR>1v<>wlP29IKc^lh7S*~dyUB;58 z7$_Rl?p;Vad026xIj;$H9=HBVVF3p?@fZQ-cntR*Y(M+y>fv>)m8%m3aiEObdE!4- zm992F=3*W^`Rf>YLNOHyo^nLp>ai#h91)Q-SdXRLwdwIO;gv~E zmcCia!&}Bd4lMm|c3Ii78O-FjVB(6Xda>HQKAh>w3 z8n45H#+4n5Bsr;!n4N;lrDET$J8mqAt4{cFi`!hdZFNL^RCE($TkjrrKQwp7nUkM2 zw(9<P=dPMrqO_~UC=DcGe;2?9!@$OcyZZnWcoBq-mVeX17|<8Roc3GBbR)IY3gXox_L zQ6h%n=i%r?a=s#bl@5(Yy{f`yafaDS>b9QmJCWF_q@)PimY@@~Oe|lFSTv%p9867h zCJO9g;)s>TUBA;jX^;{wch zYL!o=fbE;mVg~bO$vp;rK)HKNO$8qF(rbWKCik4m(S$t6ec&!Fy91iDgxA>0Ze=2F zt9Cf2-K~Dw`30x~5A{&_0}8)YJ06d|Nkw710U-Y4|3|vzMgicZ8=tJ^a{l6)X6y=q z5V+;Dc;jih*ABut7T)zR>ncD1|C|HB0OOzx!&>zhYnJ!hAV3k$`z8KbtK_#q-}upY zk8nt6UL?CY^1cG{21u6x=mz5WJ<*#k{@D|Sm9smtKEZ42Uyq;2Fb?O{r;&iRE9BpI zRLuUV0m{w>H$x{7U3~NZ8bF-p`zZtvfA&JZVcT-<&Hvea*9)axYdA{|^iPvn4~Yb_ z*INa`O+erb%WtO*h2V~0cb*myhh7&`+!)jqSZKj` z^>eh)Yfsa^SR?*4Jhd1OvlQE-QACd#0e-R3;TlZP8IL_+-#QZP~Rf%BO4nB%(r{NVXVa^`zh z2J1aD4Rxc?{(Q_}=llx9bqq5Ed`wE(R|>8F&isHTkMZBnNKh~~HgOk~UmvH}QA}z; z%SH`6y?X+Sa$9j1rS~|Mly-FO?dZ;W`WR6%r#(Ga9}`otR7Wp;!-}!fXMkDa*)x4M z=1nzKYb$cknu2X7hG?>8?-%Gq1F>7wO=8u_2y!_k{803v`VWfC zRim-=(sDY4P$Kwelf#1oYUe8Sw^rzIk#%)2Tb!~TcJV?aB+zW~!k&AM$3#A&qI|qJ zfAk~3Y+xr-@ZlSBrHYa@b7RhU<~%c&O3LEVS%rLp1Q=|P*S{}~O#d^b@I-#q7+c<* zPhoqSla^8@%b*G?Bw^`n#2N1kbKIW#S#h(UE1FwNK9zg)NnX_yYQm|)2+*S|50=1k zQhWhMp(#P34D4+Po$WJ|vT6+y2a`NKsV@@BJ;+D^`F)0jx{i29(Xa($xPsVj@WxUg zcdq@@vRofSSqex3j`H*-3I-_$icex67d^IT+apxBs}vN?K!2i2Fq0XQ4#45^S-oXR zxf2FGV;K|}f@y80p@tU)Y6NwZB1II9V~7NDnbs<;OS&;EQ*mZr^8KcSAPp|+qj?1R zKvaVwX3&%nJc@v}Uxoqzb%eK;@0T&cTO^}rYlDH8p$_VNnWj~Ey218NzCfQE; zv36z+O8Ht`gqnE0`+Ii_TDpeF9?_7ra3qrm>DBLCj$KAArRI&l0>dDubqWIxE}Xk& z;lUfxE>@x|FdlrJ5pQ91_$)$#tA#j+&bZ>l@bp|k*a8~E|3N@uQ~|?irAk;JGX+sk zQG^*Mp-cewuznod!T_AAi%HZEG_cytcyVHTuL2_RwFD|hQwsgIP@vFLn!y~_7>Cju z115+)YElcJ1%8Zig49?Y=|YbvLXm$d07V{?7s&)<34FHzf#JB^O)^2IDv>e|w?^RH z@#$FghILidZPDJoh`MIX>f)lUqwjzetZ5thepI@qiFlk7#bv|d{l(OOkj)Wyx#agU zq$OF*!i2^CNH1BJplHvq=_6XvVqH5o3fX}G+Rk{bd zs`tH_vK#yS|KH}DWYJDqkRG)>Fn#iroe`cM99U2g7_58Uy<9WnHi*-{Zvio>6n*3J zwe|3&d$tWO^i;G_Pl;JQ6i6`FbPeYdrmfpq7Uwkk76e!1DA`|VK$2KXs48pYyrFY_Mtf8SLA;ZxzYm(Z;4zHB5 zE*q_E=ZZ<+%c4W-%)W$#{@?Y2V%*1FB$?361KBDmvMVnDNdrz0Ft^bU-%TMnJf+!f zU0K=fomrU%Ckk8whmtthW9F-s00IUKgkluti_}!3|MadexJSEz8U;7bRp*e z=g_UY=sSC@;T6zozWziz25JV8UWyFHB_~Vk+|PTe`9MjTk>Gr?i*Yr zW>)Z-d`t&^MdZUe>{cm2{E2bhETmEA5RV;)pgzVwfQO`vz6#=6-d@eaUZjGNw7d2KI|f%t zASzI{Nw()JtX2lY8BEGY)IR&P-9u31+WQFQLKAw-M8}5#%w+VP8ri~Ky3#2j&l*&! z!e?DB4%r%pc-sJ|cwQb+*HqxR5^6ZasfV8aUdekt7B!TYfL zw~R9*a8?swv{Bk2q3(uxB$nXg9W1MQ{JQ-F;lK(wc`sagThG%-07E>hHias4(s-T? zfO-i2R_5b#XRD#UmoX&TTum-4r#0(J?w#RqlihegNFNlOHa9F!Z_D#n`GXLPrMb_3 z%(QcymUgw!!h3AY@VS#%9>kUY*8Bj~RyC=zzo?Csi+hWOZlaa63X2DRX2v$XFsVp& zHCVQM6H0Iz01o=V6GMZVQ51j^A-KoRh~g{Da$?-?tki$G|52`gtuZ;-D+5Gyiw6%m z0f5q01o_k|EIbQjqm%ITm*3^c`h0?_H-ZMmsXI0%hpvqrJ|VFnUpk3?B5T4T zrSfDSUG5q(9cR0HuZ};sdJ~GE#JM`1NiGfa*Y1J3!ur zM2a`@5(r>OYAg$I`9-aeqR#7ZZJ)X7JZ>p0*c`s10FrZcIK5YAse$7FNrdG&>~a={ zrfl$$vE8dss6TM%uz%)k$%sXXLPFhtCf9myr{neY&==H*8-NYTCK&l*M~XJ7nCacrVGqV6 zHW~*xG{^?r(g06Du)k_uGM`LjpzOoOW3@OmCz9UDx@xH#*i@(uV9#(^u;jSMm&~k zIs(Dv6MAcEdaG*|@h{lF=A#>!PS`9%qjVUASz3wvM$5L3KO?sfhT+X*MSFW^^o$F4RU9ln33hXm@SXC-lU@^kBzn^U6w*x2Sy;+O^JV zfze2y7S5IPzo1R41)EA7n=Z!Jk+*6@ z53j`<;nY`2X>fWfeoP4XBXy%yvkt3go8$yo2NLr?(Ccd(CD5iv^kcLCuN~5_KrJ{n z3W;D`jS}(yyQn8QWw-tszXm0FY|^EaYV`@MjBl*|`vQBx+dh7ZwIg3kq`BC*&5HZU zF8LZrno}|K2V|i&kNT;YjBMo%caerbixq}GoCj$%Z!m%^NU}RzFg&`+3zOX z+ABLD0{a-h9QjtGvpO($b+AzOa_!fUkbk7{4FWR3kJ8uLb-Z?$RoGa=r>8!;}l6u z6aq2J;51IdTrYpBnyLZHWCb$V5D7%w^y}PLy>vq}gS_WOvQTATWqe_3nFRp9ja2@x z0ZblD)q9_=+;ZA`OXYDr(Wki9hK5JflupcsB>|lsE#L4*Pa?`&8UrdZ19V)4esrp2 z2fR1BF+av@qslwR-9pN8=yR;%W1W$lJyf@OxEBR*=26VxdF8n=#WpK^68dUG+NzIoHKn$eG6Lp^ z?=|K7-3wo_`UOUsN?(k%e)J71$!EC-$1VcrM}?C`lP3!{9JFsg3u80LlHOlWc-&K~__Ny$fa%kuSz(z;;QIU3Pv|}`dJJYhZ-p{;8%luQ7yk*QQ(JOV{;+aYN6Oez1 zgrfok2*zNj0K<||Op*JyJBqSsHj1KMl<#jTfrUd3(Izl7;asr!@lZe3PXu`Wh-u2Y ze4*^8Y&3q5(Z&v4?3WYYlN;}+j*nh<%v%FTh)U1U?=#-8Kuy9`j}`lOv~{_@km6nn zGJW10@`G>L&w~elk0i$9AzAoxlc9MC1qm7c;ja!pyW7KEx%HC zUe_I8hgS)}=i%VXua7gAWrFuV@}Nz;>en;K@iPv#x}QMPRVYNs*21*u`3kmIA_6US zY4nh-rN1Aleu(QtO)(UhJR~?wiLnONE8|sYrf;cf=7nBPLZQjFG#UVQ>MWe>M{ech zwkv<0W@uv~%W?(RGEV<_rEN+j=T8Qy`sa9bq z6H^535vd6b+*a`QtyMjB{UC$(BNzC4b_+QCd8^zSnYR?Tm|Gb=pLWVV@OSUwbvuf$ z`|2^Zc1XQiKVs|ZeU zI~99n`C4%UZmCK8&YI_(UOIa7AL%Q+wQ;qt zqW|$+dsBoT)1*pUr_d3l(OF1CUPgu*{1MFPzA@bL{1jFCMk?J`PDOl!>JFDnp*Z+A zm{t=xiFBR7l>~9!`x1{n@n3i4O_uw<3inYgh;@@4v^COkLG;nH%7P@6IBMvW`wNj+ z+vzTTCD)%JIHXF+h3iojhDI$C`0{Xtb8e;rzfU9vi8%a-MA9x-kh&K}aIh}OcV{*gl8s-4kGYP5vQg6?u^OL4()9FAXI%PWRy}*(VR+a>H>FXs zYDABw(B#Abc-F5*p9{(SnrL!08hvweMw+XUy_@rkqR81wVSnt8(x<7Q!FX6kb93#Z z)&H;QNg%BU-~Ep&X~nm3?O#de4&TWAS~J@!40uV2BvJx~ql8l|{&^ko#1DFykv-8? zUy@GbYh1Wk9pCftYB`g~wUR-dSxAVXs5f~x;d%ai5-VufOy(9W+}|ox(YScf`M*n% zkR%r&DFvOMk7Yxsq$Cu1+(~-*$eK(v4!xJ15u{5{)bd=WO+y@tj}#M^3K&(c1I{7X z=N|kAn^z$)&G2tIGm7LWw+|h&)r!oY0x?wTQ^1H3Q>9pn*Y{(66?f^$E4E39s)cb# z>_&(T>EQjJXO)$4kXle#B}iZOYs%YO_GQgbPdgoa`I>=h z&ZnhK21V&p($l8=3=Z5ZrP%zAo8cPTal5_q!pE{9hDwvw%^s(_;d=xI%!8lbezHco zwqs|S=h&PhcJyShpn^ZHytXQF=T0CMKR)&H{ZrEzf1bk7RHewt4X_K!TL~>Ad?E9NI$D&P8mM( zS7z&62?Um&Dk=VTv4GWSaR3gj1i+%d4Q^{rcHGEoTmk^H`K+4P{ryYr)OWo=s*5bR zGwnyyA4V8%g=JO_?7pHk9m>3=NrKr{jA`ak0T|aJacC^sWU8jyU;{V$0JLAKJOx10 zQ)5@7B~=y)xj3;Ps<&UB%(hV$yt$%IB!Lx);Kac{U&?Hg*;& zUgw*vxW9VL{%$U2h(oeN(|VT~9+f+9;!hHA1RF3Uo7-1f0S{u=_DyH8x8 z$KqHFBZAE$m-_^UK{CJ2fJc;|WWG*VAcbY%;G74+~5oFaG?KYh$X*ZW*mJ3NBIAHKvWUayBaU2 zGpfMn+Y|0xzw|Tg!i}%XLVjk8|96YJ*!gs6#xJ!2AD+M>m2AtuBuqCL@L?ft>O+H< zerhf9`Q~9ivqbL`?%pW4dUBEC=cOB)7M{EDP?UaYQ1bSlfHJWtJxc_>2ivgwW;bug zOzOhywFfVNmtm-B-*`lK$Oic63y<5!BGKz--)|K%KmC#?Mo;E6wvRuiNZH8W@_naY z^pZy7wdkf;`-|hrRhrJkT{)1y=4ey<{GnpXif$@)+LPZD=M2fki;Mm?tkvcfHyv+k zU%o6QW=0k#=VT`TJLaoEF$+zPuHKLwFRqx@C}deQTA5a^O${CANV_SrF+nTPiH>-_ z_gc|V5jgH>M2*O1i}cI9@%7US)!szqD&ud@a*d`GJ0IZv_ICI&t;`Z7_q*(;1<7}K z=8)!qKt$#f$Hr>m$#sbc&P@*I#?w-r$;?N?4t3DzIg4q-hQOdnPP`s5suN%r59(7P zG~)(32?S=1-tHljA%xPA5akvau0hZM#B{^7F+^N%{Zf17C$RFXKk!6l?Iuu>N(GJ% zL~AN7+|ED-KB~%&K$ik5lBDu5exXVM5Q7N7Fc(Y;#4Jweij16pEzWbWD`ZYP&)wd0 z@b3$hlTe*U$TV3<*r@9$M(my6!yrW&9umYG!8<(3XF*`5zaue#oZ9b)nCvdMJd4+m zna_wW3Q6eByrxsWKH|52|=-CBKC_Lxb_;r-IBR;}ADF#WS8qA{8P)$y z0%+%r{PVwmA@`Zje^%doDqaa`whUMJO4_8^V;J^y+f$Ipvtu7(2>$A$`q@A2KJ7&; z^qX6`kRckpo#$ovtLTl{;{WboxQOV3%thIZeyl|yB3Hp1+~f6^M5eP`<*(#bC3G&U zx=>{HIdMLbWe%;oToNl@h$ly%*jSQhFM2avD@I6TXD)nB0ZT`opY}pne`5_kDL>U5 zZ!PO9G3PMQq*IHs@>Fmv96V{e+jc9}v#C3#CuV+8V2X~Bs!R4x^8^2gC;hs0U^#}? zBe<|$YJH@do*9xa^T-&-;}=_~rPPv5$a=g^535J&oS1s5uAc02>YTWGrcO_&XW4;b zk8*rS<$jIRKUkNFkw2ppR)2B9@Jq@^LQcI?qTd1U!Xvsp&M8Y86spUOg^Xl7v0jMa z^{Czhc|rdy#-F6KsjdjCZp+Z+BgX6cbDevJFK_wdk|X(JWCWEBvqKca1b2RLhuy+U zfI{}tRY>BUy9AU(D-m+ldn!$9r9y}M0hC3ESP%V#|ti%SI(iXf=TqP zT8qpiRdXDBEzJtBWMu+IAz{*W05Mi2FI;=9VVfvs`_GQcKZAaiCnlAwNoFybwxl&B zNrAHG?!*%_e;x@GZf`iYcA{M6B_I-1RSV5Avcc9~y?)Mb`26E{Tdv>z&a;ZXeZeP5 ztT2E!Im~~dyWZqMpZoF*ul~5+a&Igj|M}weliTeFMjW*IdNj!j!&4=LC8dL<^eRdQ z6W&irOK-#YdpNNbZni7@;i$oYShZMQlU|n9m(%NsO{eAzxs|k%xL@`qzaUEDhSS{{ z$b7v78X=8&M6W{x0+7f?xuF<8ONlEH6n{k7Tgz}f1R4RXL%>cblObS@WK3{iQW&b_DQTTy5~pGYWXkm_pk9qc-eqsInJ&3R(+fH`Kya*= z;5`jj5_sk>Ygo|@ICjfZQI4b@{c1}$)-N&Tu?PeirK~Hu+{Gs z#%K0#*i1#$-jYXA9gBOUCXpL|k zog$AzAgQCG!OLa+$-Y-7RU-85wxU2|w@xMAQlmQAd4Gx8(PwogTSb+dN zN*WCWmD89uI8Hdfr7;k|-;i3`vta%y$9Lf1%F@$A7WaM4 zM)KM}DN2eD@SA5Y<(;a^uRx#s5MEbrJ?VZj+0Xjq$~aB3HQO!6Sz?a=@XYL2ywm-+ zV!M8&(hR{i4~mWZ!Nuc&r*c_6kyIqZfYTA|WPblb=W|MomdY6wa`%U%z@Y%j9W@<& z9Tt)Jo)wLh`1&}glvE1D{gvtx!I>F`A@+4boqMm?Kl=1ZbLx@tDJZ*KYjtKfui)a) zz!f+)fC0@N5h>*24eLqKnk~E(czd|D7Up4+l6E1QIU9+}(L?)Ih?nudX?wCJ)xcdF!r4S zcszv{1;#qHHYo?j?^cV+I*O_z9)>>q@aP}gh?@sc^r3P3RQlJf?c)%J*hQMHnFd*o zGKVo^RK8gnm}3{HG-`{t@X2b<>w9^nKnc&+iEToGH7F%U9~hTPp@mk2G)EQH>t|?z z^ey7(Wj*yE9Mox4ajJ}Tp{Wu>EI3F?9{q1PPy6rNwrDzGuxE8>zDf?vYe0TgKMc`i zy04}F(^EL{68jQv?kQYglg*P^y5*4?VcLNrhPg(`3PQVRX*e(AsU_LoRPS?axRaCB z7ATZ%Nabc3s+hw>h)_URLJv4&Yfwla%yW`l67q*$VcoS)7q87}*K!;RoCkJkY$B^C ztjG;pVhkF&YTD4GmHdZZSn?IWD^X?l2NbC&IMv$mD0KJ0B<9GNh)SmrUI8!+m_@z; zHc5OxE$9_lB%Ltpx3unGoqASp9d2Esh%{P;tudKE*~lP~fmq`AyY$RvpIuyHBOtz@ zV&yZqd*5^SjYi8`SoE2FuD&wAZNET-VkXHRA(I28wBAbBF`t~)G3&D zfS6H(GdBZ*elK>PU`_5#$JerJ+bFr@!o2x*$;mjLm1~LJWk^8~-bE{p9SioaC^tZD zwLz;>rS3`oH3=a?t^g&l1AsT#^Eas(=@sy(e_h32|9Ql13k!*7bg1EDix}#1Vsr|w zfG+N9DIj?0=4oIZX>B~4U3t+iVWCR>o}CI>g==?Ok_b-|gMJ&&;TSr%#Iji2rJbE@ zOwWnnpua>GZAlVgLt+fxz6OOhe_&5aE(?Y!QG8PE=~G{3zt5a9KPjoM+@+^@YUbq1 z$@R$8O)FO&%VTqFHwO0)UDxlG$MU`NuMZv=wazK8FDmJtg0e18w$xWmO3%src+<^_d{~A~<6K5TCJ5cV>QOw$)*AMN z*1jZF2h6%>DJE_U`Ac!!q0_aX=s9b-U^xq?Wz_~2gNuS>br6;Yj8g-v(c&N}DijbZ z8B5M3Xves1mXU5fV94es80btAeUSqrBK*vsONc%jVg(c`0Yxmj0(ECmCSdmTlR{(X zk(kj!3esezt@T@g5{_YLJiL}xdiyv%R(CIBcMxACZkFL^{@X&4t|7bVKPf~_|MX-@ zkHhRRb}leW+@)ymQ4Tp3``3VoEwgeFSL}geJ{Nd7f26qK8IY52fFbrD60V!&qj5OA zdBx7vHtnY7;UQ*-;6n(YkHS;Km#^x+vfPoRqHRz1qv;O7hWdQ}_2N1RAnp?gCbK>* zZ2@U(QH*omF0#7f_He5P0t>yq<39V}@f(|eiBkd!1amK|erUBN#Mxz1BfFWqVL?#x zlY~gv@~09PSEkH6RD3sMSCsd@f79oI;1um z4OGLzeNh;V0VIxOcY^?kD|JbBqkF;vltcmq4Mk9q$X#T*ipV&1)$2=IQU4i^j)SrmSOOfBofPpJrzrpuP$mEj!S zT&hEi1g9K9ggFpdKCi>xGsGLkXaW+yb7LBY zT62$nx*8G_khyqIO148?G&@$zy7964;IVMz-65n`s1I^@<*tSbYaxpM3bUVFL2`ea z;d&cokVfZ9XPQt+>7(WHPg`gHP6EW1G$W}EHLc910Hg{&HAi#4kcF z|!b!ug+Ma7PLk6Kj>7 z^k(g3rk)Rz^cRTTT&MtOJL?x2eX%40fpyzpq4eXj2!cd1eN|LA3>-_toT*c?BKbm% zQ2>15NKQi%S;XxX0yfo$$`;m0ppDN;icb&&viLZqoev}C5x_QCW6~7G?$YjB0J+Wo zu6YOM7iQ~JsE;^nzskT9jv&e>P{M2OUtz+vj z^jp4PKQeA}#d{p-?_>*90)-$*s2J<`3G{3?UqjTQ29n!v$pf2=`eq zi&Fmk3bRvRDJY`Xl{J%22e#>I-4n1|%SMQ@JcpBhG z2Ds*ndGeyriDpZWaE!ZGd(RS905(Ph>dO=(=pMFDtKTG(t&}b5ay!`VmUOu^Y*ipv zIYEm33XqLXSrI`a|8{`RtxzpvQ}JZ#N(+^Z^H%x0$FRxSAy}dySi%XA#tK;<oGv798xIs#lE06N#xgm7-K>o)}VZW2mUJ^v@z}8wPS?IYCEK-p0e|!G_ zN0nZgkR{8Yz3s^Hit?9JzW?m`@4GU+EIBRC$em`E$Ed-MIxas=mEyx7RF>Ei_=>d2 zK_fc$tV@esH0`|!)ag1`erhC9l74||;j)B)xG|vcko2OF{QK8N6`E{1CC}jyZ6+zTjq}QZcE*W)z?UkE`X0NZDEZqUmgtY0+>!9h1*O^pyy>& zx^;~tB19eVWNv~nROcbVI2+HMWZSdXZ5}L#CtVFeowRT3p9-k~9*xApFr=VD#KZ3U zl^a)!H`l(H`1XgIdblmktM?#P>GCd}G-Pjn!TG=o6g`Da^buh+&BC?vz(iq+Q5SW0 zCQE@&_JfXH!H#yzp@_$9|CutyFuGQBKAUu0gAR&6699pw{#do&tL3*{*gR`BKv)y) zK?edd;si5A7sTdIn09EGUNLA$GffhRWqQX9v;;&CmQ5>d@{15lleh)ZWK4OZI1qw`72BcHz9_ys_Sm~|bC zA1#nlz0$KC^JEe{yOO&*jT4tY|3cdT+$LAF!Mcm~D%0~vzTK&gTX;_EZgQP;xxz-$ zWIy<{99n(<`Eq^5&0CQK8Q=hZ7EkUU!{|_{x%9KXb~5SWCZjn$xO(R$y()ELwwz+H zELZq@Je$!N$WM^({_&5m>szg8_)YHa8iwyRuN6hX_98K=w#lx%ckGl)5y&E?*7@IG zL{b7>jXOF&i(3X_#>&k3_ftW~Qm%{}F=pgMK9F2qO7}rqS50U`qmewRpz}yqMLpOy zg1t;H8^wAZXH;j>zg5+exQc-Tf92@=fgzr?L>V);?@OP^C@FfG?96=%n>Bma-f*^}TR*Z@Pq@hCQQk_nsr;q)J6 z-tRMidg(gT39x*osZjnPZuiphsQ(_J?p9je)E^wcrTmuq-?oei!T1dCiqt{R5p&ae$7Muka;1ixwgGojye}-W+5lwD~GW?Nk zO+;o(Ap@DJ)6OkAYNy%Q6b6A_3#D8+1Zx+~KEKRcq79|ZP%{l9?_{P*fkN(4QSKf9 zD&Oi@$kBoL0@E1ducTqjh`zQLVsOfdBbp2)`#1V=#!SWJ`ufR=0jv^5*9GuLHGo-V zC)R+p31^QfQEULU0t^pe0IKH!J zTtR*Js>bFt_} zj#e(1&vGE65?Xoz;nMD%Y1|l6Y#65pP-Bp@ml#oC#@ca$faSH2ztGkg-K7O*PWd`_ zj8pF2ljvN2V}7?+!L~%=0t)rI+{ljJe7KFt73|T0UnEHat)%GM;#7b5lFb?84ch?V zrOayfQV{fSiJ&#URak;rMT~q-XK{esDwkPhOI|q~tsI(J^t$1#i)Rg%d%k3N=t;UP zbzpXIa#Is{x3_%u>~f6h21+jFEb>jQXug9kZr1MiYY$UZK4{rRwzelrN$jM)ROu8$Iwk#3? zGyF5R2k?WI9#(oq=-T)qHkO7;Uxd|Xi`?1LVmbt6N_v9R1fi-hxhgcvCa)+<50Z^- z9nX>~bpZz>M5Mht|` z>0kD6rCYwz`Zju<=!0la`xRfz`{!qfjha>tiFjZ?$tO7Y&*tMUnIa_r--n?q z9sI6;-Wb+FNp`{f&@e`^CxkSGd)0c6Z%fQe(|H{8AocA0*t($`)O$#Vw9x}B>F8c} z)|P5>n3s;_@4;Si$-j0ckx?Zy07RcLE{Frn`&LDE`D4I51?#_%rDp6qxHNK%n zkR@7nlrynp6-^r`JMeN=&h8kN1J$&i-2;GfehS4Hg-m)J87&XL7x+kNASb{_sH9~%p|MKNKA1^as7)d7gux%FMoaX9)F$lhzyJL&|3UPrO?R7i2^Fs-ueCAq~+ayO{B%1gXKozv(zyFrDujfTgu^ z{5Gx4-$is=fmJRsK@t^07c6DUg3P{uuTuI|MU%om_x;Ulv+qAtRQ38X2R-&3LA`A; z12=DnP3klCG}XOVs#xfzSmT0`(PvHv0hSMWwP>|?yJ+TGU6Aj~xTA(>#IrDx21i2njx>(!TF~584s~I|3HDIce3aM+imgttY8-7C=B=0YR+kVXWXtRZ}dD6 zXAgCiKFV?nJhDw7OE01;aRS2zWve!6kf_9yD@S1ZCSB#-k;Y zk~HWm*nZ4miN-36GBud;GCSfQXJI;p+F5ghFoe=&UeQ5jtrVES5)>T67k}hNHj~0{ z8yawUkqUiMM0++-)J4r06`D9sN)fZts*{Wn!txumN#!lWe^%t+4|9{p`0tESFQE3; zJ2fZ|Mlcd@g+%F1UnI3lq>`10|DOUL5jdhZ)nUvMmzxVPa1QWGuQqUl{^U2Fdh?oh zpPRH7{I`(GUtat>r524MNPC}ClTOS;F`Clhjq84s46$@n!y+rIW81Pa{S%WWhlv=? zba!54%V}eg3G2M8GsMzi|#;Zaovz`Y5;Fj%68+tw^w?tlFQp8(BnF&B$<*yxvk zYUaXaXn6RZ;e9cHba`)^I8pR0m$X~a@>5?EtK`wuQ~B|T?328s@NBR6xz+OMY};3p z61URg_;!Skm%stf^h(!6PyUryZF4?e9Nd#Yc)a7L0{IgEIvFiHSsu@Gz*#TWgMm@} zU=Md^>-CunuhUPuxfM#?gMyu~8!{OkC%HZo-m{Srp;Z7JXhCpl==p)@8I5w zr5-iAOB~nEjOLBb^m2$D-ZR&&&s=jz9M@0lQG8xNl6_D2S_Caz{>a<$p;YRwYHka9 zg1UMaRnY0rZ4pp+Nn&Gfm64Brpi+;vaBqRXml3?z65BzR8;goDqEJuiA!;OfMIZt% z-dWCVm7uaajth2^0=m{PD^{#MN|@@k2ib5Y0rvPzCGwEhM8e6<>nfOQx|F1YKF3=f z$Zl4~i!V!6ws-GfcLMt7s{m@#KF*Gej!c$ne!ucA>{|hwN_tsLWyQ)`xH)PBvN;a2 zei?a|hM!(F1T}HBP=8}OpD{p-zD|6&x*Yjd@)lXX`Z4iFDs2GFik2=|w+P{L5Ek;e zmD!J2;$$3Qv6f@i+nbw;1Bzm~BMbC?dl8hqqxUkl_)6|S|Eyv@idnK4Y@8Xfp`fb) z00+J8^=rR(=x`i`5GBa47k=;hYw?kRebeET}L2c0Oy*I^HKz3wnHch>y z-=~;Uus9Z)4xfaFP-?b?r7RT%$VDV%t*KGd@d3Spbb(OQ`T(PZQIZ9pIJsmXGKJ^V z5Jq3S)-Lzk=<%O9E#4Qj0c;jBP-19iSYyA-!dt3JiVgPKJ_gISZ@q>0o1RL;sIsj> z-Qx!AG~e3G`9s2wSRF#>u#F$NpPy0)wiNKLT8B87pZJSho&zs;4 z7jr?_E>|*_V+tMVDbWMIQ9P|&6bnHb9WGJhLbT3kB&5sGJYHz}=`gci&Cy8J5@nD% zVDdfwG}MX|*!MTN%Ge)+t8dTS84=sto=M)A61X*E>-a2uv77P8JpCWo!3&-b6t4LC z>k!0Y;;8PZ+$9+dWq25wu!I*quwwlsKVRQ6Q|;L7ZrURTJ)S`=fljz?rxl4EA8HS0 z)o*{y45ep{mn9?+**=p_h)up*j21+HVdGZLng58fB6=>}-MyoQ=kcP;6joeQkVm)>LL` zWWe~FPy2H6#mE1+<0Q$%w$^S+py2+}F)&xi=6G=xD#2##d znV1OG&li6*w}1Yz0Z10%66GSjWAem{;f#m8RrAiC)USr(@Df9~tiIh_dtdv%M zahwtT6eWfJO)H6kJWM(pLVbI)IO%4NMI#1 zBL94+(B%K`>B^!1Z}~Y6O{bjQG3l0_XZ9t!R7)}!ZCKmd+6fGiN438!U3VwGWpV2b z4lum6t4<$l&9ro_7~ZqlQTy+MHOGPtDjJ1v?!3Akb|M%qodzAzoavq#E5`u($pS$C z=rM(%a$<>v8VU@1wqQ2NC^17rmvdP> zm+He$cOc;qCIBGNtU6&fn+UWxbUFd#G4E0UtSBN6?RbQME~F9&lH5mI5(!y6@!SCw z^1-ojDDt=pMn1S8>Gsp=CazLlL%4!gHujJ4OTwL-t(5o2?&Q5UI`vO&NeG3LuX_Pf zH{22hgDW(5RT%6E_P+~2dJYfqQQHrUId!PNd5O7uCxirYVQpn=G@~xq(f@pJGGkvA_e{OFq6(O z&vcE7lWm-eu3Qv-H&Y^(YqHUi&GnsVHCWzkJ&<8N#yggAWHwu^%^R&5(a{6l{$|7d z4G%MvC(je4U7(dlMwY%1I9W2Hh|+S0155T?rMI5vIo8*+RB-BvL3xr-(h1*_&GCyJ z$D%Tw0Rx;(wtoLfr}(FwE3(p_JW1QhE-Ge2J!h&&*KZJ}9$dU+df$mk;x!7yhIaeo z$5E?Lxw)*JZ`K~~?grwFk|gn<_LO63UDHY3iKLwK5jA#(VX5Oxm|@50cQJ`bi^p4* z(v!lIP8d!$?42n|>$jGH$1x}To08|}34Hj#>MgMmBKw>OrUw!YkKFp|q35g9olmQ8 zGmU%ftag{-8Qld-;og$yv|;V)bVgA=m_QR%F~T9F-)JLDEmR{aSHMcg2A9AO{<;m` zp7o177ir(~bvM1FG8kUE0$y3Do=9*ThhY2&#w3zt0(f`~D=a#o9gd2o@!=m=bx&OF zSLQeem;2kRmi39BR*a*+{Zt1id__uX{r8a?o_ZCE_jmNGNF0NfV34dOnZKOZ`h=n8JOLg=fACV@Vc8w^p1? zL6xm;K>{v+ll{#$e;4#`H&2C|8w%iNajNxcVZ#m*~5_s;B{Q%IpOZC@ws&hxeY zPrrK%Spkpl!aW-kO?nCeT-rpYdLKNQwm)BvwA3l;D4jR~U~Y&)A{;U4C%W%rgjKwm z<0nnL2=OSwzgm)mkbN7;nY3yc^S~8{NwG={!}p>d=r8a5jEg3ZR2O zhn2tBKRI#?OOo&do@zLR5ez@6F!J9EjPjVWlA+R)m_*N~hD4cIt2pMV@QaHZ7avz0 zfk3yDCcHx9C;O%Nl}u+|yXJse+nx4tO^L|B#;^ug?RKPxy1PY1xg|%s?NM-N%ke|+ z+;&d~{ip+Zd?|o>�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 MYknY2PJsjYKZ}NvDF6Tf literal 74508 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 z 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

-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 diff --git a/base/vendor/components/font-awesome/webfonts/fa-regular-400.eot b/base/vendor/components/font-awesome/webfonts/fa-regular-400.eot index d62be2fad885f750abe96337567aeec99e5adec7..dbc06a4a3397b3b20c5109b616e725d473d047f7 100644 GIT binary patch delta 1040 zcmZA0U1%It6bJBg@141`vy{MG!Sb#unBYJYtlqh%ScAH^twFJO@DbNQ zVQ#au^}gFeHE3DA=}S3B$5gJW{*9!U7XNVkrC+8)At9(D_O-7WC} z_aasi^snQ)w0kGHm5Qa7QkT;>y_CL?@n!a9HZwcf#q19g?TIV7V6Kz9ksC~^lLw4h z<80oSKahVje=+|{!6>{?__~-azEQkWYL~8-8|Ag~U~1pg*=c3^J(HS?6uvY*hi@SrNcST_UHT?GhKlDI~buaypwz0`sYF%15F-U0Wulr9=Yl+mq!cR0G`=iz5uF<& z2|P|BI!Ti_SK;&sS0*}_=EgNX=NGw#q*MPwpd3QWag(BUSo4W@3p0Wwi}Q3;700!t z?~vrz%Y<;T66FJW$c`!rg@|JzTsfqS3Q8v^1l|sf`jj()zy(=Q<&T2C;0c9S<<)GC z=SX!#ijT~XgmPnjGS{-YSwx2a-dh|b&{1X{4D=N(=i|(Q z;eTm`{IEjs?p4f;AZ#t|W&!Z~;{&g4q@C5NhaxlJKnup9?muJDUVXbG4VosDR%a)@ zBF2OlU#ng4c3_ftKYI^iO`kW#BtXyxc;fT9NB18{=u;nfZ(@z^`fAzx21ll9-N|); zBfkKM_beQK>gj)GZ#@t2`~-k>Zt#7)^Y5!pdSmV3$iyF@kil)>$B`2`UaMZ2oFu4u z?-C1-_rE3AS?|i|X=~V;vo6?zJ!gNIl2bFOQ>jnW2h-OwyE7kWwd`ZrOW7MaBey3% zoj+TU3wsJng|))xw$v$a_5^?IOwun}l1H>=Gz zw%Oa>Z>g(ake|*MFV&UB@)<8dyhW zp%Etj7H@R_4A#JWLMQQ9Ct>xZf{jVTY%n9rnx;N1*rkAtqD`anwNP-c!WMrTq12*U zf|xWUOESq5CMz;2(@-cxYgCWYG7>=&0wFp|6B^0H106OUAJgMPblGa5krr9feBqFp zl*G}vW1nO!7u6n@L&0@5;;?7-1?8NoEGc18eNt5eXCzgWq_A{u02%z1$+?@H1`(w-A$ChAMf9TY(|+8@C2=TH%g@L}$5U zVA7Yl6aLKi+=f5%7f?WN?b%Xq8rBCEg8m&`%y5e^gGaa-H1St%8SW=-ZUyS(JhujU zO1YyDraQS~;L`iJ6aLIOZo{9s3b(;w@4(SN#jSjK`=7Jvc)jVpbM)TO|0AgJ2m&~* p@%s2!+iNTi52pKfEe;a};AUuG^OOF -Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019 +Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 By Robert Madole Copyright (c) Font Awesome @@ -22,7 +22,7 @@ Copyright (c) Font Awesome descent="-64" bbox="-0.0663408 -64.0662 640.01 448.1" underline-thickness="25" - underline-position="-51" + underline-position="-50" unicode-range="U+0020-F5C8" /> @@ -435,14 +435,14 @@ c-44.1123 0 -80 35.8877 -80 80v8c0 30.8779 25.1211 56 56 56h293.917c24.5 0 47.08 c-4.41113 0 -8 -3.58887 -8 -8v-8c0 -17.6445 14.3555 -32 32 -32h213.471c25.2021 0 42.626 -25.293 33.6299 -48.8457l-24.5518 -64.2812c-7.05371 -18.4658 -25.0732 -30.873 -44.8398 -30.873h-113.709c-22.0557 0 -40 -17.9443 -40 -40c0 -4.41113 3.58887 -8 8 -8 h131.552h0.0517578c7.44141 0 19.1074 -2.19238 26.041 -4.89355l99.752 -38.7881c18.5898 -7.22852 30.6035 -24.7881 30.6035 -44.7363v-23.582h128z" /> +d="M501.03 331.824c6.05762 -9.77832 10.9746 -27.0498 10.9746 -38.5518c0 -4.80664 -0.915039 -12.499 -2.04297 -17.1709l-57.623 -241.963c-12.748 -54.1729 -68.2627 -98.1387 -123.915 -98.1387h-0.345703h-107.455h-0.224609 +c-33.8135 0 -81.2148 18.834 -105.807 42.041l-91.3652 85.9766c-12.8213 12.0469 -23.2266 36.1016 -23.2266 53.6943c0 16.1299 8.97266 38.7529 20.0273 50.499c5.31836 5.66406 29.875 29.3926 68.1152 21.8477l-24.3594 82.1973 +c-1.68164 5.66406 -3.0459 15.0576 -3.0459 20.9668c0 37.5938 30.417 70.502 67.8955 73.4551c-0.204102 2.03125 -0.369141 5.33691 -0.369141 7.37891c0 31.627 24.8594 63.6895 55.4902 71.5684c43.248 10.9785 80.5645 -17.7012 89.6602 -53.0723l13.6836 -53.207 +l4.64648 22.6602c6.76074 32.417 39.123 58.8115 72.2373 58.916c8.73438 0 56.625 -3.26953 70.7383 -54.0801c15.0664 0.710938 46.9199 -3.50977 66.3105 -35.0176zM463.271 287.219c7.86914 32.9844 -42.1211 45.2695 -50.0859 11.9219l-24.8008 -104.146 +c-4.38867 -18.4141 -31.7783 -11.8926 -28.0557 6.2168l28.5479 139.166c7.39844 36.0703 -43.3076 45.0703 -50.1182 11.9629l-31.791 -154.971c-3.54883 -17.3086 -28.2832 -18.0469 -32.7109 -0.804688l-47.3262 184.035 +c-8.43359 32.8105 -58.3691 20.2676 -49.8652 -12.8359l42.4414 -165.039c4.81641 -18.7207 -23.3711 -26.9121 -28.9648 -8.00781l-31.3438 105.779c-9.6875 32.6465 -59.1191 18.2578 -49.3867 -14.625l36.0137 -121.539 +c5.61816 -18.9521 10.1777 -50.377 10.1777 -70.1436v-0.00878906c0 -6.54297 -8.05664 -10.9355 -13.4824 -5.82617l-51.123 48.1074c-24.7852 23.4082 -60.0527 -14.1875 -35.2793 -37.4902l91.3691 -85.9805c16.9629 -16.0068 49.6592 -28.998 72.9824 -28.998h0.154297 +h107.455h0.216797c34.7402 0 69.3936 27.4443 77.3525 61.2598z" /> -Created by FontForge 20190112 at Tue Jun 4 15:16:44 2019 +Created by FontForge 20190801 at Tue Feb 4 18:05:39 2020 By Robert Madole Copyright (c) Font Awesome @@ -22,16 +22,16 @@ Copyright (c) Font Awesome descent="-64" bbox="-0.983398 -64.9834 640.104 448.427" underline-thickness="25" - underline-position="-51" - unicode-range="U+0020-F897" + underline-position="-50" + unicode-range="U+0020-F941" /> +d="M470.38 446.49c2.59277 0.816406 6.90234 1.48047 9.62012 1.48047c17.6475 0 31.9834 -14.3232 32 -31.9707v-352c0 -35.3496 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c8.95898 -0.0488281 23.2949 -1.80957 32 -3.92969v184.609l-256 -75v-233.68 +c0 -35.3398 -43 -64 -96 -64s-96 28.6602 -96 64s43 64 96 64c8.95801 -0.0507812 23.2939 -1.80664 32 -3.91992v261.41c0.0078125 12.958 10.0479 26.626 22.4102 30.5098z" /> +d="M256 440c137 0 248 -111 248 -248s-111 -248 -248 -248s-248 111 -248 248s111 248 248 248zM348.49 127c1.94043 2.4209 3.51465 6.90332 3.51465 10.0059c0 4.24512 -2.69043 9.84277 -6.00488 12.4941l-58 42.5v144c0 8.83203 -7.16797 16 -16 16h-32 +c-8.83203 0 -16 -7.16797 -16 -16v-155.55v-0.00488281c0 -10.6074 6.71973 -24.5957 15 -31.2256l67 -49.7197v0c2.41895 -1.93555 6.89746 -3.50586 9.99512 -3.50586c4.24512 0 9.84277 2.69043 12.4951 6.00586l20 25v0z" /> +d="M480.07 352c88.2939 -0.0263672 159.952 -71.7061 159.952 -160c0 -88.3203 -71.6797 -160 -160 -160c-37.1016 0 -88.291 21.5039 -114.263 48h-91.5195c-25.9717 -26.4961 -77.1611 -48 -114.263 -48c-88.3203 0 -160 71.6797 -160 160s71.6797 160 160 160h0.0224609 +h320.07zM248 180v24c0 6.62402 -5.37598 12 -12 12h-52v52c0 6.62402 -5.37598 12 -12 12h-24c-6.62402 0 -12 -5.37598 -12 -12v-52h-52c-6.62402 0 -12 -5.37598 -12 -12v-24c0 -6.62402 5.37598 -12 12 -12h52v-52c0 -6.62402 5.37598 -12 12 -12h24 +c6.62402 0 12 5.37598 12 12v52h52c6.62402 0 12 5.37598 12 12zM464 104c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40zM528 200c22.0801 0 40 17.9199 40 40s-17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40z +" /> +d="M505.12 428.906c6.95508 -32.2031 6.95508 -57.4062 6.86133 -82.6094c0 -102.688 -55.4375 -164.781 -128.035 -211.094v-104.438c0 -16.3594 -11.8789 -35.5625 -26.5078 -42.8594l-98.7275 -49.3906c-2.81934 -1.27441 -7.61621 -2.40137 -10.707 -2.51562 +c-13.2471 0.00195312 -24.002 10.7539 -24.0059 24v103.844l-22.4746 -22.4688c-13.1211 -13.1562 -34.1211 -11.1875 -45.2773 0l-50.9043 50.9062c-12.9961 12.9922 -11.3652 33.8887 0 45.25l22.4746 22.4688h-103.811c-13.2461 0.00195312 -24.001 10.7539 -24.0059 24 +c0.111328 3.09082 1.23828 7.88574 2.51562 10.7031l49.4355 98.8125c7.33008 14.6094 26.5391 26.4688 42.8867 26.4844h104.215c46.2168 72.7969 108.122 128 211.354 128c25.0996 0 50.3086 0 82.5059 -6.90625c5.54883 -1.1875 11.0176 -6.65625 12.207 -12.1875z +M384.04 280c22.0732 0.0078125 39.9971 17.9277 40.0098 40c0 22.0801 -17.9199 40 -40 40s-40 -17.9199 -40 -40c0 -22.0742 17.916 -39.9951 39.9902 -40z" /> @@ -1159,11 +1160,11 @@ c10.9004 -8.7998 22.8008 -17.0996 35.4004 -24.8994c5.7998 -3.5 13.2998 -1.60059 c6.59961 0 12 5.40039 12 12zM0 328c0 13.2998 10.7002 24 24 24h280v-320h-280c-13.2998 0 -24 10.7002 -24 24v272zM58.9004 111.9c-2.60059 -7.80078 3.19922 -15.9004 11.3994 -15.9004h22.9004c5.2998 0 10 3.59961 11.5 8.7002l9.09961 31.7998h60.2002 l9.40039 -31.9004c1.40137 -4.74316 6.55273 -8.59668 11.5 -8.59961h22.8994c8.2998 0 14 8.09961 11.4004 15.9004l-57.5 169.1c-1.7002 4.7998 -6.2998 8.09961 -11.4004 8.09961h-32.5c-5.2002 0 -9.7002 -3.19922 -11.3994 -8.09961z" /> +d="M480 288c17.6641 0 32 -14.3359 32 -32v-288c0 -17.6641 -14.3359 -32 -32 -32h-320c-17.6641 0 -32 14.3359 -32 32v448c0 17.6641 14.3359 32 32 32h242.75c7.31348 -0.000976562 17.4473 -4.19922 22.6201 -9.37012l45.25 -45.25 +c5.17676 -5.17285 9.37891 -15.3115 9.37988 -22.6299v-82.75zM288 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM288 144v32c0 8.83203 -7.16797 16 -16 16h-32 +c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 16v32c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 144v32 +c0 8.83203 -7.16797 16 -16 16h-32c-8.83203 0 -16 -7.16797 -16 -16v-32c0 -8.83203 7.16797 -16 16 -16h32c8.83203 0 16 7.16797 16 16zM416 256v64h-48c-8.83203 0 -16 7.16797 -16 16v48h-160v-128h224zM64 320c17.6641 0 32 -14.3359 32 -32v-320 +c0 -17.6641 -14.3359 -32 -32 -32h-32c-17.6641 0 -32 14.3359 -32 32v320c0 17.6641 14.3359 32 32 32h32z" /> +d="M320 416v-96h-64v96c0 17.6641 14.3359 32 32 32s32 -14.3359 32 -32zM368 288c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-16v-32c-0.0107422 -72.1074 -57.3555 -142.354 -128 -156.8v-99.2002h-64v99.2002 +c-70.6445 14.4463 -127.989 84.6924 -128 156.8v32h-16c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h352zM128 416v-96h-64v96c0 17.6641 14.3359 32 32 32s32 -14.3359 32 -32z" /> +d="M510.9 302.729l-68.2969 -286.823c-10.502 -44.1084 -55.8252 -79.9062 -101.166 -79.9062h-127.363c-29.7637 0 -71.5107 16.5547 -93.1855 36.9531l-108.298 101.92c-6.92383 6.53418 -12.542 19.5635 -12.542 29.083c0 22.0762 17.916 39.9922 39.9922 39.9922 +c8.7334 0 20.9922 -4.84961 27.3623 -10.8252l60.5928 -57.0254v0c0 22.6758 -5.22852 58.7256 -11.6699 80.4668l-42.6885 144.075c-0.90918 3.06934 -1.64746 8.1582 -1.64746 11.3594c0 22.083 17.9229 40.0059 40.0059 40.0059 +c16.4922 0 33.6768 -12.833 38.3594 -28.6465l37.1543 -125.395c0.975586 -3.29199 4.55469 -5.96484 7.98828 -5.96484c4.59863 0 8.33105 3.73242 8.33105 8.33105c0 0.582031 -0.117188 1.51172 -0.262695 2.0752l-50.3047 195.641 +c-0.696289 2.70703 -1.26172 7.17285 -1.26172 9.96875c0 22.0781 17.918 39.9961 39.9961 39.9961c17.1152 0 34.4678 -13.4521 38.7344 -30.0273l56.0947 -218.158c1.11035 -4.31934 5.63184 -7.82617 10.0918 -7.82617c4.69238 0 9.26562 3.73047 10.208 8.32715 +l37.6826 183.704c3.6416 17.6387 21.2139 31.9541 39.2246 31.9541c3.41309 0 8.82422 -0.835938 12.0781 -1.86426c19.8604 -6.2998 30.8623 -27.6738 26.6758 -48.085l-33.8389 -164.967c-0.0849609 -0.414062 -0.154297 -1.09375 -0.154297 -1.51758 +c0 -4.16797 3.38281 -7.55176 7.55176 -7.55176c3.29297 0 6.58398 2.59961 7.34668 5.80273l29.3975 123.459c4.03906 16.9619 21.4688 30.7285 38.9053 30.7285c22.0771 0 39.9941 -17.917 39.9941 -39.9941c0 -2.59277 -0.487305 -6.74316 -1.08789 -9.26562z" /> +d="M592 448c26.4961 0 48 -21.5039 48 -48v-320c0 -26.4961 -21.5039 -48 -48 -48h-240v-32h176c8.83203 0 16 -7.16797 16 -16v-32c0 -8.83203 -7.16797 -16 -16 -16h-416c-8.83203 0 -16 7.16797 -16 16v32c0 8.83203 7.16797 16 16 16h176v32h-240 +c-26.4961 0 -48 21.5039 -48 48v320c0 26.4961 21.5039 48 48 48h544zM576 96v288h-512v-288h512z" /> +d="M304 128c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM336 224c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM368 160c-8.83203 0 -16 7.16797 -16 16s7.16797 16 16 16 +s16 -7.16797 16 -16s-7.16797 -16 -16 -16zM336 128c-8.83203 0 -16 7.16797 -16 16s7.16797 16 16 16s16 -7.16797 16 -16s-7.16797 -16 -16 -16zM304 192c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM432 224 +c-8.83203 0 -16 7.16797 -16 16s7.16797 16 16 16s16 -7.16797 16 -16s-7.16797 -16 -16 -16zM384 208c0 8.83203 7.16797 16 16 16s16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16zM368 256c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16 +s-16 7.16797 -16 16s7.16797 16 16 16zM464 224c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM496 256c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM432 192 +c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM400 160c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM336 96c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16 +s-16 7.16797 -16 16s7.16797 16 16 16zM304 64c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM368 128c8.83203 0 16 -7.16797 16 -16s-7.16797 -16 -16 -16s-16 7.16797 -16 16s7.16797 16 16 16zM389.65 346.35 +c2.58691 -2.58691 4.6875 -7.65527 4.6875 -11.3145s-2.10059 -8.72852 -4.6875 -11.3154l-169.381 -169.37c-2.58691 -2.58691 -7.65527 -4.6875 -11.3145 -4.6875s-8.72852 2.10059 -11.3154 4.6875l-11.2998 11.3105c-2.58496 2.58594 -4.68262 7.65332 -4.68262 11.3096 +c0 3.65723 2.09766 8.72363 4.68262 11.3105l5.66016 5.66992c-17.6602 17.9219 -31.9961 52.8887 -32 78.0498c0 19.2402 5.2998 37.0801 13.9297 52.8604l-10 10c-9.44434 9.47461 -27.9678 17.1641 -41.3457 17.1641c-2.10254 0 -5.5 -0.22168 -7.58398 -0.494141 +c-30 -3.73047 -51 -31.7803 -51 -61.9307v-305.6c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v303.15c0 67.9395 55.4902 129.35 123.44 128.85c27.7246 -0.138672 66.1006 -16.1992 85.6592 -35.8496l10 -10 +c15.8203 8.5498 33.6602 13.8496 52.9004 13.8496c25.1631 -0.000976562 60.1289 -14.3369 78.0498 -32l5.66992 5.66016c2.58691 2.58691 7.65625 4.6875 11.3154 4.6875s8.72754 -2.10059 11.3145 -4.6875z" /> +d="M32 64v48h448v-48c-0.0478516 -23.5742 -14.3848 -55.4229 -32 -71.0898v-40.9102c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v16h-256v-16c0 -8.83203 -7.16797 -16 -16 -16h-32c-8.83203 0 -16 7.16797 -16 16v40.9102 +c-17.6152 15.667 -31.9521 47.5156 -32 71.0898zM496 192c8.83203 0 16 -7.16797 16 -16v-16c0 -8.83203 -7.16797 -16 -16 -16h-480c-8.83203 0 -16 7.16797 -16 16v16c0 8.83203 7.16797 16 16 16h16v186.75v0.00585938c0 38.2256 31.0244 69.25 69.25 69.25 +c15.835 0 37.7734 -9.08789 48.9697 -20.2861l19.2607 -19.2695c29.8994 13.1299 59.1094 7.60938 79.7295 -8.62012l0.169922 0.169922c2.58691 2.58496 7.65332 4.68262 11.3105 4.68262c3.65625 0 8.72266 -2.09766 11.3096 -4.68262l11.3096 -11.3096 +c2.58789 -2.58691 4.68848 -7.65625 4.68848 -11.3154s-2.10059 -8.72852 -4.68848 -11.3154l-105.369 -105.369c-2.58691 -2.58789 -7.65625 -4.68848 -11.3154 -4.68848s-8.72852 2.10059 -11.3154 4.68848l-11.3096 11.3096 +c-2.57617 2.58496 -4.66797 7.64551 -4.66797 11.2949s2.0918 8.70996 4.66797 11.2949l0.169922 0.169922c-16.2295 20.6201 -21.75 49.8506 -8.62012 79.7305l-19.2695 19.2598c-3.43652 3.42969 -10.165 6.21387 -15.0205 6.21387 +c-11.71 0 -21.2344 -9.50391 -21.2598 -21.2139v-186.75h416z" /> - + @@ -2068,6 +2074,14 @@ c22.3008 -10.2002 46.9004 -16 72.9004 -16s50.7002 5.7998 72.9004 16h55.0996z" /> d="M464 416c26.5 0 48 -21.5 48 -48v-352c0 -26.5 -21.5 -48 -48 -48h-416c-26.5 0 -48 21.5 -48 48v352c0 26.5 21.5 48 48 48h416zM380.4 125.5l-67.1006 66.5l67.1006 66.5c4.7998 4.7998 4.7998 12.5996 0 17.4004l-40.5 40.5 c-4.80078 4.7998 -12.6006 4.7998 -17.4004 0l-66.5 -67.1006l-66.5 67.1006c-4.7998 4.7998 -12.5996 4.7998 -17.4004 0l-40.5 -40.5c-4.7998 -4.80078 -4.7998 -12.6006 0 -17.4004l67.1006 -66.5l-67.1006 -66.5c-4.7998 -4.7998 -4.7998 -12.5996 0 -17.4004 l40.5 -40.5c4.80078 -4.7998 12.6006 -4.7998 17.4004 0l66.5 67.1006l66.5 -67.1006c4.7998 -4.7998 12.5996 -4.7998 17.4004 0l40.5 40.5c4.7998 4.80078 4.7998 12.6006 0 17.4004z" /> + + - + +d="M32 224h32v-192h-32h-0.0380859c-17.6436 0 -31.9619 14.3184 -31.9619 31.9619v0.0380859v128v0.0380859c0 17.6436 14.3184 31.9619 31.9619 31.9619h0.0380859zM544 272v-272c-0.0351562 -35.293 -28.707 -63.9648 -64 -64h-320 +c-35.293 0.0351562 -63.9648 28.707 -64 64v272v0.0263672c0 44.1455 35.8281 79.9736 79.9736 79.9736h0.0263672h112v64c0 17.6641 14.3359 32 32 32s32 -14.3359 32 -32v-64h112h0.0263672c44.1455 0 79.9736 -35.8281 79.9736 -79.9736v-0.0263672zM264 192 +c0 22.0801 -17.9199 40 -40 40s-40 -17.9199 -40 -40s17.9199 -40 40 -40h0.00292969c22.0781 0 39.9971 17.9189 39.9971 39.9971v0.00292969zM256 64h-64v-32h64v32zM352 64h-64v-32h64v32zM456 192c0 22.0801 -17.9199 40 -40 40s-40 -17.9199 -40 -40 +s17.9199 -40 40 -40h0.00292969c22.0781 0 39.9971 17.9189 39.9971 39.9971v0.00292969zM448 64h-64v-32h64v32zM640 192v-128v-0.0380859c0 -17.6436 -14.3184 -31.9619 -31.9619 -31.9619h-0.0380859h-32v192h32h0.0380859c17.6436 0 31.9619 -14.3184 31.9619 -31.9619 +v-0.0380859z" /> - + - + +d="M223.999 224c17.6328 -0.03125 31.9727 -14.3672 32.0078 -32c0 -17.6641 -14.3359 -32 -32 -32s-32 14.3359 -32 32c0 17.6602 14.333 31.9961 31.9922 32zM438.171 320c16.3789 -29.375 15.0039 -73.125 -25.1309 -128c40.1348 -54.875 41.5098 -98.625 25.1309 -128 +c-29.1309 -52.375 -101.646 -43.625 -116.275 -41.875c-21.5039 -51.25 -54.2617 -86.125 -97.8965 -86.125s-76.3906 34.875 -97.8965 86.125c-14.627 -1.75 -87.1426 -10.5 -116.273 41.875c-16.3789 29.375 -15.0039 73.125 25.1289 128 +c-40.1328 54.875 -41.5078 98.625 -25.1289 128c10.877 19.5 40.5078 50.625 116.273 41.875c21.5059 51.25 54.2617 86.125 97.8965 86.125s76.3926 -34.875 97.8965 -86.125c75.7656 8.875 105.398 -22.375 116.275 -41.875zM63.3389 96 +c3.75195 -6.625 19.0059 -11.875 43.6348 -11c-2.75 13 -5.125 26.375 -6.75 40.125c-7.75195 6.25 -15.0039 12.625 -21.8809 19.125c-15.1289 -23.5 -19.0039 -41 -15.0039 -48.25zM100.224 258.875c1.625 13.5 3.875 26.875 6.75 40.25c-1.875 0 -4 0.375 -5.75 0.375 +c-21.5059 0 -34.5078 -5.375 -37.8848 -11.5c-4 -7.25 -0.125 -24.75 15.0039 -48.25c6.87695 6.5 14.1289 12.875 21.8809 19.125zM223.999 384c-9.50195 0 -22.2539 -13.5 -33.8828 -37.25c11.2539 -3.75 22.5059 -8 33.8828 -12.875 +c11.3789 4.875 22.6309 9.125 33.8828 12.875c-11.627 23.75 -24.3809 37.25 -33.8828 37.25zM223.999 0c9.50195 0 22.2559 13.5 33.8828 37.25c-11.252 3.75 -22.5039 8 -33.8828 12.875c-11.377 -4.875 -22.6289 -9.125 -33.8828 -12.875 +c11.6289 -23.75 24.3809 -37.25 33.8828 -37.25zM223.999 112c44.1602 0 80 35.8398 80 80s-35.8398 80 -80 80s-80 -35.8398 -80 -80s35.8398 -80 80 -80zM384.659 96c4 7.25 0.125 24.75 -15.0039 48.25c-6.875 -6.5 -14.127 -12.875 -21.8789 -19.125 +c-1.625 -13.75 -4 -27.125 -6.75195 -40.125c24.6309 -0.875 40.0098 4.375 43.6348 11zM369.655 239.75c15.1289 23.5 19.0039 41 15.0039 48.25c-3.375 6.125 -16.3789 11.5 -37.8828 11.5c-1.75 0 -3.87695 -0.375 -5.75195 -0.375 +c2.87695 -13.375 5.12695 -26.75 6.75195 -40.25c7.75195 -6.25 15.0039 -12.625 21.8789 -19.125z" /> +d="M128 192c70.6562 0 128 -57.3438 128 -128s-57.3438 -128 -128 -128s-128 57.3438 -128 128s57.3438 128 128 128zM507 246.86c14.2402 -24.3799 -3.58008 -54.8604 -32.0898 -54.8604h-213.82c-28.5098 0 -46.3301 30.4805 -32.0898 54.8604l106.93 182.85 +c5.97266 10.0967 20.3398 18.291 32.0703 18.291s26.0977 -8.19434 32.0703 -18.291zM480 160c17.6641 0 32 -14.3359 32 -32v-160c0 -17.6641 -14.3359 -32 -32 -32h-160c-17.6641 0 -32 14.3359 -32 32v160c0 17.6641 14.3359 32 32 32h160z" /> +d="M464 320c26.4961 0 48 -21.5039 48 -48v-224c0 -26.4961 -21.5039 -48 -48 -48h-416c-26.4961 0 -48 21.5039 -48 48v288c0 26.4961 21.5039 48 48 48h160l64 -64h192zM359.5 152v16c0 8.83203 -7.16797 16 -16 16h-64v64c0 8.83203 -7.16797 16 -16 16h-16 +c-8.83203 0 -16 -7.16797 -16 -16v-64h-64c-8.83203 0 -16 -7.16797 -16 -16v-16c0 -8.83203 7.16797 -16 16 -16h64v-64c0 -8.83203 7.16797 -16 16 -16h16c8.83203 0 16 7.16797 16 16v64h64c8.83203 0 16 7.16797 16 16z" /> - - + +d="M438.406 70.4062c-3.20312 -12.8125 -3.20312 -57.6094 0 -73.6094c6.39062 -6.39062 9.58887 -12.792 9.59375 -19.2031v-16c0 -16 -12.7969 -25.5938 -25.5938 -25.5938h-326.406c-54.4062 0 -96 41.5938 -96 96v320c0 54.4062 41.5938 96 96 96h326.406 +c16 0 25.5938 -9.59375 25.5938 -25.5938v-332.812c0 -9.59375 -3.19824 -15.9893 -9.59375 -19.1875zM380.797 64h-284.797c-16 0 -32 -12.7969 -32 -32s12.7969 -32 32 -32h284.797v64zM128.016 271.984c0 -0.515625 0.140625 -0.984375 0.140625 -1.5l37.1094 -32.4688 +c1.50488 -1.31934 2.72656 -4.01465 2.72656 -6.01562c0 -4.41211 -3.58008 -7.99609 -7.99219 -8h-0.015625c-1.625 0.0820312 -3.97656 0.97168 -5.25 1.98438l-23.5938 20.6406c11.5469 -49.5781 55.7656 -86.625 108.859 -86.625s97.3125 37.0469 108.875 86.625 +l-23.5938 -20.6406c-1.25 -1.08691 -3.60938 -1.96875 -5.26562 -1.96875v0h-0.015625c-1.9502 0.108398 -4.64551 1.32617 -6.01562 2.71875c-1.01074 1.27832 -1.89941 3.6377 -1.98438 5.26562c0.107422 1.9541 1.33203 4.64941 2.73438 6.01562l37.1094 32.4688 +c0.015625 0.53125 0.15625 1 0.15625 1.51562c0 11.0469 -2.09375 21.5156 -5.0625 31.5938l-21.2656 -21.25c-1.29492 -1.2959 -3.83105 -2.34766 -5.66309 -2.34766c-4.41895 0 -8.00488 3.58594 -8.00488 8.00488c0 1.82812 1.04883 4.36133 2.33984 5.65527 +l26.4219 26.4062c-8.47949 17.6582 -29.249 39.7295 -46.3594 49.2656c5.2959 -8.46484 9.59375 -23.4395 9.59375 -33.4248c0 -16.7217 -10.5977 -38.7705 -23.6562 -49.2158c8.64258 -8.95605 15.6562 -26.3262 15.6562 -38.7725 +c0 -25.0283 -19.8799 -49.5117 -44.375 -54.6494l-1.42188 34.2812l12.6719 -8.625c0.557617 -0.379883 1.55762 -0.6875 2.23242 -0.6875h0.0175781h0.0253906c2.19727 0 3.98145 1.7832 3.98145 3.98047c0 0.609375 -0.254883 1.52832 -0.569336 2.05078l-8.53125 14.3125 +l17.9062 3.71875c1.75977 0.367188 3.1875 2.12402 3.1875 3.92188s-1.42773 3.55469 -3.1875 3.92188l-17.9062 3.71875l8.53125 14.3125c0.314453 0.522461 0.569336 1.44141 0.569336 2.05078c0 2.19727 -1.78418 3.98047 -3.98145 3.98047h-0.0253906 +c-0.668945 -0.0263672 -1.67676 -0.327148 -2.25 -0.671875l-14.1875 -9.65625l-4.6875 112.297c-0.0927734 2.11328 -1.88477 3.82812 -4 3.82812s-3.90723 -1.71484 -4 -3.82812l-4.625 -110.812l-12 8.15625c-0.561523 0.380859 -1.56836 0.69043 -2.24707 0.69043 +c-2.20996 0 -4.00293 -1.79297 -4.00293 -4.00293c0 -0.607422 0.251953 -1.52441 0.5625 -2.04688l8.53125 -14.3125l-17.9062 -3.71875c-1.75977 -0.364258 -3.1875 -2.11719 -3.1875 -3.91406s1.42773 -3.5498 3.1875 -3.91406l17.9062 -3.73438l-8.53125 -14.2969 +c-0.285156 -0.529297 -0.537109 -1.44629 -0.5625 -2.04688c0.0507812 -0.928711 0.611328 -2.23047 1.25 -2.90625c0.639648 -0.603516 1.87109 -1.09277 2.75 -1.09375c0.677734 0.00292969 1.68555 0.311523 2.25 0.6875l10.3594 7.04688l-1.35938 -32.7188 +c-24.4951 5.14746 -44.375 29.6396 -44.375 54.6699c0 12.4482 7.01367 29.8232 15.6562 38.7832c-13.0586 10.4434 -23.6562 32.4893 -23.6562 49.21c0 9.99316 4.30469 24.9775 9.60938 33.4463c-17.1104 -9.53906 -37.8867 -31.6104 -46.375 -49.2656l26.4219 -26.4219 +c1.28516 -1.29199 2.3291 -3.81934 2.3291 -5.64258c0 -4.41504 -3.58398 -7.99902 -7.99902 -7.99902c-1.82324 0 -4.35059 1.04395 -5.64258 2.3291l-21.2656 21.2656c-2.98438 -10.0938 -5.07812 -20.5625 -5.0625 -31.625z" /> d="M422.19 338.05c5.3291 -3.24023 5.2998 -11.2695 -0.0507812 -14.46l-198.14 -118.14l-198.13 118.14c-5.35059 3.19043 -5.37988 11.2305 -0.0605469 14.46l165.971 100.88c19.9102 12.1006 44.5195 12.1006 64.4297 0zM436.03 293.42 c5.33008 3.17969 11.9697 -0.839844 11.9697 -7.25v-197.7c0 -23.7598 -12.1104 -45.7393 -31.79 -57.7002l-152.16 -92.4795c-10.6602 -6.48047 -24.0498 1.5498 -24.0498 14.4297v223.82zM0 286.17c0 6.41016 6.63965 10.4297 11.9697 7.25l196.03 -116.88v-223.81 c0 -12.8906 -13.3799 -20.9102 -24.0498 -14.4307l-152.16 92.4697c-19.6797 11.9609 -31.79 33.9307 -31.79 57.7002v197.7z" /> - + +d="M511.328 427.197c-11.6074 -38.7021 -34.3076 -111.702 -61.3037 -187.701c6.99902 -2.09375 13.4043 -4 18.6074 -5.59277c6.28125 -1.91504 11.3789 -8.79785 11.3789 -15.3643c0 -2.21094 -0.842773 -5.58984 -1.88086 -7.54199 +c-22.1055 -42.2969 -82.6904 -152.795 -142.479 -214.403c-0.999023 -1.09375 -1.99902 -2.5 -2.99902 -3.5c-31.501 -31.5098 -93.2285 -57.083 -137.784 -57.083c-107.546 0 -194.83 87.2842 -194.83 194.831c0 44.5391 25.5566 106.25 57.0469 137.748 +c1 1 2.40625 2 3.49902 3c61.6006 59.9053 171.975 120.405 214.374 142.498c1.95215 1.03809 5.33008 1.88086 7.54102 1.88086c6.56641 0 13.4492 -5.09863 15.3613 -11.3809c1.59375 -5.09375 3.5 -11.5928 5.59277 -18.5928 +c75.8955 26.999 148.978 49.7021 187.675 61.2959c1.26465 0.382812 3.36426 0.692383 4.68555 0.692383c8.93262 0 16.1826 -7.25 16.1826 -16.1826c0 -1.29785 -0.298828 -3.35938 -0.667969 -4.60352zM319.951 127.998 +c-0.00976562 70.6348 -57.3457 127.962 -127.98 127.962c-70.6455 0 -127.98 -57.335 -127.98 -127.98c0 -70.6445 57.335 -127.979 127.98 -127.979h0.00488281c70.6426 0 127.976 57.333 127.976 127.976v0.0224609zM191.971 159.997 +c-0.00292969 -17.6582 -14.3359 -31.9902 -31.9951 -31.9902c-17.6611 0 -31.9951 14.334 -31.9951 31.9951s14.334 31.9951 31.9951 31.9951h0.0361328c17.6416 0 31.959 -14.3174 31.959 -31.959v-0.0410156zM223.966 79.998 +c-0.000976562 -8.8291 -7.16797 -15.9951 -15.998 -15.9951s-15.9971 7.16699 -15.9971 15.998c0 8.83008 7.16699 15.9971 15.9971 15.9971c8.80371 -0.0283203 15.9707 -7.19629 15.998 -16z" /> d="M96 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32c8.7998 0 16 -7.2002 16 -16v-480zM224 -48c0 -8.7998 -7.2002 -16 -16 -16h-32c-8.7998 0 -16 7.2002 -16 16v480c0 8.7998 7.2002 16 16 16h32 c8.7998 0 16 -7.2002 16 -16v-480z" /> +d="M502.63 409c5.15625 -5.1709 9.33984 -15.293 9.33984 -22.5947c0 -7.31543 -4.19727 -17.4521 -9.37012 -22.625l-46.3301 -46.3203c-3.24707 -3.25684 -9.4248 -7.07812 -13.7891 -8.53027l-36.4805 -12.1602l-76.2402 -76.2393 +c8.79004 -12.2002 15.7705 -25.5605 19.1602 -40.2002c7.74023 -33.3896 0.870117 -66.8701 -22 -89.75c-7.87793 -7.8418 -22.877 -16.9141 -33.4795 -20.25c-18.54 -6.00977 -32.6709 -23.29 -34.4307 -42.1396c-2.29004 -23.8105 -11.4502 -45.8301 -28.4502 -62.71 +c-45.5596 -45.4805 -127.5 -37.3809 -182.979 18.0693c-55.4805 55.4502 -63.6904 137.45 -18.0498 182.96c16.8799 16.9902 38.9102 26.1699 62.6094 28.4404c18.9404 1.76953 36.1504 15.8994 42.1504 34.46c3.33105 10.6016 12.3984 25.5957 20.2402 33.4697 +c22.8799 22.8799 56.4297 29.7803 89.8799 22c14.5996 -3.39941 27.9395 -10.3799 40.0996 -19.1396l76.2598 76.2598l12.1602 36.5098c1.45215 4.36426 5.27344 10.542 8.53027 13.79l46.2803 46.3301c5.17383 5.1748 15.3115 9.375 22.6299 9.375 +c7.31738 0 17.4561 -4.2002 22.6299 -9.375zM208 96c26.4961 0 48 21.5039 48 48s-21.5039 48 -48 48s-48 -21.5039 -48 -48s21.5039 -48 48 -48z" /> @@ -4352,16 +4376,20 @@ c14.2998 -1.2002 26.5 -10.7002 29.7998 -24.2002zM336 448c8.7998 0 16 -7.2002 16 c0 -13.2998 -10.7002 -24 -24 -24h-8v-136c0 -13.2998 -10.7002 -24 -24 -24h-80c-13.2998 0 -24 10.7002 -24 24v136h-8c-13.2998 0 -24 10.7002 -24 24v136c0 25.0996 19.2998 45.5 43.9004 47.5996c15 -9.7998 32.8994 -15.5996 52.0996 -15.5996 s37.0996 5.7998 52.0996 15.5996z" /> +d="M502.609 137.958l-96.7041 -96.7168c-5.15039 -5.13184 -15.2324 -9.29785 -22.5029 -9.29785c-7.27148 0 -17.3535 4.16602 -22.5039 9.29785l-80.3262 80.418l-9.89258 -9.9082c9.41016 -20.7256 17.0469 -56.0186 17.0469 -78.7803 +c0 -26.3193 -10.0596 -66.5244 -22.4541 -89.7422c-4.50098 -8.50098 -16.3936 -9.59473 -23.207 -2.79785l-107.519 107.515l-17.7998 -17.7988c0.703125 -2.60938 1.60938 -5.00098 1.60938 -7.79785v-0.000976562c0 -17.667 -14.3379 -32.0059 -32.0049 -32.0059 +s-32.0059 14.3389 -32.0059 32.0059s14.3389 32.0049 32.0059 32.0049c2.79688 0 5.18848 -0.90625 7.79785 -1.60938l17.7998 17.7998l-107.518 107.515c-6.79883 6.8125 -5.7041 18.6113 2.79688 23.2061c23.2197 12.3936 63.4248 22.4531 89.7451 22.4531 +c22.7627 0 58.0576 -7.63672 78.7832 -17.0469l9.79883 9.79883l-80.3105 80.417c-5.13086 5.16602 -9.29395 15.2686 -9.29395 22.5498s4.16309 17.3838 9.29395 22.5498l96.7197 96.7168c5.11621 5.13281 15.1514 9.29785 22.3984 9.29785h0.105469h0.0449219 +c7.28223 0 17.3857 -4.16602 22.5527 -9.29785l80.3262 -80.3076l47.8047 47.8965c5.43262 5.42773 16.0742 9.83398 23.7539 9.83398s18.3213 -4.40625 23.7539 -9.83398l47.5088 -47.5059c5.42188 -5.43555 9.82129 -16.0771 9.82129 -23.7539 +s-4.39941 -18.3184 -9.82129 -23.7529l-47.8057 -47.8975l80.3105 -80.417c5.12305 -5.13672 9.28125 -15.1934 9.28125 -22.4482c0 -7.30469 -4.20703 -17.4111 -9.39062 -22.5576zM219.562 250.567l73.8252 73.8223l-68.918 68.8994l-73.8096 -73.8066zM457.305 160.461 +l-68.9023 68.916l-73.8242 -73.8232l68.918 -68.8994z" /> +d="M305.449 -14.5898c7.3916 -7.29785 6.18848 -20.0967 -3 -25.0039c-77.7129 -41.8027 -176.726 -29.9102 -242.344 35.708c-65.6016 65.6035 -77.5098 164.523 -35.6914 242.332c4.89062 9.09473 17.6895 10.2979 25.0029 3l116.812 -116.813l27.3945 27.3945 +c-0.6875 2.60938 -1.59375 5.00098 -1.59375 7.81348c0 17.666 14.3379 32.0039 32.0039 32.0039s32.0039 -14.3379 32.0039 -32.0039s-14.3379 -32.0039 -32.0039 -32.0039c-2.79785 0 -5.2041 0.890625 -7.79785 1.59375l-27.4102 -27.4102zM511.976 144.933 +c0.0136719 -0.248047 0.0253906 -0.650391 0.0253906 -0.899414c0 -8.84668 -7.18066 -16.0615 -16.0273 -16.1025h-32.1133c-8.27148 0.0244141 -15.3916 6.74512 -15.8926 15.002c-7.50098 129.519 -111.515 234.533 -240.937 241.534 +c-8.28125 0.441406 -15.0029 7.5293 -15.0029 15.8223c0 0.0234375 0 0.0625 0.000976562 0.0859375v31.5986c0.0361328 8.84766 7.24609 16.0273 16.0938 16.0273c0.250977 0 0.657227 -0.0107422 0.908203 -0.0253906c163.224 -8.59473 294.443 -139.816 302.944 -303.043 +zM415.964 145.229c0.0195312 -0.299805 0.0361328 -0.788086 0.0361328 -1.08887c0 -8.91309 -7.23438 -16.1758 -16.1475 -16.21h-32.208c-8.08594 0.0585938 -15.2061 6.64648 -15.8926 14.7051c-6.90625 77.0107 -68.1172 138.91 -144.924 145.224 +c-8.16602 0.585938 -14.7959 7.70605 -14.7988 15.8926v32.1143v0.00390625c0 8.90625 7.22754 16.1338 16.1338 16.1338c0.322266 0 0.84375 -0.0185547 1.16504 -0.0419922c110.123 -8.50098 198.229 -96.6074 206.636 -206.732z" /> +d="M319.41 128c71.4902 -3.09961 128.59 -61.5996 128.59 -133.79c0 -32.1318 -26.0781 -58.21 -58.21 -58.21h-331.58c-32.1318 0 -58.21 26.0781 -58.21 58.21c0 72.1904 57.0996 130.69 128.59 133.79l95.4102 -95.3896zM224 144c-70.6562 0 -128 57.3438 -128 128 +v110.18c0 12.2393 9.30078 25.6611 20.7598 29.96l84.7705 31.79c5.99707 2.24902 16.0645 4.07422 22.4697 4.07422s16.4727 -1.8252 22.4697 -4.07422l84.7705 -31.75c11.459 -4.29883 20.7598 -17.7217 20.7598 -29.9609v-0.0390625v-110.18 +c0 -70.6562 -57.3438 -128 -128 -128zM184 376.33v-16.6602c0 -2.75977 2.24023 -5 5 -5h21.6699v-21.6699c0 -2.75977 2.24023 -5 5 -5h16.6602c2.75977 0 5 2.24023 5 5v21.6699h21.6699c2.75977 0 5 2.24023 5 5v16.6602c0 2.75977 -2.24023 5 -5 5h-21.6699v21.6699 +c0 2.75977 -2.24023 5 -5 5h-16.6602c-2.75977 0 -5 -2.24023 -5 -5v-21.6699h-21.6699c-2.75977 0 -5 -2.24023 -5 -5zM144 288v-16c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80v16h-160z" /> @@ -4645,5 +4672,29 @@ c2.57324 2.60352 7.63379 4.71777 11.2949 4.71777s8.72168 -2.11426 11.2949 -4.717 d="M496 320c79.4883 0 144 -64.5117 144 -144s-64.5117 -144 -144 -144h-352c-79.4844 0.00390625 -143.993 64.5156 -143.993 144c0 79.4883 64.5117 144 144 144s144 -64.5117 144 -144c0 -24.1113 -10.8711 -59.9512 -24.2666 -80h112.52 c-13.3955 20.0488 -24.2666 55.8887 -24.2666 80c0 79.4883 64.5117 144 144 144h0.00683594zM64 176c0 -44.1602 35.8398 -80 80 -80s80 35.8398 80 80s-35.8398 80 -80 80s-80 -35.8398 -80 -80zM496 96c44.1602 0 80 35.8398 80 80s-35.8398 80 -80 80 s-80 -35.8398 -80 -80s35.8398 -80 80 -80z" /> + + + + + + diff --git a/base/vendor/components/font-awesome/webfonts/fa-solid-900.ttf b/base/vendor/components/font-awesome/webfonts/fa-solid-900.ttf index c6c3dd4d40e6935dbda5f4fc671956c41b768a09..9dd8c7fd781711897b57043c79015cecb8e810ad 100644 GIT binary patch delta 11514 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

br869-gH6>h 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 Zl5CMML-E1d80TO!<^KV8D^ZsK004G{;*tOW delta 97720 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%0DUkVRVU$rG8Q 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

_ZUKmAWoX*-|Zw1??L4>IUe(RZT;>Bk_j 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 Us_rf<`hN8uMrLIs2ndM(0UlSfz5oCK literal 75440 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 DKZR3$ diff --git a/base/vendor/composer/ClassLoader.php b/base/vendor/composer/ClassLoader.php index dc02dfb1..fce8549f 100644 --- a/base/vendor/composer/ClassLoader.php +++ b/base/vendor/composer/ClassLoader.php @@ -279,7 +279,7 @@ public function isClassMapAuthoritative() */ public function setApcuPrefix($apcuPrefix) { - $this->apcuPrefix = function_exists('apcu_fetch') && ini_get('apc.enabled') ? $apcuPrefix : null; + $this->apcuPrefix = function_exists('apcu_fetch') && filter_var(ini_get('apc.enabled'), FILTER_VALIDATE_BOOLEAN) ? $apcuPrefix : null; } /** @@ -377,7 +377,7 @@ private function findFileWithExtension($class, $ext) $subPath = $class; while (false !== $lastPos = strrpos($subPath, '\\')) { $subPath = substr($subPath, 0, $lastPos); - $search = $subPath.'\\'; + $search = $subPath . '\\'; if (isset($this->prefixDirsPsr4[$search])) { $pathEnd = DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $lastPos + 1); foreach ($this->prefixDirsPsr4[$search] as $dir) { diff --git a/base/vendor/composer/autoload_files.php b/base/vendor/composer/autoload_files.php index 42020304..10620958 100644 --- a/base/vendor/composer/autoload_files.php +++ b/base/vendor/composer/autoload_files.php @@ -6,5 +6,9 @@ $baseDir = dirname($vendorDir); return array( + '7b11c4dc42b3b3023073cb14e519683c' => $vendorDir . '/ralouphie/getallheaders/src/getallheaders.php', + 'c964ee0ededf28c96ebd9db5099ef910' => $vendorDir . '/guzzlehttp/promises/src/functions_include.php', + 'a0edc8309cc5e1d60e3047b5df6b7052' => $vendorDir . '/guzzlehttp/psr7/src/functions_include.php', '253c157292f75eb38082b5acb06f3f01' => $vendorDir . '/nikic/fast-route/src/functions.php', + '37a3dc5111fe8f707ab4c132ef1dbc62' => $vendorDir . '/guzzlehttp/guzzle/src/functions_include.php', ); diff --git a/base/vendor/composer/autoload_psr4.php b/base/vendor/composer/autoload_psr4.php index a777a33f..8f29b972 100644 --- a/base/vendor/composer/autoload_psr4.php +++ b/base/vendor/composer/autoload_psr4.php @@ -14,7 +14,9 @@ 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-factory/src', $vendorDir . '/psr/http-message/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'PHPMailer\\PHPMailer\\' => array($vendorDir . '/phpmailer/phpmailer/src'), - 'Interop\\Container\\' => array($vendorDir . '/container-interop/container-interop/src/Interop/Container'), + 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), + 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), + 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 'Firebase\\JWT\\' => array($vendorDir . '/firebase/php-jwt/src'), 'FastRoute\\' => array($vendorDir . '/nikic/fast-route/src'), ); diff --git a/base/vendor/composer/autoload_static.php b/base/vendor/composer/autoload_static.php index a6425846..46178e89 100644 --- a/base/vendor/composer/autoload_static.php +++ b/base/vendor/composer/autoload_static.php @@ -7,7 +7,11 @@ class ComposerStaticInit1960b5e1094b59438bae05e560dca0df { public static $files = array ( + '7b11c4dc42b3b3023073cb14e519683c' => __DIR__ . '/..' . '/ralouphie/getallheaders/src/getallheaders.php', + 'c964ee0ededf28c96ebd9db5099ef910' => __DIR__ . '/..' . '/guzzlehttp/promises/src/functions_include.php', + 'a0edc8309cc5e1d60e3047b5df6b7052' => __DIR__ . '/..' . '/guzzlehttp/psr7/src/functions_include.php', '253c157292f75eb38082b5acb06f3f01' => __DIR__ . '/..' . '/nikic/fast-route/src/functions.php', + '37a3dc5111fe8f707ab4c132ef1dbc62' => __DIR__ . '/..' . '/guzzlehttp/guzzle/src/functions_include.php', ); public static $prefixLengthsPsr4 = array ( @@ -28,9 +32,11 @@ class ComposerStaticInit1960b5e1094b59438bae05e560dca0df 'Psr\\Container\\' => 14, 'PHPMailer\\PHPMailer\\' => 20, ), - 'I' => + 'G' => array ( - 'Interop\\Container\\' => 18, + 'GuzzleHttp\\Psr7\\' => 16, + 'GuzzleHttp\\Promise\\' => 19, + 'GuzzleHttp\\' => 11, ), 'F' => array ( @@ -76,9 +82,17 @@ class ComposerStaticInit1960b5e1094b59438bae05e560dca0df array ( 0 => __DIR__ . '/..' . '/phpmailer/phpmailer/src', ), - 'Interop\\Container\\' => + 'GuzzleHttp\\Psr7\\' => array ( - 0 => __DIR__ . '/..' . '/container-interop/container-interop/src/Interop/Container', + 0 => __DIR__ . '/..' . '/guzzlehttp/psr7/src', + ), + 'GuzzleHttp\\Promise\\' => + array ( + 0 => __DIR__ . '/..' . '/guzzlehttp/promises/src', + ), + 'GuzzleHttp\\' => + array ( + 0 => __DIR__ . '/..' . '/guzzlehttp/guzzle/src', ), 'Firebase\\JWT\\' => array ( diff --git a/base/vendor/composer/installed.json b/base/vendor/composer/installed.json index 77f3ff14..7d20ee34 100644 --- a/base/vendor/composer/installed.json +++ b/base/vendor/composer/installed.json @@ -1,20 +1,20 @@ [ { "name": "components/font-awesome", - "version": "5.9.0", - "version_normalized": "5.9.0.0", + "version": "5.12.1", + "version_normalized": "5.12.1.0", "source": { "type": "git", "url": "https://github.com/components/font-awesome.git", - "reference": "1be57c473b964c8130f2dbd9edc4f64db5394114" + "reference": "f033e952d0e20684443c0466045deae61fd4e733" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/components/font-awesome/zipball/1be57c473b964c8130f2dbd9edc4f64db5394114", - "reference": "1be57c473b964c8130f2dbd9edc4f64db5394114", + "url": "https://api.github.com/repos/components/font-awesome/zipball/f033e952d0e20684443c0466045deae61fd4e733", + "reference": "f033e952d0e20684443c0466045deae61fd4e733", "shasum": "" }, - "time": "2019-06-07T02:02:10+00:00", + "time": "2020-02-05T15:33:46+00:00", "type": "component", "extra": { "component": { @@ -37,85 +37,247 @@ "description": "Font Awesome, the iconic SVG, font, and CSS framework." }, { - "name": "container-interop/container-interop", - "version": "1.2.0", - "version_normalized": "1.2.0.0", + "name": "firebase/php-jwt", + "version": "v5.1.0", + "version_normalized": "5.1.0.0", "source": { "type": "git", - "url": "https://github.com/container-interop/container-interop.git", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8" + "url": "https://github.com/firebase/php-jwt.git", + "reference": "4566062c68f76f43d44f1643f4970fe89757d4c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8", - "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8", + "url": "https://api.github.com/repos/firebase/php-jwt/zipball/4566062c68f76f43d44f1643f4970fe89757d4c6", + "reference": "4566062c68f76f43d44f1643f4970fe89757d4c6", "shasum": "" }, "require": { - "psr/container": "^1.0" + "php": ">=5.3.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.8|^5" }, - "time": "2017-02-14T19:40:03+00:00", + "time": "2020-02-24T23:15:03+00:00", "type": "library", "installation-source": "dist", "autoload": { "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" + "Firebase\\JWT\\": "src" } }, "notification-url": "https://packagist.org/downloads/", + "license": [ + "BSD-3-Clause" + ], + "authors": [ + { + "name": "Neuman Vong", + "email": "neuman+pear@twilio.com", + "role": "Developer" + }, + { + "name": "Anant Narayanan", + "email": "anant@php.net", + "role": "Developer" + } + ], + "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", + "homepage": "https://github.com/firebase/php-jwt" + }, + { + "name": "guzzlehttp/guzzle", + "version": "6.5.2", + "version_normalized": "6.5.2.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/43ece0e75098b7ecd8d13918293029e555a50f82", + "reference": "43ece0e75098b7ecd8d13918293029e555a50f82", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1", + "php": ">=5.5" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "time": "2019-12-23T11:57:10+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", "license": [ "MIT" ], - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "homepage": "https://github.com/container-interop/container-interop" + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "rest", + "web service" + ] }, { - "name": "firebase/php-jwt", - "version": "v5.0.0", - "version_normalized": "5.0.0.0", + "name": "guzzlehttp/promises", + "version": "v1.3.1", + "version_normalized": "1.3.1.0", "source": { "type": "git", - "url": "https://github.com/firebase/php-jwt.git", - "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e" + "url": "https://github.com/guzzle/promises.git", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/firebase/php-jwt/zipball/9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", - "reference": "9984a4d3a32ae7673d6971ea00bae9d0a1abba0e", + "url": "https://api.github.com/repos/guzzle/promises/zipball/a59da6cf61d80060647ff4d3eb2c03a2bc694646", + "reference": "a59da6cf61d80060647ff4d3eb2c03a2bc694646", "shasum": "" }, "require": { - "php": ">=5.3.0" + "php": ">=5.5.0" }, "require-dev": { - "phpunit/phpunit": " 4.8.35" + "phpunit/phpunit": "^4.0" }, - "time": "2017-06-27T22:17:23+00:00", + "time": "2016-12-20T10:07:11+00:00", "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, "installation-source": "dist", "autoload": { "psr-4": { - "Firebase\\JWT\\": "src" + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ] + }, + { + "name": "guzzlehttp/psr7", + "version": "1.6.1", + "version_normalized": "1.6.1.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/239400de7a173fe9901b9ac7c06497751f00727a", + "reference": "239400de7a173fe9901b9ac7c06497751f00727a", + "shasum": "" + }, + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "ext-zlib": "*", + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "time": "2019-07-01T23:21:34+00:00", + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" } }, + "installation-source": "dist", + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { - "name": "Neuman Vong", - "role": "Developer", - "email": "neuman+pear@twilio.com" + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" }, { - "name": "Anant Narayanan", - "role": "Developer", - "email": "anant@php.net" + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" } ], - "description": "A simple library to encode and decode JSON Web Tokens (JWT) in PHP. Should conform to the current spec.", - "homepage": "https://github.com/firebase/php-jwt" + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ] }, { "name": "nikic/fast-route", @@ -167,17 +329,17 @@ }, { "name": "phpmailer/phpmailer", - "version": "v6.0.7", - "version_normalized": "6.0.7.0", + "version": "v6.1.4", + "version_normalized": "6.1.4.0", "source": { "type": "git", "url": "https://github.com/PHPMailer/PHPMailer.git", - "reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59" + "reference": "c5e61d0729507049cec9673aa1a679f9adefd683" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/0c41a36d4508d470e376498c1c0c527aa36a2d59", - "reference": "0c41a36d4508d470e376498c1c0c527aa36a2d59", + "url": "https://api.github.com/repos/PHPMailer/PHPMailer/zipball/c5e61d0729507049cec9673aa1a679f9adefd683", + "reference": "c5e61d0729507049cec9673aa1a679f9adefd683", "shasum": "" }, "require": { @@ -186,13 +348,9 @@ "php": ">=5.5.0" }, "require-dev": { - "doctrine/annotations": "1.2.*", + "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.*" + "phpunit/phpunit": "^4.8 || ^5.7" }, "suggest": { "ext-mbstring": "Needed to send email in multibyte encoding charset", @@ -202,7 +360,7 @@ "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": "2019-02-01T15:04:28+00:00", + "time": "2019-12-10T11:17:38+00:00", "type": "library", "installation-source": "dist", "autoload": { @@ -212,17 +370,17 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "LGPL-2.1" + "LGPL-2.1-only" ], "authors": [ - { - "name": "Jim Jagielski", - "email": "jimjag@gmail.com" - }, { "name": "Marcus Bointon", "email": "phpmailer@synchromedia.co.uk" }, + { + "name": "Jim Jagielski", + "email": "jimjag@gmail.com" + }, { "name": "Andy Prevost", "email": "codeworxtech@users.sourceforge.net" @@ -235,31 +393,31 @@ }, { "name": "pimple/pimple", - "version": "v3.2.3", - "version_normalized": "3.2.3.0", + "version": "v3.3.0", + "version_normalized": "3.3.0.0", "source": { "type": "git", "url": "https://github.com/silexphp/Pimple.git", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32" + "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/silexphp/Pimple/zipball/9e403941ef9d65d20cba7d54e29fe906db42cf32", - "reference": "9e403941ef9d65d20cba7d54e29fe906db42cf32", + "url": "https://api.github.com/repos/silexphp/Pimple/zipball/e55d12f9d6a0e7f9c85992b73df1267f46279930", + "reference": "e55d12f9d6a0e7f9c85992b73df1267f46279930", "shasum": "" }, "require": { - "php": ">=5.3.0", + "php": "^7.2.5", "psr/container": "^1.0" }, "require-dev": { - "symfony/phpunit-bridge": "^3.2" + "symfony/phpunit-bridge": "^3.4|^4.4|^5.0" }, - "time": "2018-01-21T07:42:36+00:00", + "time": "2020-03-03T09:12:48+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "3.2.x-dev" + "dev-master": "3.3.x-dev" } }, "installation-source": "dist", @@ -279,7 +437,7 @@ } ], "description": "Pimple, a simple Dependency Injection Container", - "homepage": "http://pimple.sensiolabs.org", + "homepage": "https://pimple.symfony.com", "keywords": [ "container", "dependency injection" @@ -554,27 +712,27 @@ }, { "name": "psr/log", - "version": "1.1.0", - "version_normalized": "1.1.0.0", + "version": "1.1.2", + "version_normalized": "1.1.2.0", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd" + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", - "reference": "6c001f1daafa3a3ac1d8ff69ee4db8e799a654dd", + "url": "https://api.github.com/repos/php-fig/log/zipball/446d54b4cb6bf489fc9d75f55843658e6f25d801", + "reference": "446d54b4cb6bf489fc9d75f55843658e6f25d801", "shasum": "" }, "require": { "php": ">=5.3.0" }, - "time": "2018-11-20T15:27:04+00:00", + "time": "2019-11-01T11:05:21+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0.x-dev" + "dev-master": "1.1.x-dev" } }, "installation-source": "dist", @@ -601,23 +759,64 @@ "psr-3" ] }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "version_normalized": "3.0.3.0", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "time": "2019-03-08T08:55:37+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders." + }, { "name": "slim/slim", - "version": "3.12.2", - "version_normalized": "3.12.2.0", + "version": "3.12.3", + "version_normalized": "3.12.3.0", "source": { "type": "git", "url": "https://github.com/slimphp/Slim.git", - "reference": "200c6143f15baa477601879b64ab2326847aac0b" + "reference": "1c9318a84ffb890900901136d620b4f03a59da38" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/slimphp/Slim/zipball/200c6143f15baa477601879b64ab2326847aac0b", - "reference": "200c6143f15baa477601879b64ab2326847aac0b", + "url": "https://api.github.com/repos/slimphp/Slim/zipball/1c9318a84ffb890900901136d620b4f03a59da38", + "reference": "1c9318a84ffb890900901136d620b4f03a59da38", "shasum": "" }, "require": { - "container-interop/container-interop": "^1.2", "ext-json": "*", "ext-libxml": "*", "ext-simplexml": "*", @@ -634,7 +833,7 @@ "phpunit/phpunit": "^4.0", "squizlabs/php_codesniffer": "^2.5" }, - "time": "2019-08-20T18:46:05+00:00", + "time": "2019-11-28T17:40:33+00:00", "type": "library", "installation-source": "dist", "autoload": { diff --git a/base/vendor/container-interop/container-interop/.gitignore b/base/vendor/container-interop/container-interop/.gitignore deleted file mode 100644 index b2395aa0..00000000 --- a/base/vendor/container-interop/container-interop/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -composer.lock -composer.phar -/vendor/ diff --git a/base/vendor/container-interop/container-interop/LICENSE b/base/vendor/container-interop/container-interop/LICENSE deleted file mode 100644 index 7671d902..00000000 --- a/base/vendor/container-interop/container-interop/LICENSE +++ /dev/null @@ -1,20 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 container-interop - -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/base/vendor/container-interop/container-interop/README.md b/base/vendor/container-interop/container-interop/README.md deleted file mode 100644 index cdd7a44c..00000000 --- a/base/vendor/container-interop/container-interop/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Container Interoperability - -[![Latest Stable Version](https://poser.pugx.org/container-interop/container-interop/v/stable.png)](https://packagist.org/packages/container-interop/container-interop) -[![Total Downloads](https://poser.pugx.org/container-interop/container-interop/downloads.svg)](https://packagist.org/packages/container-interop/container-interop) - -## Deprecation warning! - -Starting Feb. 13th 2017, container-interop is officially deprecated in favor of [PSR-11](https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-11-container.md). -Container-interop has been the test-bed of PSR-11. From v1.2, container-interop directly extends PSR-11 interfaces. -Therefore, all containers implementing container-interop are now *de-facto* compatible with PSR-11. - -- Projects implementing container-interop interfaces are encouraged to directly implement PSR-11 interfaces instead. -- Projects consuming container-interop interfaces are very strongly encouraged to directly type-hint on PSR-11 interfaces, in order to be compatible with PSR-11 containers that are not compatible with container-interop. - -Regarding the delegate lookup feature, that is present in container-interop and not in PSR-11, the feature is actually a design pattern. It is therefore not deprecated. Documentation regarding this design pattern will be migrated from this repository into a separate website in the future. - -## About - -*container-interop* tries to identify and standardize features in *container* objects (service locators, -dependency injection containers, etc.) to achieve interoperability. - -Through discussions and trials, we try to create a standard, made of common interfaces but also recommendations. - -If PHP projects that provide container implementations begin to adopt these common standards, then PHP -applications and projects that use containers can depend on the common interfaces instead of specific -implementations. This facilitates a high-level of interoperability and flexibility that allows users to consume -*any* container implementation that can be adapted to these interfaces. - -The work done in this project is not officially endorsed by the [PHP-FIG](http://www.php-fig.org/), but it is being -worked on by members of PHP-FIG and other good developers. We adhere to the spirit and ideals of PHP-FIG, and hope -this project will pave the way for one or more future PSRs. - - -## Installation - -You can install this package through Composer: - -```json -composer require container-interop/container-interop -``` - -The packages adheres to the [SemVer](http://semver.org/) specification, and there will be full backward compatibility -between minor versions. - -## Standards - -### Available - -- [`ContainerInterface`](src/Interop/Container/ContainerInterface.php). -[Description](docs/ContainerInterface.md) [Meta Document](docs/ContainerInterface-meta.md). -Describes the interface of a container that exposes methods to read its entries. -- [*Delegate lookup feature*](docs/Delegate-lookup.md). -[Meta Document](docs/Delegate-lookup-meta.md). -Describes the ability for a container to delegate the lookup of its dependencies to a third-party container. This -feature lets several containers work together in a single application. - -### Proposed - -View open [request for comments](https://github.com/container-interop/container-interop/labels/RFC) - -## Compatible projects - -### Projects implementing `ContainerInterface` - -- [Acclimate](https://github.com/jeremeamia/acclimate-container): Adapters for - Aura.Di, Laravel, Nette DI, Pimple, Symfony DI, ZF2 Service manager, ZF2 - Dependency injection and any container using `ArrayAccess` -- [Aura.Di](https://github.com/auraphp/Aura.Di) -- [auryn-container-interop](https://github.com/elazar/auryn-container-interop) -- [Burlap](https://github.com/codeeverything/burlap) -- [Chernozem](https://github.com/pyrsmk/Chernozem) -- [Data Manager](https://github.com/chrismichaels84/data-manager) -- [Disco](https://github.com/bitexpert/disco) -- [InDI](https://github.com/idealogica/indi) -- [League/Container](http://container.thephpleague.com/) -- [Mouf](http://mouf-php.com) -- [Njasm Container](https://github.com/njasm/container) -- [PHP-DI](http://php-di.org) -- [Picotainer](https://github.com/thecodingmachine/picotainer) -- [PimpleInterop](https://github.com/moufmouf/pimple-interop) -- [Pimple3-ContainerInterop](https://github.com/Sam-Burns/pimple3-containerinterop) (using Pimple v3) -- [SitePoint Container](https://github.com/sitepoint/Container) -- [Thruster Container](https://github.com/ThrusterIO/container) (PHP7 only) -- [Ultra-Lite Container](https://github.com/ultra-lite/container) -- [Unbox](https://github.com/mindplay-dk/unbox) -- [XStatic](https://github.com/jeremeamia/xstatic) -- [Zend\ServiceManager](https://github.com/zendframework/zend-servicemanager) -- [Zit](https://github.com/inxilpro/Zit) - -### Projects implementing the *delegate lookup* feature - -- [Aura.Di](https://github.com/auraphp/Aura.Di) -- [Burlap](https://github.com/codeeverything/burlap) -- [Chernozem](https://github.com/pyrsmk/Chernozem) -- [InDI](https://github.com/idealogica/indi) -- [League/Container](http://container.thephpleague.com/) -- [Mouf](http://mouf-php.com) -- [Picotainer](https://github.com/thecodingmachine/picotainer) -- [PHP-DI](http://php-di.org) -- [PimpleInterop](https://github.com/moufmouf/pimple-interop) -- [Ultra-Lite Container](https://github.com/ultra-lite/container) - -### Middlewares implementing `ContainerInterface` - -- [Alias-Container](https://github.com/thecodingmachine/alias-container): add - aliases support to any container -- [Prefixer-Container](https://github.com/thecodingmachine/prefixer-container): - dynamically prefix identifiers -- [Lazy-Container](https://github.com/snapshotpl/lazy-container): lazy services - -### Projects using `ContainerInterface` - -The list below contains only a sample of all the projects consuming `ContainerInterface`. For a more complete list have a look [here](http://packanalyst.com/class?q=Interop%5CContainer%5CContainerInterface). - -| | Downloads | -| --- | --- | -| [Adroit](https://github.com/bitexpert/adroit) | ![](https://img.shields.io/packagist/dt/bitexpert/adroit.svg) | -| [Behat](https://github.com/Behat/Behat/pull/974) | ![](https://img.shields.io/packagist/dt/behat/behat.svg) | -| [blast-facades](https://github.com/phpthinktank/blast-facades): Minimize complexity and represent dependencies as facades. | ![](https://img.shields.io/packagist/dt/blast/facades.svg) | -| [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di): an extension to [Silex](http://silex.sensiolabs.org/) that adds support for any *container-interop* compatible container | ![](https://img.shields.io/packagist/dt/mouf/interop.silex.di.svg) | -| [mindplay/walkway](https://github.com/mindplay-dk/walkway): a modular request router | ![](https://img.shields.io/packagist/dt/mindplay/walkway.svg) | -| [mindplay/middleman](https://github.com/mindplay-dk/middleman): minimalist PSR-7 middleware dispatcher | ![](https://img.shields.io/packagist/dt/mindplay/middleman.svg) | -| [PHP-DI/Invoker](https://github.com/PHP-DI/Invoker): extensible and configurable invoker/dispatcher | ![](https://img.shields.io/packagist/dt/php-di/invoker.svg) | -| [Prophiler](https://github.com/fabfuel/prophiler) | ![](https://img.shields.io/packagist/dt/fabfuel/prophiler.svg) | -| [Silly](https://github.com/mnapoli/silly): CLI micro-framework | ![](https://img.shields.io/packagist/dt/mnapoli/silly.svg) | -| [Slim v3](https://github.com/slimphp/Slim) | ![](https://img.shields.io/packagist/dt/slim/slim.svg) | -| [Splash](http://mouf-php.com/packages/mouf/mvc.splash-common/version/8.0-dev/README.md) | ![](https://img.shields.io/packagist/dt/mouf/mvc.splash-common.svg) | -| [Woohoo Labs. Harmony](https://github.com/woohoolabs/harmony): a flexible micro-framework | ![](https://img.shields.io/packagist/dt/woohoolabs/harmony.svg) | -| [zend-expressive](https://github.com/zendframework/zend-expressive) | ![](https://img.shields.io/packagist/dt/zendframework/zend-expressive.svg) | - - -## Workflow - -Everyone is welcome to join and contribute. - -The general workflow looks like this: - -1. Someone opens a discussion (GitHub issue) to suggest an interface -1. Feedback is gathered -1. The interface is added to a development branch -1. We release alpha versions so that the interface can be experimented with -1. Discussions and edits ensue until the interface is deemed stable by a general consensus -1. A new minor version of the package is released - -We try to not break BC by creating new interfaces instead of editing existing ones. - -While we currently work on interfaces, we are open to anything that might help towards interoperability, may that -be code, best practices, etc. diff --git a/base/vendor/container-interop/container-interop/composer.json b/base/vendor/container-interop/container-interop/composer.json deleted file mode 100644 index 855f7667..00000000 --- a/base/vendor/container-interop/container-interop/composer.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "container-interop/container-interop", - "type": "library", - "description": "Promoting the interoperability of container objects (DIC, SL, etc.)", - "homepage": "https://github.com/container-interop/container-interop", - "license": "MIT", - "autoload": { - "psr-4": { - "Interop\\Container\\": "src/Interop/Container/" - } - }, - "require": { - "psr/container": "^1.0" - } -} diff --git a/base/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md b/base/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md deleted file mode 100644 index 59f3d559..00000000 --- a/base/vendor/container-interop/container-interop/docs/ContainerInterface-meta.md +++ /dev/null @@ -1,114 +0,0 @@ -# ContainerInterface Meta Document - -## Introduction - -This document describes the process and discussions that lead to the `ContainerInterface`. -Its goal is to explain the reasons behind each decision. - -## Goal - -The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a -container to obtain objects and parameters. - -By standardizing such a behavior, frameworks and libraries using the `ContainerInterface` -could work with any compatible container. -That would allow end users to choose their own container based on their own preferences. - -It is important to distinguish the two usages of a container: - -- configuring entries -- fetching entries - -Most of the time, those two sides are not used by the same party. -While it is often end users who tend to configure entries, it is generally the framework that fetch -entries to build the application. - -This is why this interface focuses only on how entries can be fetched from a container. - -## Interface name - -The interface name has been thoroughly discussed and was decided by a vote. - -The list of options considered with their respective votes are: - -- `ContainerInterface`: +8 -- `ProviderInterface`: +2 -- `LocatorInterface`: 0 -- `ReadableContainerInterface`: -5 -- `ServiceLocatorInterface`: -6 -- `ObjectFactory`: -6 -- `ObjectStore`: -8 -- `ConsumerInterface`: -9 - -[Full results of the vote](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) - -The complete discussion can be read in [the issue #1](https://github.com/container-interop/container-interop/issues/1). - -## Interface methods - -The choice of which methods the interface would contain was made after a statistical analysis of existing containers. -The results of this analysis are available [in this document](https://gist.github.com/mnapoli/6159681). - -The summary of the analysis showed that: - -- all containers offer a method to get an entry by its id -- a large majority name such method `get()` -- for all containers, the `get()` method has 1 mandatory parameter of type string -- some containers have an optional additional argument for `get()`, but it doesn't have the same purpose between containers -- a large majority of the containers offer a method to test if it can return an entry by its id -- a majority name such method `has()` -- for all containers offering `has()`, the method has exactly 1 parameter of type string -- a large majority of the containers throw an exception rather than returning null when an entry is not found in `get()` -- a large majority of the containers don't implement `ArrayAccess` - -The question of whether to include methods to define entries has been discussed in -[issue #1](https://github.com/container-interop/container-interop/issues/1). -It has been judged that such methods do not belong in the interface described here because it is out of its scope -(see the "Goal" section). - -As a result, the `ContainerInterface` contains two methods: - -- `get()`, returning anything, with one mandatory string parameter. Should throw an exception if the entry is not found. -- `has()`, returning a boolean, with one mandatory string parameter. - -### Number of parameters in `get()` method - -While `ContainerInterface` only defines one mandatory parameter in `get()`, it is not incompatible with -existing containers that have additional optional parameters. PHP allows an implementation to offer more parameters -as long as they are optional, because the implementation *does* satisfy the interface. - -This issue has been discussed in [issue #6](https://github.com/container-interop/container-interop/issues/6). - -### Type of the `$id` parameter - -The type of the `$id` parameter in `get()` and `has()` has been discussed in -[issue #6](https://github.com/container-interop/container-interop/issues/6). -While `string` is used in all the containers that were analyzed, it was suggested that allowing -anything (such as objects) could allow containers to offer a more advanced query API. - -An example given was to use the container as an object builder. The `$id` parameter would then be an -object that would describe how to create an instance. - -The conclusion of the discussion was that this was beyond the scope of getting entries from a container without -knowing how the container provided them, and it was more fit for a factory. - -## Contributors - -Are listed here all people that contributed in the discussions or votes, by alphabetical order: - -- [Amy Stephen](https://github.com/AmyStephen) -- [David Négrier](https://github.com/moufmouf) -- [Don Gilbert](https://github.com/dongilbert) -- [Jason Judge](https://github.com/judgej) -- [Jeremy Lindblom](https://github.com/jeremeamia) -- [Marco Pivetta](https://github.com/Ocramius) -- [Matthieu Napoli](https://github.com/mnapoli) -- [Paul M. Jones](https://github.com/pmjones) -- [Stephan Hochdörfer](https://github.com/shochdoerfer) -- [Taylor Otwell](https://github.com/taylorotwell) - -## Relevant links - -- [`ContainerInterface.php`](https://github.com/container-interop/container-interop/blob/master/src/Interop/Container/ContainerInterface.php) -- [List of all issues](https://github.com/container-interop/container-interop/issues?labels=ContainerInterface&milestone=&page=1&state=closed) -- [Vote for the interface name](https://github.com/container-interop/container-interop/wiki/%231-interface-name:-Vote) diff --git a/base/vendor/container-interop/container-interop/docs/ContainerInterface.md b/base/vendor/container-interop/container-interop/docs/ContainerInterface.md deleted file mode 100644 index bda973d6..00000000 --- a/base/vendor/container-interop/container-interop/docs/ContainerInterface.md +++ /dev/null @@ -1,158 +0,0 @@ -Container interface -=================== - -This document describes a common interface for dependency injection containers. - -The goal set by `ContainerInterface` is to standardize how frameworks and libraries make use of a -container to obtain objects and parameters (called *entries* in the rest of this document). - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119][]. - -The word `implementor` in this document is to be interpreted as someone -implementing the `ContainerInterface` in a dependency injection-related library or framework. -Users of dependency injections containers (DIC) are referred to as `user`. - -[RFC 2119]: http://tools.ietf.org/html/rfc2119 - -1. Specification ------------------ - -### 1.1 Basics - -- The `Interop\Container\ContainerInterface` exposes two methods : `get` and `has`. - -- `get` takes one mandatory parameter: an entry identifier. It MUST be a string. - A call to `get` can return anything (a *mixed* value), or throws an exception if the identifier - is not known to the container. Two successive calls to `get` with the same - identifier SHOULD return the same value. However, depending on the `implementor` - design and/or `user` configuration, different values might be returned, so - `user` SHOULD NOT rely on getting the same value on 2 successive calls. - While `ContainerInterface` only defines one mandatory parameter in `get()`, implementations - MAY accept additional optional parameters. - -- `has` takes one unique parameter: an entry identifier. It MUST return `true` - if an entry identifier is known to the container and `false` if it is not. - `has($id)` returning true does not mean that `get($id)` will not throw an exception. - It does however mean that `get($id)` will not throw a `NotFoundException`. - -### 1.2 Exceptions - -Exceptions directly thrown by the container MUST implement the -[`Interop\Container\Exception\ContainerException`](../src/Interop/Container/Exception/ContainerException.php). - -A call to the `get` method with a non-existing id SHOULD throw a -[`Interop\Container\Exception\NotFoundException`](../src/Interop/Container/Exception/NotFoundException.php). - -### 1.3 Additional features - -This section describes additional features that MAY be added to a container. Containers are not -required to implement these features to respect the ContainerInterface. - -#### 1.3.1 Delegate lookup feature - -The goal of the *delegate lookup* feature is to allow several containers to share entries. -Containers implementing this feature can perform dependency lookups in other containers. - -Containers implementing this feature will offer a greater lever of interoperability -with other containers. Implementation of this feature is therefore RECOMMENDED. - -A container implementing this feature: - -- MUST implement the `ContainerInterface` -- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, - or any possible way). The delegate container MUST implement the `ContainerInterface`. - -When a container is configured to use a delegate container for dependencies: - -- Calls to the `get` method should only return an entry if the entry is part of the container. - If the entry is not part of the container, an exception should be thrown - (as requested by the `ContainerInterface`). -- Calls to the `has` method should only return `true` if the entry is part of the container. - If the entry is not part of the container, `false` should be returned. -- If the fetched entry has dependencies, **instead** of performing - the dependency lookup in the container, the lookup is performed on the *delegate container*. - -Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. - -It is however allowed for containers to provide exception cases for special entries, and a way to lookup -into the same container (or another container) instead of the delegate container. - -2. Package ----------- - -The interfaces and classes described as well as relevant exception are provided as part of the -[container-interop/container-interop](https://packagist.org/packages/container-interop/container-interop) package. - -3. `Interop\Container\ContainerInterface` ------------------------------------------ - -```php -setParentContainer($this); - } - } - ... - } -} - -``` - -**Cons:** - -Cons have been extensively discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-51721777). -Basically, forcing a setter into an interface is a bad idea. Setters are similar to constructor arguments, -and it's a bad idea to standardize a constructor: how the delegate container is configured into a container is an implementation detail. This outweights the benefits of the interface. - -### 4.4 Alternative: no exception case for delegate lookups - -Originally, the proposed wording for delegate lookup calls was: - -> Important! The lookup MUST be performed on the delegate container **only**, not on the container itself. - -This was later replaced by: - -> Important! By default, the lookup SHOULD be performed on the delegate container **only**, not on the container itself. -> -> It is however allowed for containers to provide exception cases for special entries, and a way to lookup -> into the same container (or another container) instead of the delegate container. - -Exception cases have been allowed to avoid breaking dependencies with some services that must be provided -by the container (on @njasm proposal). This was proposed here: https://github.com/container-interop/container-interop/pull/20#issuecomment-56597235 - -### 4.5 Alternative: having one of the containers act as the composite container - -In real-life scenarios, we usually have a big framework (Symfony 2, Zend Framework 2, etc...) and we want to -add another DI container to this container. Most of the time, the "big" framework will be responsible for -creating the controller's instances, using it's own DI container. Until *container-interop* is fully adopted, -the "big" framework will not be aware of the existence of a composite container that it should use instead -of its own container. - -For this real-life use cases, @mnapoli and @moufmouf proposed to extend the "big" framework's DI container -to make it act as a composite container. - -This has been discussed [here](https://github.com/container-interop/container-interop/pull/8#issuecomment-40367194) -and [here](http://mouf-php.com/container-interop-whats-next#solution4). - -This was implemented in Symfony 2 using: - -- [interop.symfony.di](https://github.com/thecodingmachine/interop.symfony.di/tree/v0.1.0) -- [framework interop](https://github.com/mnapoli/framework-interop/) - -This was implemented in Silex using: - -- [interop.silex.di](https://github.com/thecodingmachine/interop.silex.di) - -Having a container act as the composite container is not part of the delegate lookup standard because it is -simply a temporary design pattern used to make existing frameworks that do not support yet ContainerInterop -play nice with other DI containers. - - -5. Implementations ------------------- - -The following projects already implement the delegate lookup feature: - -- [Mouf](http://mouf-php.com), through the [`setDelegateLookupContainer` method](https://github.com/thecodingmachine/mouf/blob/2.0/src/Mouf/MoufManager.php#L2120) -- [PHP-DI](http://php-di.org/), through the [`$wrapperContainer` parameter of the constructor](https://github.com/mnapoli/PHP-DI/blob/master/src/DI/Container.php#L72) -- [pimple-interop](https://github.com/moufmouf/pimple-interop), through the [`$container` parameter of the constructor](https://github.com/moufmouf/pimple-interop/blob/master/src/Interop/Container/Pimple/PimpleInterop.php#L62) - -6. People ---------- - -Are listed here all people that contributed in the discussions, by alphabetical order: - -- [Alexandru Pătrănescu](https://github.com/drealecs) -- [Ben Peachey](https://github.com/potherca) -- [David Négrier](https://github.com/moufmouf) -- [Jeremy Lindblom](https://github.com/jeremeamia) -- [Marco Pivetta](https://github.com/Ocramius) -- [Matthieu Napoli](https://github.com/mnapoli) -- [Nelson J Morais](https://github.com/njasm) -- [Phil Sturgeon](https://github.com/philsturgeon) -- [Stephan Hochdörfer](https://github.com/shochdoerfer) - -7. Relevant Links ------------------ - -_**Note:** Order descending chronologically._ - -- [Pull request on the delegate lookup feature](https://github.com/container-interop/container-interop/pull/20) -- [Pull request on the interface idea](https://github.com/container-interop/container-interop/pull/8) -- [Original article exposing the delegate lookup idea along many others](http://mouf-php.com/container-interop-whats-next) - diff --git a/base/vendor/container-interop/container-interop/docs/Delegate-lookup.md b/base/vendor/container-interop/container-interop/docs/Delegate-lookup.md deleted file mode 100644 index f64a8f78..00000000 --- a/base/vendor/container-interop/container-interop/docs/Delegate-lookup.md +++ /dev/null @@ -1,60 +0,0 @@ -Delegate lookup feature -======================= - -This document describes a standard for dependency injection containers. - -The goal set by the *delegate lookup* feature is to allow several containers to share entries. -Containers implementing this feature can perform dependency lookups in other containers. - -Containers implementing this feature will offer a greater lever of interoperability -with other containers. Implementation of this feature is therefore RECOMMENDED. - -The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", -"SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be -interpreted as described in [RFC 2119][]. - -The word `implementor` in this document is to be interpreted as someone -implementing the delegate lookup feature in a dependency injection-related library or framework. -Users of dependency injections containers (DIC) are referred to as `user`. - -[RFC 2119]: http://tools.ietf.org/html/rfc2119 - -1. Vocabulary -------------- - -In a dependency injection container, the container is used to fetch entries. -Entries can have dependencies on other entries. Usually, these other entries are fetched by the container. - -The *delegate lookup* feature is the ability for a container to fetch dependencies in -another container. In the rest of the document, the word "container" will reference the container -implemented by the implementor. The word "delegate container" will reference the container we are -fetching the dependencies from. - -2. Specification ----------------- - -A container implementing the *delegate lookup* feature: - -- MUST implement the [`ContainerInterface`](ContainerInterface.md) -- MUST provide a way to register a delegate container (using a constructor parameter, or a setter, - or any possible way). The delegate container MUST implement the [`ContainerInterface`](ContainerInterface.md). - -When a container is configured to use a delegate container for dependencies: - -- Calls to the `get` method should only return an entry if the entry is part of the container. - If the entry is not part of the container, an exception should be thrown - (as requested by the [`ContainerInterface`](ContainerInterface.md)). -- Calls to the `has` method should only return `true` if the entry is part of the container. - If the entry is not part of the container, `false` should be returned. -- If the fetched entry has dependencies, **instead** of performing - the dependency lookup in the container, the lookup is performed on the *delegate container*. - -Important: By default, the dependency lookups SHOULD be performed on the delegate container **only**, not on the container itself. - -It is however allowed for containers to provide exception cases for special entries, and a way to lookup -into the same container (or another container) instead of the delegate container. - -3. Package / Interface ----------------------- - -This feature is not tied to any code, interface or package. diff --git a/base/vendor/container-interop/container-interop/docs/images/interoperating_containers.png b/base/vendor/container-interop/container-interop/docs/images/interoperating_containers.png deleted file mode 100644 index 1d3fdd0ddbea28d77c08cfb65834ec11357be5fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25738 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 lDg62tY5@ou6EsiaCMAN!E;xV!uGoVl#pK= "http://example.org", "aud" => "http://example.com", "iat" => 1356999524, @@ -36,7 +36,7 @@ $token = array( * https://tools.ietf.org/html/draft-ietf-jose-json-web-algorithms-40 * for a list of spec-compliant algorithms. */ -$jwt = JWT::encode($token, $key); +$jwt = JWT::encode($payload, $key); $decoded = JWT::decode($jwt, $key, array('HS256')); print_r($decoded); @@ -93,14 +93,14 @@ ehde/zUxo6UvS7UrBQIDAQAB -----END PUBLIC KEY----- EOD; -$token = array( +$payload = array( "iss" => "example.org", "aud" => "example.com", "iat" => 1356999524, "nbf" => 1357000000 ); -$jwt = JWT::encode($token, $privateKey, 'RS256'); +$jwt = JWT::encode($payload, $privateKey, 'RS256'); echo "Encode:\n" . print_r($jwt, true) . "\n"; $decoded = JWT::decode($jwt, $publicKey, array('RS256')); diff --git a/base/vendor/firebase/php-jwt/composer.json b/base/vendor/firebase/php-jwt/composer.json index b76ffd19..9f1a42cb 100644 --- a/base/vendor/firebase/php-jwt/composer.json +++ b/base/vendor/firebase/php-jwt/composer.json @@ -24,6 +24,6 @@ } }, "require-dev": { - "phpunit/phpunit": " 4.8.35" + "phpunit/phpunit": "^4.8|^5" } } diff --git a/base/vendor/firebase/php-jwt/src/JWT.php b/base/vendor/firebase/php-jwt/src/JWT.php index 22a67e32..af206618 100644 --- a/base/vendor/firebase/php-jwt/src/JWT.php +++ b/base/vendor/firebase/php-jwt/src/JWT.php @@ -1,6 +1,7 @@ array('openssl', 'SHA256'), 'HS256' => array('hash_hmac', 'SHA256'), - 'HS512' => array('hash_hmac', 'SHA512'), 'HS384' => array('hash_hmac', 'SHA384'), + 'HS512' => array('hash_hmac', 'SHA512'), 'RS256' => array('openssl', 'SHA256'), 'RS384' => array('openssl', 'SHA384'), 'RS512' => array('openssl', 'SHA512'), @@ -49,11 +54,11 @@ class JWT /** * Decodes a JWT string into a PHP object. * - * @param string $jwt The JWT - * @param string|array $key The key, or map of keys. - * If the algorithm used is asymmetric, this is the public key - * @param array $allowed_algs List of supported verification algorithms - * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256' + * @param string $jwt The JWT + * @param string|array|resource $key The key, or map of keys. + * If the algorithm used is asymmetric, this is the public key + * @param array $allowed_algs List of supported verification algorithms + * Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512' * * @return object The JWT's payload as a PHP object * @@ -96,6 +101,11 @@ public static function decode($jwt, $key, array $allowed_algs = array()) if (!in_array($header->alg, $allowed_algs)) { throw new UnexpectedValueException('Algorithm not allowed'); } + if ($header->alg === 'ES256') { + // OpenSSL expects an ASN.1 DER sequence for ES256 signatures + $sig = self::signatureToDER($sig); + } + if (is_array($key) || $key instanceof \ArrayAccess) { if (isset($header->kid)) { if (!isset($key[$header->kid])) { @@ -112,7 +122,7 @@ public static function decode($jwt, $key, array $allowed_algs = array()) throw new SignatureInvalidException('Signature verification failed'); } - // Check if the nbf if it is defined. This is the time that the + // Check the nbf if it is defined. This is the time that the // token can actually be used. If it's not yet that time, abort. if (isset($payload->nbf) && $payload->nbf > ($timestamp + static::$leeway)) { throw new BeforeValidException( @@ -144,7 +154,7 @@ public static function decode($jwt, $key, array $allowed_algs = array()) * @param string $key The secret key. * If the algorithm used is asymmetric, this is the private key * @param string $alg The signing algorithm. - * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256' + * Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512' * @param mixed $keyId * @param array $head An array with header elements to attach * @@ -159,7 +169,7 @@ public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $he if ($keyId !== null) { $header['kid'] = $keyId; } - if ( isset($head) && is_array($head) ) { + if (isset($head) && is_array($head)) { $header = array_merge($head, $header); } $segments = array(); @@ -179,7 +189,7 @@ public static function encode($payload, $key, $alg = 'HS256', $keyId = null, $he * @param string $msg The message to sign * @param string|resource $key The secret key * @param string $alg The signing algorithm. - * Supported algorithms are 'HS256', 'HS384', 'HS512' and 'RS256' + * Supported algorithms are 'ES256', 'HS256', 'HS384', 'HS512', 'RS256', 'RS384', and 'RS512' * * @return string An encrypted message * @@ -191,7 +201,7 @@ public static function sign($msg, $key, $alg = 'HS256') throw new DomainException('Algorithm not supported'); } list($function, $algorithm) = static::$supported_algs[$alg]; - switch($function) { + switch ($function) { case 'hash_hmac': return hash_hmac($algorithm, $msg, $key, true); case 'openssl': @@ -200,6 +210,9 @@ public static function sign($msg, $key, $alg = 'HS256') if (!$success) { throw new DomainException("OpenSSL unable to sign data"); } else { + if ($alg === 'ES256') { + $signature = self::signatureFromDER($signature, 256); + } return $signature; } } @@ -225,7 +238,7 @@ private static function verify($msg, $signature, $key, $alg) } list($function, $algorithm) = static::$supported_algs[$alg]; - switch($function) { + switch ($function) { case 'openssl': $success = openssl_verify($msg, $signature, $key, $algorithm); if ($success === 1) { @@ -282,7 +295,7 @@ public static function jsonDecode($input) $obj = json_decode($json_without_bigints); } - if (function_exists('json_last_error') && $errno = json_last_error()) { + if ($errno = json_last_error()) { static::handleJsonError($errno); } elseif ($obj === null && $input !== 'null') { throw new DomainException('Null result with non-null input'); @@ -302,7 +315,7 @@ public static function jsonDecode($input) public static function jsonEncode($input) { $json = json_encode($input); - if (function_exists('json_last_error') && $errno = json_last_error()) { + if ($errno = json_last_error()) { static::handleJsonError($errno); } elseif ($json === 'null' && $input !== null) { throw new DomainException('Null result with non-null input'); @@ -365,7 +378,7 @@ private static function handleJsonError($errno) /** * Get the number of bytes in cryptographic strings. * - * @param string + * @param string $str * * @return int */ @@ -376,4 +389,126 @@ private static function safeStrlen($str) } return strlen($str); } + + /** + * Convert an ECDSA signature to an ASN.1 DER sequence + * + * @param string $sig The ECDSA signature to convert + * @return string The encoded DER object + */ + private static function signatureToDER($sig) + { + // Separate the signature into r-value and s-value + list($r, $s) = str_split($sig, (int) (strlen($sig) / 2)); + + // Trim leading zeros + $r = ltrim($r, "\x00"); + $s = ltrim($s, "\x00"); + + // Convert r-value and s-value from unsigned big-endian integers to + // signed two's complement + if (ord($r[0]) > 0x7f) { + $r = "\x00" . $r; + } + if (ord($s[0]) > 0x7f) { + $s = "\x00" . $s; + } + + return self::encodeDER( + self::ASN1_SEQUENCE, + self::encodeDER(self::ASN1_INTEGER, $r) . + self::encodeDER(self::ASN1_INTEGER, $s) + ); + } + + /** + * Encodes a value into a DER object. + * + * @param int $type DER tag + * @param string $value the value to encode + * @return string the encoded object + */ + private static function encodeDER($type, $value) + { + $tag_header = 0; + if ($type === self::ASN1_SEQUENCE) { + $tag_header |= 0x20; + } + + // Type + $der = chr($tag_header | $type); + + // Length + $der .= chr(strlen($value)); + + return $der . $value; + } + + /** + * Encodes signature from a DER object. + * + * @param string $der binary signature in DER format + * @param int $keySize the nubmer of bits in the key + * @return string the signature + */ + private static function signatureFromDER($der, $keySize) + { + // OpenSSL returns the ECDSA signatures as a binary ASN.1 DER SEQUENCE + list($offset, $_) = self::readDER($der); + list($offset, $r) = self::readDER($der, $offset); + list($offset, $s) = self::readDER($der, $offset); + + // Convert r-value and s-value from signed two's compliment to unsigned + // big-endian integers + $r = ltrim($r, "\x00"); + $s = ltrim($s, "\x00"); + + // Pad out r and s so that they are $keySize bits long + $r = str_pad($r, $keySize / 8, "\x00", STR_PAD_LEFT); + $s = str_pad($s, $keySize / 8, "\x00", STR_PAD_LEFT); + + return $r . $s; + } + + /** + * Reads binary DER-encoded data and decodes into a single object + * + * @param string $der the binary data in DER format + * @param int $offset the offset of the data stream containing the object + * to decode + * @return array [$offset, $data] the new offset and the decoded object + */ + private static function readDER($der, $offset = 0) + { + $pos = $offset; + $size = strlen($der); + $constructed = (ord($der[$pos]) >> 5) & 0x01; + $type = ord($der[$pos++]) & 0x1f; + + // Length + $len = ord($der[$pos++]); + if ($len & 0x80) { + $n = $len & 0x1f; + $len = 0; + while ($n-- && $pos < $size) { + $len = ($len << 8) | ord($der[$pos++]); + } + } + + // Value + if ($type == self::ASN1_BIT_STRING) { + $pos++; // Skip the first contents octet (padding indicator) + $data = substr($der, $pos, $len - 1); + if (!$ignore_bit_strings) { + $pos += $len - 1; + } + } elseif (!$constructed) { + $data = substr($der, $pos, $len); + $pos += $len; + } else { + $data = null; + } + + return array($pos, $data); + } } diff --git a/base/vendor/guzzlehttp/guzzle/.php_cs b/base/vendor/guzzlehttp/guzzle/.php_cs new file mode 100644 index 00000000..2dd5036c --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/.php_cs @@ -0,0 +1,23 @@ +setRiskyAllowed(true) + ->setRules([ + '@PSR2' => true, + 'array_syntax' => ['syntax' => 'short'], + 'declare_strict_types' => false, + 'concat_space' => ['spacing'=>'one'], + 'php_unit_test_case_static_method_calls' => ['call_type' => 'self'], + 'ordered_imports' => true, + // 'phpdoc_align' => ['align'=>'vertical'], + // 'native_function_invocation' => true, + ]) + ->setFinder( + PhpCsFixer\Finder::create() + ->in(__DIR__.'/src') + ->in(__DIR__.'/tests') + ->name('*.php') + ) +; + +return $config; diff --git a/base/vendor/guzzlehttp/guzzle/CHANGELOG.md b/base/vendor/guzzlehttp/guzzle/CHANGELOG.md new file mode 100644 index 00000000..a2b61e71 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/CHANGELOG.md @@ -0,0 +1,1322 @@ +# Change Log + +## 6.5.2 - 2019-12-23 + +* idn_to_ascii() fix for old PHP versions [#2489](https://github.com/guzzle/guzzle/pull/2489) + +## 6.5.1 - 2019-12-21 + +* Better defaults for PHP installations with old ICU lib [#2454](https://github.com/guzzle/guzzle/pull/2454) +* IDN support for redirects [#2424](https://github.com/guzzle/guzzle/pull/2424) + +## 6.5.0 - 2019-12-07 + +* Improvement: Added support for reset internal queue in MockHandler. [#2143](https://github.com/guzzle/guzzle/pull/2143) +* Improvement: Added support to pass arbitrary options to `curl_multi_init`. [#2287](https://github.com/guzzle/guzzle/pull/2287) +* Fix: Gracefully handle passing `null` to the `header` option. [#2132](https://github.com/guzzle/guzzle/pull/2132) +* Fix: `RetryMiddleware` did not do exponential delay between retires due unit mismatch. [#2132](https://github.com/guzzle/guzzle/pull/2132) +* Fix: Prevent undefined offset when using array for ssl_key options. [#2348](https://github.com/guzzle/guzzle/pull/2348) +* Deprecated `ClientInterface::VERSION` + +## 6.4.1 - 2019-10-23 + +* No `guzzle.phar` was created in 6.4.0 due expired API token. This release will fix that +* Added `parent::__construct()` to `FileCookieJar` and `SessionCookieJar` + +## 6.4.0 - 2019-10-23 + +* Improvement: Improved error messages when using curl < 7.21.2 [#2108](https://github.com/guzzle/guzzle/pull/2108) +* Fix: Test if response is readable before returning a summary in `RequestException::getResponseBodySummary()` [#2081](https://github.com/guzzle/guzzle/pull/2081) +* Fix: Add support for GUZZLE_CURL_SELECT_TIMEOUT environment variable [#2161](https://github.com/guzzle/guzzle/pull/2161) +* Improvement: Added `GuzzleHttp\Exception\InvalidArgumentException` [#2163](https://github.com/guzzle/guzzle/pull/2163) +* Improvement: Added `GuzzleHttp\_current_time()` to use `hrtime()` if that function exists. [#2242](https://github.com/guzzle/guzzle/pull/2242) +* Improvement: Added curl's `appconnect_time` in `TransferStats` [#2284](https://github.com/guzzle/guzzle/pull/2284) +* Improvement: Make GuzzleException extend Throwable wherever it's available [#2273](https://github.com/guzzle/guzzle/pull/2273) +* Fix: Prevent concurrent writes to file when saving `CookieJar` [#2335](https://github.com/guzzle/guzzle/pull/2335) +* Improvement: Update `MockHandler` so we can test transfer time [#2362](https://github.com/guzzle/guzzle/pull/2362) + +## 6.3.3 - 2018-04-22 + +* Fix: Default headers when decode_content is specified + + +## 6.3.2 - 2018-03-26 + +* Fix: Release process + + +## 6.3.1 - 2018-03-26 + +* Bug fix: Parsing 0 epoch expiry times in cookies [#2014](https://github.com/guzzle/guzzle/pull/2014) +* Improvement: Better ConnectException detection [#2012](https://github.com/guzzle/guzzle/pull/2012) +* Bug fix: Malformed domain that contains a "/" [#1999](https://github.com/guzzle/guzzle/pull/1999) +* Bug fix: Undefined offset when a cookie has no first key-value pair [#1998](https://github.com/guzzle/guzzle/pull/1998) +* Improvement: Support PHPUnit 6 [#1953](https://github.com/guzzle/guzzle/pull/1953) +* Bug fix: Support empty headers [#1915](https://github.com/guzzle/guzzle/pull/1915) +* Bug fix: Ignore case during header modifications [#1916](https://github.com/guzzle/guzzle/pull/1916) + ++ Minor code cleanups, documentation fixes and clarifications. + + +## 6.3.0 - 2017-06-22 + +* Feature: force IP resolution (ipv4 or ipv6) [#1608](https://github.com/guzzle/guzzle/pull/1608), [#1659](https://github.com/guzzle/guzzle/pull/1659) +* Improvement: Don't include summary in exception message when body is empty [#1621](https://github.com/guzzle/guzzle/pull/1621) +* Improvement: Handle `on_headers` option in MockHandler [#1580](https://github.com/guzzle/guzzle/pull/1580) +* Improvement: Added SUSE Linux CA path [#1609](https://github.com/guzzle/guzzle/issues/1609) +* Improvement: Use class reference for getting the name of the class instead of using hardcoded strings [#1641](https://github.com/guzzle/guzzle/pull/1641) +* Feature: Added `read_timeout` option [#1611](https://github.com/guzzle/guzzle/pull/1611) +* Bug fix: PHP 7.x fixes [#1685](https://github.com/guzzle/guzzle/pull/1685), [#1686](https://github.com/guzzle/guzzle/pull/1686), [#1811](https://github.com/guzzle/guzzle/pull/1811) +* Deprecation: BadResponseException instantiation without a response [#1642](https://github.com/guzzle/guzzle/pull/1642) +* Feature: Added NTLM auth [#1569](https://github.com/guzzle/guzzle/pull/1569) +* Feature: Track redirect HTTP status codes [#1711](https://github.com/guzzle/guzzle/pull/1711) +* Improvement: Check handler type during construction [#1745](https://github.com/guzzle/guzzle/pull/1745) +* Improvement: Always include the Content-Length if there's a body [#1721](https://github.com/guzzle/guzzle/pull/1721) +* Feature: Added convenience method to access a cookie by name [#1318](https://github.com/guzzle/guzzle/pull/1318) +* Bug fix: Fill `CURLOPT_CAPATH` and `CURLOPT_CAINFO` properly [#1684](https://github.com/guzzle/guzzle/pull/1684) +* Improvement: Use `\GuzzleHttp\Promise\rejection_for` function instead of object init [#1827](https://github.com/guzzle/guzzle/pull/1827) + + ++ Minor code cleanups, documentation fixes and clarifications. + +## 6.2.3 - 2017-02-28 + +* Fix deprecations with guzzle/psr7 version 1.4 + +## 6.2.2 - 2016-10-08 + +* Allow to pass nullable Response to delay callable +* Only add scheme when host is present +* Fix drain case where content-length is the literal string zero +* Obfuscate in-URL credentials in exceptions + +## 6.2.1 - 2016-07-18 + +* Address HTTP_PROXY security vulnerability, CVE-2016-5385: + https://httpoxy.org/ +* Fixing timeout bug with StreamHandler: + https://github.com/guzzle/guzzle/pull/1488 +* Only read up to `Content-Length` in PHP StreamHandler to avoid timeouts when + a server does not honor `Connection: close`. +* Ignore URI fragment when sending requests. + +## 6.2.0 - 2016-03-21 + +* Feature: added `GuzzleHttp\json_encode` and `GuzzleHttp\json_decode`. + https://github.com/guzzle/guzzle/pull/1389 +* Bug fix: Fix sleep calculation when waiting for delayed requests. + https://github.com/guzzle/guzzle/pull/1324 +* Feature: More flexible history containers. + https://github.com/guzzle/guzzle/pull/1373 +* Bug fix: defer sink stream opening in StreamHandler. + https://github.com/guzzle/guzzle/pull/1377 +* Bug fix: do not attempt to escape cookie values. + https://github.com/guzzle/guzzle/pull/1406 +* Feature: report original content encoding and length on decoded responses. + https://github.com/guzzle/guzzle/pull/1409 +* Bug fix: rewind seekable request bodies before dispatching to cURL. + https://github.com/guzzle/guzzle/pull/1422 +* Bug fix: provide an empty string to `http_build_query` for HHVM workaround. + https://github.com/guzzle/guzzle/pull/1367 + +## 6.1.1 - 2015-11-22 + +* Bug fix: Proxy::wrapSync() now correctly proxies to the appropriate handler + https://github.com/guzzle/guzzle/commit/911bcbc8b434adce64e223a6d1d14e9a8f63e4e4 +* Feature: HandlerStack is now more generic. + https://github.com/guzzle/guzzle/commit/f2102941331cda544745eedd97fc8fd46e1ee33e +* Bug fix: setting verify to false in the StreamHandler now disables peer + verification. https://github.com/guzzle/guzzle/issues/1256 +* Feature: Middleware now uses an exception factory, including more error + context. https://github.com/guzzle/guzzle/pull/1282 +* Feature: better support for disabled functions. + https://github.com/guzzle/guzzle/pull/1287 +* Bug fix: fixed regression where MockHandler was not using `sink`. + https://github.com/guzzle/guzzle/pull/1292 + +## 6.1.0 - 2015-09-08 + +* Feature: Added the `on_stats` request option to provide access to transfer + statistics for requests. https://github.com/guzzle/guzzle/pull/1202 +* Feature: Added the ability to persist session cookies in CookieJars. + https://github.com/guzzle/guzzle/pull/1195 +* Feature: Some compatibility updates for Google APP Engine + https://github.com/guzzle/guzzle/pull/1216 +* Feature: Added support for NO_PROXY to prevent the use of a proxy based on + a simple set of rules. https://github.com/guzzle/guzzle/pull/1197 +* Feature: Cookies can now contain square brackets. + https://github.com/guzzle/guzzle/pull/1237 +* Bug fix: Now correctly parsing `=` inside of quotes in Cookies. + https://github.com/guzzle/guzzle/pull/1232 +* Bug fix: Cusotm cURL options now correctly override curl options of the + same name. https://github.com/guzzle/guzzle/pull/1221 +* Bug fix: Content-Type header is now added when using an explicitly provided + multipart body. https://github.com/guzzle/guzzle/pull/1218 +* Bug fix: Now ignoring Set-Cookie headers that have no name. +* Bug fix: Reason phrase is no longer cast to an int in some cases in the + cURL handler. https://github.com/guzzle/guzzle/pull/1187 +* Bug fix: Remove the Authorization header when redirecting if the Host + header changes. https://github.com/guzzle/guzzle/pull/1207 +* Bug fix: Cookie path matching fixes + https://github.com/guzzle/guzzle/issues/1129 +* Bug fix: Fixing the cURL `body_as_string` setting + https://github.com/guzzle/guzzle/pull/1201 +* Bug fix: quotes are no longer stripped when parsing cookies. + https://github.com/guzzle/guzzle/issues/1172 +* Bug fix: `form_params` and `query` now always uses the `&` separator. + https://github.com/guzzle/guzzle/pull/1163 +* Bug fix: Adding a Content-Length to PHP stream wrapper requests if not set. + https://github.com/guzzle/guzzle/pull/1189 + +## 6.0.2 - 2015-07-04 + +* Fixed a memory leak in the curl handlers in which references to callbacks + were not being removed by `curl_reset`. +* Cookies are now extracted properly before redirects. +* Cookies now allow more character ranges. +* Decoded Content-Encoding responses are now modified to correctly reflect + their state if the encoding was automatically removed by a handler. This + means that the `Content-Encoding` header may be removed an the + `Content-Length` modified to reflect the message size after removing the + encoding. +* Added a more explicit error message when trying to use `form_params` and + `multipart` in the same request. +* Several fixes for HHVM support. +* Functions are now conditionally required using an additional level of + indirection to help with global Composer installations. + +## 6.0.1 - 2015-05-27 + +* Fixed a bug with serializing the `query` request option where the `&` + separator was missing. +* Added a better error message for when `body` is provided as an array. Please + use `form_params` or `multipart` instead. +* Various doc fixes. + +## 6.0.0 - 2015-05-26 + +* See the UPGRADING.md document for more information. +* Added `multipart` and `form_params` request options. +* Added `synchronous` request option. +* Added the `on_headers` request option. +* Fixed `expect` handling. +* No longer adding default middlewares in the client ctor. These need to be + present on the provided handler in order to work. +* Requests are no longer initiated when sending async requests with the + CurlMultiHandler. This prevents unexpected recursion from requests completing + while ticking the cURL loop. +* Removed the semantics of setting `default` to `true`. This is no longer + required now that the cURL loop is not ticked for async requests. +* Added request and response logging middleware. +* No longer allowing self signed certificates when using the StreamHandler. +* Ensuring that `sink` is valid if saving to a file. +* Request exceptions now include a "handler context" which provides handler + specific contextual information. +* Added `GuzzleHttp\RequestOptions` to allow request options to be applied + using constants. +* `$maxHandles` has been removed from CurlMultiHandler. +* `MultipartPostBody` is now part of the `guzzlehttp/psr7` package. + +## 5.3.0 - 2015-05-19 + +* Mock now supports `save_to` +* Marked `AbstractRequestEvent::getTransaction()` as public. +* Fixed a bug in which multiple headers using different casing would overwrite + previous headers in the associative array. +* Added `Utils::getDefaultHandler()` +* Marked `GuzzleHttp\Client::getDefaultUserAgent` as deprecated. +* URL scheme is now always lowercased. + +## 6.0.0-beta.1 + +* Requires PHP >= 5.5 +* Updated to use PSR-7 + * Requires immutable messages, which basically means an event based system + owned by a request instance is no longer possible. + * Utilizing the [Guzzle PSR-7 package](https://github.com/guzzle/psr7). + * Removed the dependency on `guzzlehttp/streams`. These stream abstractions + are available in the `guzzlehttp/psr7` package under the `GuzzleHttp\Psr7` + namespace. +* Added middleware and handler system + * Replaced the Guzzle event and subscriber system with a middleware system. + * No longer depends on RingPHP, but rather places the HTTP handlers directly + in Guzzle, operating on PSR-7 messages. + * Retry logic is now encapsulated in `GuzzleHttp\Middleware::retry`, which + means the `guzzlehttp/retry-subscriber` is now obsolete. + * Mocking responses is now handled using `GuzzleHttp\Handler\MockHandler`. +* Asynchronous responses + * No longer supports the `future` request option to send an async request. + Instead, use one of the `*Async` methods of a client (e.g., `requestAsync`, + `getAsync`, etc.). + * Utilizing `GuzzleHttp\Promise` instead of React's promise library to avoid + recursion required by chaining and forwarding react promises. See + https://github.com/guzzle/promises + * Added `requestAsync` and `sendAsync` to send request asynchronously. + * Added magic methods for `getAsync()`, `postAsync()`, etc. to send requests + asynchronously. +* Request options + * POST and form updates + * Added the `form_fields` and `form_files` request options. + * Removed the `GuzzleHttp\Post` namespace. + * The `body` request option no longer accepts an array for POST requests. + * The `exceptions` request option has been deprecated in favor of the + `http_errors` request options. + * The `save_to` request option has been deprecated in favor of `sink` request + option. +* Clients no longer accept an array of URI template string and variables for + URI variables. You will need to expand URI templates before passing them + into a client constructor or request method. +* Client methods `get()`, `post()`, `put()`, `patch()`, `options()`, etc. are + now magic methods that will send synchronous requests. +* Replaced `Utils.php` with plain functions in `functions.php`. +* Removed `GuzzleHttp\Collection`. +* Removed `GuzzleHttp\BatchResults`. Batched pool results are now returned as + an array. +* Removed `GuzzleHttp\Query`. Query string handling is now handled using an + associative array passed into the `query` request option. The query string + is serialized using PHP's `http_build_query`. If you need more control, you + can pass the query string in as a string. +* `GuzzleHttp\QueryParser` has been replaced with the + `GuzzleHttp\Psr7\parse_query`. + +## 5.2.0 - 2015-01-27 + +* Added `AppliesHeadersInterface` to make applying headers to a request based + on the body more generic and not specific to `PostBodyInterface`. +* Reduced the number of stack frames needed to send requests. +* Nested futures are now resolved in the client rather than the RequestFsm +* Finishing state transitions is now handled in the RequestFsm rather than the + RingBridge. +* Added a guard in the Pool class to not use recursion for request retries. + +## 5.1.0 - 2014-12-19 + +* Pool class no longer uses recursion when a request is intercepted. +* The size of a Pool can now be dynamically adjusted using a callback. + See https://github.com/guzzle/guzzle/pull/943. +* Setting a request option to `null` when creating a request with a client will + ensure that the option is not set. This allows you to overwrite default + request options on a per-request basis. + See https://github.com/guzzle/guzzle/pull/937. +* Added the ability to limit which protocols are allowed for redirects by + specifying a `protocols` array in the `allow_redirects` request option. +* Nested futures due to retries are now resolved when waiting for synchronous + responses. See https://github.com/guzzle/guzzle/pull/947. +* `"0"` is now an allowed URI path. See + https://github.com/guzzle/guzzle/pull/935. +* `Query` no longer typehints on the `$query` argument in the constructor, + allowing for strings and arrays. +* Exceptions thrown in the `end` event are now correctly wrapped with Guzzle + specific exceptions if necessary. + +## 5.0.3 - 2014-11-03 + +This change updates query strings so that they are treated as un-encoded values +by default where the value represents an un-encoded value to send over the +wire. A Query object then encodes the value before sending over the wire. This +means that even value query string values (e.g., ":") are url encoded. This +makes the Query class match PHP's http_build_query function. However, if you +want to send requests over the wire using valid query string characters that do +not need to be encoded, then you can provide a string to Url::setQuery() and +pass true as the second argument to specify that the query string is a raw +string that should not be parsed or encoded (unless a call to getQuery() is +subsequently made, forcing the query-string to be converted into a Query +object). + +## 5.0.2 - 2014-10-30 + +* Added a trailing `\r\n` to multipart/form-data payloads. See + https://github.com/guzzle/guzzle/pull/871 +* Added a `GuzzleHttp\Pool::send()` convenience method to match the docs. +* Status codes are now returned as integers. See + https://github.com/guzzle/guzzle/issues/881 +* No longer overwriting an existing `application/x-www-form-urlencoded` header + when sending POST requests, allowing for customized headers. See + https://github.com/guzzle/guzzle/issues/877 +* Improved path URL serialization. + + * No longer double percent-encoding characters in the path or query string if + they are already encoded. + * Now properly encoding the supplied path to a URL object, instead of only + encoding ' ' and '?'. + * Note: This has been changed in 5.0.3 to now encode query string values by + default unless the `rawString` argument is provided when setting the query + string on a URL: Now allowing many more characters to be present in the + query string without being percent encoded. See http://tools.ietf.org/html/rfc3986#appendix-A + +## 5.0.1 - 2014-10-16 + +Bugfix release. + +* Fixed an issue where connection errors still returned response object in + error and end events event though the response is unusable. This has been + corrected so that a response is not returned in the `getResponse` method of + these events if the response did not complete. https://github.com/guzzle/guzzle/issues/867 +* Fixed an issue where transfer statistics were not being populated in the + RingBridge. https://github.com/guzzle/guzzle/issues/866 + +## 5.0.0 - 2014-10-12 + +Adding support for non-blocking responses and some minor API cleanup. + +### New Features + +* Added support for non-blocking responses based on `guzzlehttp/guzzle-ring`. +* Added a public API for creating a default HTTP adapter. +* Updated the redirect plugin to be non-blocking so that redirects are sent + concurrently. Other plugins like this can now be updated to be non-blocking. +* Added a "progress" event so that you can get upload and download progress + events. +* Added `GuzzleHttp\Pool` which implements FutureInterface and transfers + requests concurrently using a capped pool size as efficiently as possible. +* Added `hasListeners()` to EmitterInterface. +* Removed `GuzzleHttp\ClientInterface::sendAll` and marked + `GuzzleHttp\Client::sendAll` as deprecated (it's still there, just not the + recommended way). + +### Breaking changes + +The breaking changes in this release are relatively minor. The biggest thing to +look out for is that request and response objects no longer implement fluent +interfaces. + +* Removed the fluent interfaces (i.e., `return $this`) from requests, + responses, `GuzzleHttp\Collection`, `GuzzleHttp\Url`, + `GuzzleHttp\Query`, `GuzzleHttp\Post\PostBody`, and + `GuzzleHttp\Cookie\SetCookie`. This blog post provides a good outline of + why I did this: http://ocramius.github.io/blog/fluent-interfaces-are-evil/. + This also makes the Guzzle message interfaces compatible with the current + PSR-7 message proposal. +* Removed "functions.php", so that Guzzle is truly PSR-4 compliant. Except + for the HTTP request functions from function.php, these functions are now + implemented in `GuzzleHttp\Utils` using camelCase. `GuzzleHttp\json_decode` + moved to `GuzzleHttp\Utils::jsonDecode`. `GuzzleHttp\get_path` moved to + `GuzzleHttp\Utils::getPath`. `GuzzleHttp\set_path` moved to + `GuzzleHttp\Utils::setPath`. `GuzzleHttp\batch` should now be + `GuzzleHttp\Pool::batch`, which returns an `objectStorage`. Using functions.php + caused problems for many users: they aren't PSR-4 compliant, require an + explicit include, and needed an if-guard to ensure that the functions are not + declared multiple times. +* Rewrote adapter layer. + * Removing all classes from `GuzzleHttp\Adapter`, these are now + implemented as callables that are stored in `GuzzleHttp\Ring\Client`. + * Removed the concept of "parallel adapters". Sending requests serially or + concurrently is now handled using a single adapter. + * Moved `GuzzleHttp\Adapter\Transaction` to `GuzzleHttp\Transaction`. The + Transaction object now exposes the request, response, and client as public + properties. The getters and setters have been removed. +* Removed the "headers" event. This event was only useful for changing the + body a response once the headers of the response were known. You can implement + a similar behavior in a number of ways. One example might be to use a + FnStream that has access to the transaction being sent. For example, when the + first byte is written, you could check if the response headers match your + expectations, and if so, change the actual stream body that is being + written to. +* Removed the `asArray` parameter from + `GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header + value as an array, then use the newly added `getHeaderAsArray()` method of + `MessageInterface`. This change makes the Guzzle interfaces compatible with + the PSR-7 interfaces. +* `GuzzleHttp\Message\MessageFactory` no longer allows subclasses to add + custom request options using double-dispatch (this was an implementation + detail). Instead, you should now provide an associative array to the + constructor which is a mapping of the request option name mapping to a + function that applies the option value to a request. +* Removed the concept of "throwImmediately" from exceptions and error events. + This control mechanism was used to stop a transfer of concurrent requests + from completing. This can now be handled by throwing the exception or by + cancelling a pool of requests or each outstanding future request individually. +* Updated to "GuzzleHttp\Streams" 3.0. + * `GuzzleHttp\Stream\StreamInterface::getContents()` no longer accepts a + `maxLen` parameter. This update makes the Guzzle streams project + compatible with the current PSR-7 proposal. + * `GuzzleHttp\Stream\Stream::__construct`, + `GuzzleHttp\Stream\Stream::factory`, and + `GuzzleHttp\Stream\Utils::create` no longer accept a size in the second + argument. They now accept an associative array of options, including the + "size" key and "metadata" key which can be used to provide custom metadata. + +## 4.2.2 - 2014-09-08 + +* Fixed a memory leak in the CurlAdapter when reusing cURL handles. +* No longer using `request_fulluri` in stream adapter proxies. +* Relative redirects are now based on the last response, not the first response. + +## 4.2.1 - 2014-08-19 + +* Ensuring that the StreamAdapter does not always add a Content-Type header +* Adding automated github releases with a phar and zip + +## 4.2.0 - 2014-08-17 + +* Now merging in default options using a case-insensitive comparison. + Closes https://github.com/guzzle/guzzle/issues/767 +* Added the ability to automatically decode `Content-Encoding` response bodies + using the `decode_content` request option. This is set to `true` by default + to decode the response body if it comes over the wire with a + `Content-Encoding`. Set this value to `false` to disable decoding the + response content, and pass a string to provide a request `Accept-Encoding` + header and turn on automatic response decoding. This feature now allows you + to pass an `Accept-Encoding` header in the headers of a request but still + disable automatic response decoding. + Closes https://github.com/guzzle/guzzle/issues/764 +* Added the ability to throw an exception immediately when transferring + requests in parallel. Closes https://github.com/guzzle/guzzle/issues/760 +* Updating guzzlehttp/streams dependency to ~2.1 +* No longer utilizing the now deprecated namespaced methods from the stream + package. + +## 4.1.8 - 2014-08-14 + +* Fixed an issue in the CurlFactory that caused setting the `stream=false` + request option to throw an exception. + See: https://github.com/guzzle/guzzle/issues/769 +* TransactionIterator now calls rewind on the inner iterator. + See: https://github.com/guzzle/guzzle/pull/765 +* You can now set the `Content-Type` header to `multipart/form-data` + when creating POST requests to force multipart bodies. + See https://github.com/guzzle/guzzle/issues/768 + +## 4.1.7 - 2014-08-07 + +* Fixed an error in the HistoryPlugin that caused the same request and response + to be logged multiple times when an HTTP protocol error occurs. +* Ensuring that cURL does not add a default Content-Type when no Content-Type + has been supplied by the user. This prevents the adapter layer from modifying + the request that is sent over the wire after any listeners may have already + put the request in a desired state (e.g., signed the request). +* Throwing an exception when you attempt to send requests that have the + "stream" set to true in parallel using the MultiAdapter. +* Only calling curl_multi_select when there are active cURL handles. This was + previously changed and caused performance problems on some systems due to PHP + always selecting until the maximum select timeout. +* Fixed a bug where multipart/form-data POST fields were not correctly + aggregated (e.g., values with "&"). + +## 4.1.6 - 2014-08-03 + +* Added helper methods to make it easier to represent messages as strings, + including getting the start line and getting headers as a string. + +## 4.1.5 - 2014-08-02 + +* Automatically retrying cURL "Connection died, retrying a fresh connect" + errors when possible. +* cURL implementation cleanup +* Allowing multiple event subscriber listeners to be registered per event by + passing an array of arrays of listener configuration. + +## 4.1.4 - 2014-07-22 + +* Fixed a bug that caused multi-part POST requests with more than one field to + serialize incorrectly. +* Paths can now be set to "0" +* `ResponseInterface::xml` now accepts a `libxml_options` option and added a + missing default argument that was required when parsing XML response bodies. +* A `save_to` stream is now created lazily, which means that files are not + created on disk unless a request succeeds. + +## 4.1.3 - 2014-07-15 + +* Various fixes to multipart/form-data POST uploads +* Wrapping function.php in an if-statement to ensure Guzzle can be used + globally and in a Composer install +* Fixed an issue with generating and merging in events to an event array +* POST headers are only applied before sending a request to allow you to change + the query aggregator used before uploading +* Added much more robust query string parsing +* Fixed various parsing and normalization issues with URLs +* Fixing an issue where multi-valued headers were not being utilized correctly + in the StreamAdapter + +## 4.1.2 - 2014-06-18 + +* Added support for sending payloads with GET requests + +## 4.1.1 - 2014-06-08 + +* Fixed an issue related to using custom message factory options in subclasses +* Fixed an issue with nested form fields in a multi-part POST +* Fixed an issue with using the `json` request option for POST requests +* Added `ToArrayInterface` to `GuzzleHttp\Cookie\CookieJar` + +## 4.1.0 - 2014-05-27 + +* Added a `json` request option to easily serialize JSON payloads. +* Added a `GuzzleHttp\json_decode()` wrapper to safely parse JSON. +* Added `setPort()` and `getPort()` to `GuzzleHttp\Message\RequestInterface`. +* Added the ability to provide an emitter to a client in the client constructor. +* Added the ability to persist a cookie session using $_SESSION. +* Added a trait that can be used to add event listeners to an iterator. +* Removed request method constants from RequestInterface. +* Fixed warning when invalid request start-lines are received. +* Updated MessageFactory to work with custom request option methods. +* Updated cacert bundle to latest build. + +4.0.2 (2014-04-16) +------------------ + +* Proxy requests using the StreamAdapter now properly use request_fulluri (#632) +* Added the ability to set scalars as POST fields (#628) + +## 4.0.1 - 2014-04-04 + +* The HTTP status code of a response is now set as the exception code of + RequestException objects. +* 303 redirects will now correctly switch from POST to GET requests. +* The default parallel adapter of a client now correctly uses the MultiAdapter. +* HasDataTrait now initializes the internal data array as an empty array so + that the toArray() method always returns an array. + +## 4.0.0 - 2014-03-29 + +* For more information on the 4.0 transition, see: + http://mtdowling.com/blog/2014/03/15/guzzle-4-rc/ +* For information on changes and upgrading, see: + https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40 +* Added `GuzzleHttp\batch()` as a convenience function for sending requests in + parallel without needing to write asynchronous code. +* Restructured how events are added to `GuzzleHttp\ClientInterface::sendAll()`. + You can now pass a callable or an array of associative arrays where each + associative array contains the "fn", "priority", and "once" keys. + +## 4.0.0.rc-2 - 2014-03-25 + +* Removed `getConfig()` and `setConfig()` from clients to avoid confusion + around whether things like base_url, message_factory, etc. should be able to + be retrieved or modified. +* Added `getDefaultOption()` and `setDefaultOption()` to ClientInterface +* functions.php functions were renamed using snake_case to match PHP idioms +* Added support for `HTTP_PROXY`, `HTTPS_PROXY`, and + `GUZZLE_CURL_SELECT_TIMEOUT` environment variables +* Added the ability to specify custom `sendAll()` event priorities +* Added the ability to specify custom stream context options to the stream + adapter. +* Added a functions.php function for `get_path()` and `set_path()` +* CurlAdapter and MultiAdapter now use a callable to generate curl resources +* MockAdapter now properly reads a body and emits a `headers` event +* Updated Url class to check if a scheme and host are set before adding ":" + and "//". This allows empty Url (e.g., "") to be serialized as "". +* Parsing invalid XML no longer emits warnings +* Curl classes now properly throw AdapterExceptions +* Various performance optimizations +* Streams are created with the faster `Stream\create()` function +* Marked deprecation_proxy() as internal +* Test server is now a collection of static methods on a class + +## 4.0.0-rc.1 - 2014-03-15 + +* See https://github.com/guzzle/guzzle/blob/master/UPGRADING.md#3x-to-40 + +## 3.8.1 - 2014-01-28 + +* Bug: Always using GET requests when redirecting from a 303 response +* Bug: CURLOPT_SSL_VERIFYHOST is now correctly set to false when setting `$certificateAuthority` to false in + `Guzzle\Http\ClientInterface::setSslVerification()` +* Bug: RedirectPlugin now uses strict RFC 3986 compliance when combining a base URL with a relative URL +* Bug: The body of a request can now be set to `"0"` +* Sending PHP stream requests no longer forces `HTTP/1.0` +* Adding more information to ExceptionCollection exceptions so that users have more context, including a stack trace of + each sub-exception +* Updated the `$ref` attribute in service descriptions to merge over any existing parameters of a schema (rather than + clobbering everything). +* Merging URLs will now use the query string object from the relative URL (thus allowing custom query aggregators) +* Query strings are now parsed in a way that they do no convert empty keys with no value to have a dangling `=`. + For example `foo&bar=baz` is now correctly parsed and recognized as `foo&bar=baz` rather than `foo=&bar=baz`. +* Now properly escaping the regular expression delimiter when matching Cookie domains. +* Network access is now disabled when loading XML documents + +## 3.8.0 - 2013-12-05 + +* Added the ability to define a POST name for a file +* JSON response parsing now properly walks additionalProperties +* cURL error code 18 is now retried automatically in the BackoffPlugin +* Fixed a cURL error when URLs contain fragments +* Fixed an issue in the BackoffPlugin retry event where it was trying to access all exceptions as if they were + CurlExceptions +* CURLOPT_PROGRESS function fix for PHP 5.5 (69fcc1e) +* Added the ability for Guzzle to work with older versions of cURL that do not support `CURLOPT_TIMEOUT_MS` +* Fixed a bug that was encountered when parsing empty header parameters +* UriTemplate now has a `setRegex()` method to match the docs +* The `debug` request parameter now checks if it is truthy rather than if it exists +* Setting the `debug` request parameter to true shows verbose cURL output instead of using the LogPlugin +* Added the ability to combine URLs using strict RFC 3986 compliance +* Command objects can now return the validation errors encountered by the command +* Various fixes to cache revalidation (#437 and 29797e5) +* Various fixes to the AsyncPlugin +* Cleaned up build scripts + +## 3.7.4 - 2013-10-02 + +* Bug fix: 0 is now an allowed value in a description parameter that has a default value (#430) +* Bug fix: SchemaFormatter now returns an integer when formatting to a Unix timestamp + (see https://github.com/aws/aws-sdk-php/issues/147) +* Bug fix: Cleaned up and fixed URL dot segment removal to properly resolve internal dots +* Minimum PHP version is now properly specified as 5.3.3 (up from 5.3.2) (#420) +* Updated the bundled cacert.pem (#419) +* OauthPlugin now supports adding authentication to headers or query string (#425) + +## 3.7.3 - 2013-09-08 + +* Added the ability to get the exception associated with a request/command when using `MultiTransferException` and + `CommandTransferException`. +* Setting `additionalParameters` of a response to false is now honored when parsing responses with a service description +* Schemas are only injected into response models when explicitly configured. +* No longer guessing Content-Type based on the path of a request. Content-Type is now only guessed based on the path of + an EntityBody. +* Bug fix: ChunkedIterator can now properly chunk a \Traversable as well as an \Iterator. +* Bug fix: FilterIterator now relies on `\Iterator` instead of `\Traversable`. +* Bug fix: Gracefully handling malformed responses in RequestMediator::writeResponseBody() +* Bug fix: Replaced call to canCache with canCacheRequest in the CallbackCanCacheStrategy of the CachePlugin +* Bug fix: Visiting XML attributes first before visiting XML children when serializing requests +* Bug fix: Properly parsing headers that contain commas contained in quotes +* Bug fix: mimetype guessing based on a filename is now case-insensitive + +## 3.7.2 - 2013-08-02 + +* Bug fix: Properly URL encoding paths when using the PHP-only version of the UriTemplate expander + See https://github.com/guzzle/guzzle/issues/371 +* Bug fix: Cookie domains are now matched correctly according to RFC 6265 + See https://github.com/guzzle/guzzle/issues/377 +* Bug fix: GET parameters are now used when calculating an OAuth signature +* Bug fix: Fixed an issue with cache revalidation where the If-None-Match header was being double quoted +* `Guzzle\Common\AbstractHasDispatcher::dispatch()` now returns the event that was dispatched +* `Guzzle\Http\QueryString::factory()` now guesses the most appropriate query aggregator to used based on the input. + See https://github.com/guzzle/guzzle/issues/379 +* Added a way to add custom domain objects to service description parsing using the `operation.parse_class` event. See + https://github.com/guzzle/guzzle/pull/380 +* cURL multi cleanup and optimizations + +## 3.7.1 - 2013-07-05 + +* Bug fix: Setting default options on a client now works +* Bug fix: Setting options on HEAD requests now works. See #352 +* Bug fix: Moving stream factory before send event to before building the stream. See #353 +* Bug fix: Cookies no longer match on IP addresses per RFC 6265 +* Bug fix: Correctly parsing header parameters that are in `<>` and quotes +* Added `cert` and `ssl_key` as request options +* `Host` header can now diverge from the host part of a URL if the header is set manually +* `Guzzle\Service\Command\LocationVisitor\Request\XmlVisitor` was rewritten to change from using SimpleXML to XMLWriter +* OAuth parameters are only added via the plugin if they aren't already set +* Exceptions are now thrown when a URL cannot be parsed +* Returning `false` if `Guzzle\Http\EntityBody::getContentMd5()` fails +* Not setting a `Content-MD5` on a command if calculating the Content-MD5 fails via the CommandContentMd5Plugin + +## 3.7.0 - 2013-06-10 + +* See UPGRADING.md for more information on how to upgrade. +* Requests now support the ability to specify an array of $options when creating a request to more easily modify a + request. You can pass a 'request.options' configuration setting to a client to apply default request options to + every request created by a client (e.g. default query string variables, headers, curl options, etc.). +* Added a static facade class that allows you to use Guzzle with static methods and mount the class to `\Guzzle`. + See `Guzzle\Http\StaticClient::mount`. +* Added `command.request_options` to `Guzzle\Service\Command\AbstractCommand` to pass request options to requests + created by a command (e.g. custom headers, query string variables, timeout settings, etc.). +* Stream size in `Guzzle\Stream\PhpStreamRequestFactory` will now be set if Content-Length is returned in the + headers of a response +* Added `Guzzle\Common\Collection::setPath($path, $value)` to set a value into an array using a nested key + (e.g. `$collection->setPath('foo/baz/bar', 'test'); echo $collection['foo']['bar']['bar'];`) +* ServiceBuilders now support storing and retrieving arbitrary data +* CachePlugin can now purge all resources for a given URI +* CachePlugin can automatically purge matching cached items when a non-idempotent request is sent to a resource +* CachePlugin now uses the Vary header to determine if a resource is a cache hit +* `Guzzle\Http\Message\Response` now implements `\Serializable` +* Added `Guzzle\Cache\CacheAdapterFactory::fromCache()` to more easily create cache adapters +* `Guzzle\Service\ClientInterface::execute()` now accepts an array, single command, or Traversable +* Fixed a bug in `Guzzle\Http\Message\Header\Link::addLink()` +* Better handling of calculating the size of a stream in `Guzzle\Stream\Stream` using fstat() and caching the size +* `Guzzle\Common\Exception\ExceptionCollection` now creates a more readable exception message +* Fixing BC break: Added back the MonologLogAdapter implementation rather than extending from PsrLog so that older + Symfony users can still use the old version of Monolog. +* Fixing BC break: Added the implementation back in for `Guzzle\Http\Message\AbstractMessage::getTokenizedHeader()`. + Now triggering an E_USER_DEPRECATED warning when used. Use `$message->getHeader()->parseParams()`. +* Several performance improvements to `Guzzle\Common\Collection` +* Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`: + createRequest, head, delete, put, patch, post, options, prepareRequest +* Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()` +* Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface` +* Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to + `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a + resource, string, or EntityBody into the $options parameter to specify the download location of the response. +* Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a + default `array()` +* Added `Guzzle\Stream\StreamInterface::isRepeatable` +* Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use + $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or + $client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))`. +* Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use $client->getConfig()->getPath('request.options/headers')`. +* Removed `Guzzle\Http\ClientInterface::expandTemplate()` +* Removed `Guzzle\Http\ClientInterface::setRequestFactory()` +* Removed `Guzzle\Http\ClientInterface::getCurlMulti()` +* Removed `Guzzle\Http\Message\RequestInterface::canCache` +* Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect` +* Removed `Guzzle\Http\Message\RequestInterface::isRedirect` +* Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods. +* You can now enable E_USER_DEPRECATED warnings to see if you are using a deprecated method by setting + `Guzzle\Common\Version::$emitWarnings` to true. +* Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use + `$request->getResponseBody()->isRepeatable()` instead. +* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use + `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +* Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use + `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +* Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead. +* Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead. +* Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated +* Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. + These will work through Guzzle 4.0 +* Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use [request.options][params]. +* Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client. +* Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use $client->getConfig()->getPath('request.options/headers')`. +* Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use $client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. +* Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8. +* Marked `Guzzle\Common\Collection::inject()` as deprecated. +* Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest');` +* CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a + CacheStorageInterface. These two objects and interface will be removed in a future version. +* Always setting X-cache headers on cached responses +* Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin +* `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface + $request, Response $response);` +* `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);` +* `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);` +* Added `CacheStorageInterface::purge($url)` +* `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin + $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache, + CanCacheStrategyInterface $canCache = null)` +* Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)` + +## 3.6.0 - 2013-05-29 + +* ServiceDescription now implements ToArrayInterface +* Added command.hidden_params to blacklist certain headers from being treated as additionalParameters +* Guzzle can now correctly parse incomplete URLs +* Mixed casing of headers are now forced to be a single consistent casing across all values for that header. +* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution +* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader(). +* Specific header implementations can be created for complex headers. When a message creates a header, it uses a + HeaderFactory which can map specific headers to specific header classes. There is now a Link header and + CacheControl header implementation. +* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate +* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti() +* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in + Guzzle\Http\Curl\RequestMediator +* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string. +* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface +* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders() +* Removed Guzzle\Parser\ParserRegister::get(). Use getParser() +* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser(). +* All response header helper functions return a string rather than mixing Header objects and strings inconsistently +* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle + directly via interfaces +* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist + but are a no-op until removed. +* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a + `Guzzle\Service\Command\ArrayCommandInterface`. +* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response + on a request while the request is still being transferred +* The ability to case-insensitively search for header values +* Guzzle\Http\Message\Header::hasExactHeader +* Guzzle\Http\Message\Header::raw. Use getAll() +* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object + instead. +* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess +* Added the ability to cast Model objects to a string to view debug information. + +## 3.5.0 - 2013-05-13 + +* Bug: Fixed a regression so that request responses are parsed only once per oncomplete event rather than multiple times +* Bug: Better cleanup of one-time events across the board (when an event is meant to fire once, it will now remove + itself from the EventDispatcher) +* Bug: `Guzzle\Log\MessageFormatter` now properly writes "total_time" and "connect_time" values +* Bug: Cloning an EntityEnclosingRequest now clones the EntityBody too +* Bug: Fixed an undefined index error when parsing nested JSON responses with a sentAs parameter that reference a + non-existent key +* Bug: All __call() method arguments are now required (helps with mocking frameworks) +* Deprecating Response::getRequest() and now using a shallow clone of a request object to remove a circular reference + to help with refcount based garbage collection of resources created by sending a request +* Deprecating ZF1 cache and log adapters. These will be removed in the next major version. +* Deprecating `Response::getPreviousResponse()` (method signature still exists, but it's deprecated). Use the + HistoryPlugin for a history. +* Added a `responseBody` alias for the `response_body` location +* Refactored internals to no longer rely on Response::getRequest() +* HistoryPlugin can now be cast to a string +* HistoryPlugin now logs transactions rather than requests and responses to more accurately keep track of the requests + and responses that are sent over the wire +* Added `getEffectiveUrl()` and `getRedirectCount()` to Response objects + +## 3.4.3 - 2013-04-30 + +* Bug fix: Fixing bug introduced in 3.4.2 where redirect responses are duplicated on the final redirected response +* Added a check to re-extract the temp cacert bundle from the phar before sending each request + +## 3.4.2 - 2013-04-29 + +* Bug fix: Stream objects now work correctly with "a" and "a+" modes +* Bug fix: Removing `Transfer-Encoding: chunked` header when a Content-Length is present +* Bug fix: AsyncPlugin no longer forces HEAD requests +* Bug fix: DateTime timezones are now properly handled when using the service description schema formatter +* Bug fix: CachePlugin now properly handles stale-if-error directives when a request to the origin server fails +* Setting a response on a request will write to the custom request body from the response body if one is specified +* LogPlugin now writes to php://output when STDERR is undefined +* Added the ability to set multiple POST files for the same key in a single call +* application/x-www-form-urlencoded POSTs now use the utf-8 charset by default +* Added the ability to queue CurlExceptions to the MockPlugin +* Cleaned up how manual responses are queued on requests (removed "queued_response" and now using request.before_send) +* Configuration loading now allows remote files + +## 3.4.1 - 2013-04-16 + +* Large refactoring to how CurlMulti handles work. There is now a proxy that sits in front of a pool of CurlMulti + handles. This greatly simplifies the implementation, fixes a couple bugs, and provides a small performance boost. +* Exceptions are now properly grouped when sending requests in parallel +* Redirects are now properly aggregated when a multi transaction fails +* Redirects now set the response on the original object even in the event of a failure +* Bug fix: Model names are now properly set even when using $refs +* Added support for PHP 5.5's CurlFile to prevent warnings with the deprecated @ syntax +* Added support for oauth_callback in OAuth signatures +* Added support for oauth_verifier in OAuth signatures +* Added support to attempt to retrieve a command first literally, then ucfirst, the with inflection + +## 3.4.0 - 2013-04-11 + +* Bug fix: URLs are now resolved correctly based on http://tools.ietf.org/html/rfc3986#section-5.2. #289 +* Bug fix: Absolute URLs with a path in a service description will now properly override the base URL. #289 +* Bug fix: Parsing a query string with a single PHP array value will now result in an array. #263 +* Bug fix: Better normalization of the User-Agent header to prevent duplicate headers. #264. +* Bug fix: Added `number` type to service descriptions. +* Bug fix: empty parameters are removed from an OAuth signature +* Bug fix: Revalidating a cache entry prefers the Last-Modified over the Date header +* Bug fix: Fixed "array to string" error when validating a union of types in a service description +* Bug fix: Removed code that attempted to determine the size of a stream when data is written to the stream +* Bug fix: Not including an `oauth_token` if the value is null in the OauthPlugin. +* Bug fix: Now correctly aggregating successful requests and failed requests in CurlMulti when a redirect occurs. +* The new default CURLOPT_TIMEOUT setting has been increased to 150 seconds so that Guzzle works on poor connections. +* Added a feature to EntityEnclosingRequest::setBody() that will automatically set the Content-Type of the request if + the Content-Type can be determined based on the entity body or the path of the request. +* Added the ability to overwrite configuration settings in a client when grabbing a throwaway client from a builder. +* Added support for a PSR-3 LogAdapter. +* Added a `command.after_prepare` event +* Added `oauth_callback` parameter to the OauthPlugin +* Added the ability to create a custom stream class when using a stream factory +* Added a CachingEntityBody decorator +* Added support for `additionalParameters` in service descriptions to define how custom parameters are serialized. +* The bundled SSL certificate is now provided in the phar file and extracted when running Guzzle from a phar. +* You can now send any EntityEnclosingRequest with POST fields or POST files and cURL will handle creating bodies +* POST requests using a custom entity body are now treated exactly like PUT requests but with a custom cURL method. This + means that the redirect behavior of POST requests with custom bodies will not be the same as POST requests that use + POST fields or files (the latter is only used when emulating a form POST in the browser). +* Lots of cleanup to CurlHandle::factory and RequestFactory::createRequest + +## 3.3.1 - 2013-03-10 + +* Added the ability to create PHP streaming responses from HTTP requests +* Bug fix: Running any filters when parsing response headers with service descriptions +* Bug fix: OauthPlugin fixes to allow for multi-dimensional array signing, and sorting parameters before signing +* Bug fix: Removed the adding of default empty arrays and false Booleans to responses in order to be consistent across + response location visitors. +* Bug fix: Removed the possibility of creating configuration files with circular dependencies +* RequestFactory::create() now uses the key of a POST file when setting the POST file name +* Added xmlAllowEmpty to serialize an XML body even if no XML specific parameters are set + +## 3.3.0 - 2013-03-03 + +* A large number of performance optimizations have been made +* Bug fix: Added 'wb' as a valid write mode for streams +* Bug fix: `Guzzle\Http\Message\Response::json()` now allows scalar values to be returned +* Bug fix: Fixed bug in `Guzzle\Http\Message\Response` where wrapping quotes were stripped from `getEtag()` +* BC: Removed `Guzzle\Http\Utils` class +* BC: Setting a service description on a client will no longer modify the client's command factories. +* BC: Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using + the 'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io' +* BC: `Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getSteamType()` are no longer converted to + lowercase +* Operation parameter objects are now lazy loaded internally +* Added ErrorResponsePlugin that can throw errors for responses defined in service description operations' errorResponses +* Added support for instantiating responseType=class responseClass classes. Classes must implement + `Guzzle\Service\Command\ResponseClassInterface` +* Added support for additionalProperties for top-level parameters in responseType=model responseClasses. These + additional properties also support locations and can be used to parse JSON responses where the outermost part of the + JSON is an array +* Added support for nested renaming of JSON models (rename sentAs to name) +* CachePlugin + * Added support for stale-if-error so that the CachePlugin can now serve stale content from the cache on error + * Debug headers can now added to cached response in the CachePlugin + +## 3.2.0 - 2013-02-14 + +* CurlMulti is no longer reused globally. A new multi object is created per-client. This helps to isolate clients. +* URLs with no path no longer contain a "/" by default +* Guzzle\Http\QueryString does no longer manages the leading "?". This is now handled in Guzzle\Http\Url. +* BadResponseException no longer includes the full request and response message +* Adding setData() to Guzzle\Service\Description\ServiceDescriptionInterface +* Adding getResponseBody() to Guzzle\Http\Message\RequestInterface +* Various updates to classes to use ServiceDescriptionInterface type hints rather than ServiceDescription +* Header values can now be normalized into distinct values when multiple headers are combined with a comma separated list +* xmlEncoding can now be customized for the XML declaration of a XML service description operation +* Guzzle\Http\QueryString now uses Guzzle\Http\QueryAggregator\QueryAggregatorInterface objects to add custom value + aggregation and no longer uses callbacks +* The URL encoding implementation of Guzzle\Http\QueryString can now be customized +* Bug fix: Filters were not always invoked for array service description parameters +* Bug fix: Redirects now use a target response body rather than a temporary response body +* Bug fix: The default exponential backoff BackoffPlugin was not giving when the request threshold was exceeded +* Bug fix: Guzzle now takes the first found value when grabbing Cache-Control directives + +## 3.1.2 - 2013-01-27 + +* Refactored how operation responses are parsed. Visitors now include a before() method responsible for parsing the + response body. For example, the XmlVisitor now parses the XML response into an array in the before() method. +* Fixed an issue where cURL would not automatically decompress responses when the Accept-Encoding header was sent +* CURLOPT_SSL_VERIFYHOST is never set to 1 because it is deprecated (see 5e0ff2ef20f839e19d1eeb298f90ba3598784444) +* Fixed a bug where redirect responses were not chained correctly using getPreviousResponse() +* Setting default headers on a client after setting the user-agent will not erase the user-agent setting + +## 3.1.1 - 2013-01-20 + +* Adding wildcard support to Guzzle\Common\Collection::getPath() +* Adding alias support to ServiceBuilder configs +* Adding Guzzle\Service\Resource\CompositeResourceIteratorFactory and cleaning up factory interface + +## 3.1.0 - 2013-01-12 + +* BC: CurlException now extends from RequestException rather than BadResponseException +* BC: Renamed Guzzle\Plugin\Cache\CanCacheStrategyInterface::canCache() to canCacheRequest() and added CanCacheResponse() +* Added getData to ServiceDescriptionInterface +* Added context array to RequestInterface::setState() +* Bug: Removing hard dependency on the BackoffPlugin from Guzzle\Http +* Bug: Adding required content-type when JSON request visitor adds JSON to a command +* Bug: Fixing the serialization of a service description with custom data +* Made it easier to deal with exceptions thrown when transferring commands or requests in parallel by providing + an array of successful and failed responses +* Moved getPath from Guzzle\Service\Resource\Model to Guzzle\Common\Collection +* Added Guzzle\Http\IoEmittingEntityBody +* Moved command filtration from validators to location visitors +* Added `extends` attributes to service description parameters +* Added getModels to ServiceDescriptionInterface + +## 3.0.7 - 2012-12-19 + +* Fixing phar detection when forcing a cacert to system if null or true +* Allowing filename to be passed to `Guzzle\Http\Message\Request::setResponseBody()` +* Cleaning up `Guzzle\Common\Collection::inject` method +* Adding a response_body location to service descriptions + +## 3.0.6 - 2012-12-09 + +* CurlMulti performance improvements +* Adding setErrorResponses() to Operation +* composer.json tweaks + +## 3.0.5 - 2012-11-18 + +* Bug: Fixing an infinite recursion bug caused from revalidating with the CachePlugin +* Bug: Response body can now be a string containing "0" +* Bug: Using Guzzle inside of a phar uses system by default but now allows for a custom cacert +* Bug: QueryString::fromString now properly parses query string parameters that contain equal signs +* Added support for XML attributes in service description responses +* DefaultRequestSerializer now supports array URI parameter values for URI template expansion +* Added better mimetype guessing to requests and post files + +## 3.0.4 - 2012-11-11 + +* Bug: Fixed a bug when adding multiple cookies to a request to use the correct glue value +* Bug: Cookies can now be added that have a name, domain, or value set to "0" +* Bug: Using the system cacert bundle when using the Phar +* Added json and xml methods to Response to make it easier to parse JSON and XML response data into data structures +* Enhanced cookie jar de-duplication +* Added the ability to enable strict cookie jars that throw exceptions when invalid cookies are added +* Added setStream to StreamInterface to actually make it possible to implement custom rewind behavior for entity bodies +* Added the ability to create any sort of hash for a stream rather than just an MD5 hash + +## 3.0.3 - 2012-11-04 + +* Implementing redirects in PHP rather than cURL +* Added PECL URI template extension and using as default parser if available +* Bug: Fixed Content-Length parsing of Response factory +* Adding rewind() method to entity bodies and streams. Allows for custom rewinding of non-repeatable streams. +* Adding ToArrayInterface throughout library +* Fixing OauthPlugin to create unique nonce values per request + +## 3.0.2 - 2012-10-25 + +* Magic methods are enabled by default on clients +* Magic methods return the result of a command +* Service clients no longer require a base_url option in the factory +* Bug: Fixed an issue with URI templates where null template variables were being expanded + +## 3.0.1 - 2012-10-22 + +* Models can now be used like regular collection objects by calling filter, map, etc. +* Models no longer require a Parameter structure or initial data in the constructor +* Added a custom AppendIterator to get around a PHP bug with the `\AppendIterator` + +## 3.0.0 - 2012-10-15 + +* Rewrote service description format to be based on Swagger + * Now based on JSON schema + * Added nested input structures and nested response models + * Support for JSON and XML input and output models + * Renamed `commands` to `operations` + * Removed dot class notation + * Removed custom types +* Broke the project into smaller top-level namespaces to be more component friendly +* Removed support for XML configs and descriptions. Use arrays or JSON files. +* Removed the Validation component and Inspector +* Moved all cookie code to Guzzle\Plugin\Cookie +* Magic methods on a Guzzle\Service\Client now return the command un-executed. +* Calling getResult() or getResponse() on a command will lazily execute the command if needed. +* Now shipping with cURL's CA certs and using it by default +* Added previousResponse() method to response objects +* No longer sending Accept and Accept-Encoding headers on every request +* Only sending an Expect header by default when a payload is greater than 1MB +* Added/moved client options: + * curl.blacklist to curl.option.blacklist + * Added ssl.certificate_authority +* Added a Guzzle\Iterator component +* Moved plugins from Guzzle\Http\Plugin to Guzzle\Plugin +* Added a more robust backoff retry strategy (replaced the ExponentialBackoffPlugin) +* Added a more robust caching plugin +* Added setBody to response objects +* Updating LogPlugin to use a more flexible MessageFormatter +* Added a completely revamped build process +* Cleaning up Collection class and removing default values from the get method +* Fixed ZF2 cache adapters + +## 2.8.8 - 2012-10-15 + +* Bug: Fixed a cookie issue that caused dot prefixed domains to not match where popular browsers did + +## 2.8.7 - 2012-09-30 + +* Bug: Fixed config file aliases for JSON includes +* Bug: Fixed cookie bug on a request object by using CookieParser to parse cookies on requests +* Bug: Removing the path to a file when sending a Content-Disposition header on a POST upload +* Bug: Hardening request and response parsing to account for missing parts +* Bug: Fixed PEAR packaging +* Bug: Fixed Request::getInfo +* Bug: Fixed cases where CURLM_CALL_MULTI_PERFORM return codes were causing curl transactions to fail +* Adding the ability for the namespace Iterator factory to look in multiple directories +* Added more getters/setters/removers from service descriptions +* Added the ability to remove POST fields from OAuth signatures +* OAuth plugin now supports 2-legged OAuth + +## 2.8.6 - 2012-09-05 + +* Added the ability to modify and build service descriptions +* Added the use of visitors to apply parameters to locations in service descriptions using the dynamic command +* Added a `json` parameter location +* Now allowing dot notation for classes in the CacheAdapterFactory +* Using the union of two arrays rather than an array_merge when extending service builder services and service params +* Ensuring that a service is a string before doing strpos() checks on it when substituting services for references + in service builder config files. +* Services defined in two different config files that include one another will by default replace the previously + defined service, but you can now create services that extend themselves and merge their settings over the previous +* The JsonLoader now supports aliasing filenames with different filenames. This allows you to alias something like + '_default' with a default JSON configuration file. + +## 2.8.5 - 2012-08-29 + +* Bug: Suppressed empty arrays from URI templates +* Bug: Added the missing $options argument from ServiceDescription::factory to enable caching +* Added support for HTTP responses that do not contain a reason phrase in the start-line +* AbstractCommand commands are now invokable +* Added a way to get the data used when signing an Oauth request before a request is sent + +## 2.8.4 - 2012-08-15 + +* Bug: Custom delay time calculations are no longer ignored in the ExponentialBackoffPlugin +* Added the ability to transfer entity bodies as a string rather than streamed. This gets around curl error 65. Set `body_as_string` in a request's curl options to enable. +* Added a StreamInterface, EntityBodyInterface, and added ftell() to Guzzle\Common\Stream +* Added an AbstractEntityBodyDecorator and a ReadLimitEntityBody decorator to transfer only a subset of a decorated stream +* Stream and EntityBody objects will now return the file position to the previous position after a read required operation (e.g. getContentMd5()) +* Added additional response status codes +* Removed SSL information from the default User-Agent header +* DELETE requests can now send an entity body +* Added an EventDispatcher to the ExponentialBackoffPlugin and added an ExponentialBackoffLogger to log backoff retries +* Added the ability of the MockPlugin to consume mocked request bodies +* LogPlugin now exposes request and response objects in the extras array + +## 2.8.3 - 2012-07-30 + +* Bug: Fixed a case where empty POST requests were sent as GET requests +* Bug: Fixed a bug in ExponentialBackoffPlugin that caused fatal errors when retrying an EntityEnclosingRequest that does not have a body +* Bug: Setting the response body of a request to null after completing a request, not when setting the state of a request to new +* Added multiple inheritance to service description commands +* Added an ApiCommandInterface and added `getParamNames()` and `hasParam()` +* Removed the default 2mb size cutoff from the Md5ValidatorPlugin so that it now defaults to validating everything +* Changed CurlMulti::perform to pass a smaller timeout to CurlMulti::executeHandles + +## 2.8.2 - 2012-07-24 + +* Bug: Query string values set to 0 are no longer dropped from the query string +* Bug: A Collection object is no longer created each time a call is made to `Guzzle\Service\Command\AbstractCommand::getRequestHeaders()` +* Bug: `+` is now treated as an encoded space when parsing query strings +* QueryString and Collection performance improvements +* Allowing dot notation for class paths in filters attribute of a service descriptions + +## 2.8.1 - 2012-07-16 + +* Loosening Event Dispatcher dependency +* POST redirects can now be customized using CURLOPT_POSTREDIR + +## 2.8.0 - 2012-07-15 + +* BC: Guzzle\Http\Query + * Query strings with empty variables will always show an equal sign unless the variable is set to QueryString::BLANK (e.g. ?acl= vs ?acl) + * Changed isEncodingValues() and isEncodingFields() to isUrlEncoding() + * Changed setEncodeValues(bool) and setEncodeFields(bool) to useUrlEncoding(bool) + * Changed the aggregation functions of QueryString to be static methods + * Can now use fromString() with querystrings that have a leading ? +* cURL configuration values can be specified in service descriptions using `curl.` prefixed parameters +* Content-Length is set to 0 before emitting the request.before_send event when sending an empty request body +* Cookies are no longer URL decoded by default +* Bug: URI template variables set to null are no longer expanded + +## 2.7.2 - 2012-07-02 + +* BC: Moving things to get ready for subtree splits. Moving Inflection into Common. Moving Guzzle\Http\Parser to Guzzle\Parser. +* BC: Removing Guzzle\Common\Batch\Batch::count() and replacing it with isEmpty() +* CachePlugin now allows for a custom request parameter function to check if a request can be cached +* Bug fix: CachePlugin now only caches GET and HEAD requests by default +* Bug fix: Using header glue when transferring headers over the wire +* Allowing deeply nested arrays for composite variables in URI templates +* Batch divisors can now return iterators or arrays + +## 2.7.1 - 2012-06-26 + +* Minor patch to update version number in UA string +* Updating build process + +## 2.7.0 - 2012-06-25 + +* BC: Inflection classes moved to Guzzle\Inflection. No longer static methods. Can now inject custom inflectors into classes. +* BC: Removed magic setX methods from commands +* BC: Magic methods mapped to service description commands are now inflected in the command factory rather than the client __call() method +* Verbose cURL options are no longer enabled by default. Set curl.debug to true on a client to enable. +* Bug: Now allowing colons in a response start-line (e.g. HTTP/1.1 503 Service Unavailable: Back-end server is at capacity) +* Guzzle\Service\Resource\ResourceIteratorApplyBatched now internally uses the Guzzle\Common\Batch namespace +* Added Guzzle\Service\Plugin namespace and a PluginCollectionPlugin +* Added the ability to set POST fields and files in a service description +* Guzzle\Http\EntityBody::factory() now accepts objects with a __toString() method +* Adding a command.before_prepare event to clients +* Added BatchClosureTransfer and BatchClosureDivisor +* BatchTransferException now includes references to the batch divisor and transfer strategies +* Fixed some tests so that they pass more reliably +* Added Guzzle\Common\Log\ArrayLogAdapter + +## 2.6.6 - 2012-06-10 + +* BC: Removing Guzzle\Http\Plugin\BatchQueuePlugin +* BC: Removing Guzzle\Service\Command\CommandSet +* Adding generic batching system (replaces the batch queue plugin and command set) +* Updating ZF cache and log adapters and now using ZF's composer repository +* Bug: Setting the name of each ApiParam when creating through an ApiCommand +* Adding result_type, result_doc, deprecated, and doc_url to service descriptions +* Bug: Changed the default cookie header casing back to 'Cookie' + +## 2.6.5 - 2012-06-03 + +* BC: Renaming Guzzle\Http\Message\RequestInterface::getResourceUri() to getResource() +* BC: Removing unused AUTH_BASIC and AUTH_DIGEST constants from +* BC: Guzzle\Http\Cookie is now used to manage Set-Cookie data, not Cookie data +* BC: Renaming methods in the CookieJarInterface +* Moving almost all cookie logic out of the CookiePlugin and into the Cookie or CookieJar implementations +* Making the default glue for HTTP headers ';' instead of ',' +* Adding a removeValue to Guzzle\Http\Message\Header +* Adding getCookies() to request interface. +* Making it easier to add event subscribers to HasDispatcherInterface classes. Can now directly call addSubscriber() + +## 2.6.4 - 2012-05-30 + +* BC: Cleaning up how POST files are stored in EntityEnclosingRequest objects. Adding PostFile class. +* BC: Moving ApiCommand specific functionality from the Inspector and on to the ApiCommand +* Bug: Fixing magic method command calls on clients +* Bug: Email constraint only validates strings +* Bug: Aggregate POST fields when POST files are present in curl handle +* Bug: Fixing default User-Agent header +* Bug: Only appending or prepending parameters in commands if they are specified +* Bug: Not requiring response reason phrases or status codes to match a predefined list of codes +* Allowing the use of dot notation for class namespaces when using instance_of constraint +* Added any_match validation constraint +* Added an AsyncPlugin +* Passing request object to the calculateWait method of the ExponentialBackoffPlugin +* Allowing the result of a command object to be changed +* Parsing location and type sub values when instantiating a service description rather than over and over at runtime + +## 2.6.3 - 2012-05-23 + +* [BC] Guzzle\Common\FromConfigInterface no longer requires any config options. +* [BC] Refactoring how POST files are stored on an EntityEnclosingRequest. They are now separate from POST fields. +* You can now use an array of data when creating PUT request bodies in the request factory. +* Removing the requirement that HTTPS requests needed a Cache-Control: public directive to be cacheable. +* [Http] Adding support for Content-Type in multipart POST uploads per upload +* [Http] Added support for uploading multiple files using the same name (foo[0], foo[1]) +* Adding more POST data operations for easier manipulation of POST data. +* You can now set empty POST fields. +* The body of a request is only shown on EntityEnclosingRequest objects that do not use POST files. +* Split the Guzzle\Service\Inspector::validateConfig method into two methods. One to initialize when a command is created, and one to validate. +* CS updates + +## 2.6.2 - 2012-05-19 + +* [Http] Better handling of nested scope requests in CurlMulti. Requests are now always prepares in the send() method rather than the addRequest() method. + +## 2.6.1 - 2012-05-19 + +* [BC] Removing 'path' support in service descriptions. Use 'uri'. +* [BC] Guzzle\Service\Inspector::parseDocBlock is now protected. Adding getApiParamsForClass() with cache. +* [BC] Removing Guzzle\Common\NullObject. Use https://github.com/mtdowling/NullObject if you need it. +* [BC] Removing Guzzle\Common\XmlElement. +* All commands, both dynamic and concrete, have ApiCommand objects. +* Adding a fix for CurlMulti so that if all of the connections encounter some sort of curl error, then the loop exits. +* Adding checks to EntityEnclosingRequest so that empty POST files and fields are ignored. +* Making the method signature of Guzzle\Service\Builder\ServiceBuilder::factory more flexible. + +## 2.6.0 - 2012-05-15 + +* [BC] Moving Guzzle\Service\Builder to Guzzle\Service\Builder\ServiceBuilder +* [BC] Executing a Command returns the result of the command rather than the command +* [BC] Moving all HTTP parsing logic to Guzzle\Http\Parsers. Allows for faster C implementations if needed. +* [BC] Changing the Guzzle\Http\Message\Response::setProtocol() method to accept a protocol and version in separate args. +* [BC] Moving ResourceIterator* to Guzzle\Service\Resource +* [BC] Completely refactored ResourceIterators to iterate over a cloned command object +* [BC] Moved Guzzle\Http\UriTemplate to Guzzle\Http\Parser\UriTemplate\UriTemplate +* [BC] Guzzle\Guzzle is now deprecated +* Moving Guzzle\Common\Guzzle::inject to Guzzle\Common\Collection::inject +* Adding Guzzle\Version class to give version information about Guzzle +* Adding Guzzle\Http\Utils class to provide getDefaultUserAgent() and getHttpDate() +* Adding Guzzle\Curl\CurlVersion to manage caching curl_version() data +* ServiceDescription and ServiceBuilder are now cacheable using similar configs +* Changing the format of XML and JSON service builder configs. Backwards compatible. +* Cleaned up Cookie parsing +* Trimming the default Guzzle User-Agent header +* Adding a setOnComplete() method to Commands that is called when a command completes +* Keeping track of requests that were mocked in the MockPlugin +* Fixed a caching bug in the CacheAdapterFactory +* Inspector objects can be injected into a Command object +* Refactoring a lot of code and tests to be case insensitive when dealing with headers +* Adding Guzzle\Http\Message\HeaderComparison for easy comparison of HTTP headers using a DSL +* Adding the ability to set global option overrides to service builder configs +* Adding the ability to include other service builder config files from within XML and JSON files +* Moving the parseQuery method out of Url and on to QueryString::fromString() as a static factory method. + +## 2.5.0 - 2012-05-08 + +* Major performance improvements +* [BC] Simplifying Guzzle\Common\Collection. Please check to see if you are using features that are now deprecated. +* [BC] Using a custom validation system that allows a flyweight implementation for much faster validation. No longer using Symfony2 Validation component. +* [BC] No longer supporting "{{ }}" for injecting into command or UriTemplates. Use "{}" +* Added the ability to passed parameters to all requests created by a client +* Added callback functionality to the ExponentialBackoffPlugin +* Using microtime in ExponentialBackoffPlugin to allow more granular backoff strategies. +* Rewinding request stream bodies when retrying requests +* Exception is thrown when JSON response body cannot be decoded +* Added configurable magic method calls to clients and commands. This is off by default. +* Fixed a defect that added a hash to every parsed URL part +* Fixed duplicate none generation for OauthPlugin. +* Emitting an event each time a client is generated by a ServiceBuilder +* Using an ApiParams object instead of a Collection for parameters of an ApiCommand +* cache.* request parameters should be renamed to params.cache.* +* Added the ability to set arbitrary curl options on requests (disable_wire, progress, etc.). See CurlHandle. +* Added the ability to disable type validation of service descriptions +* ServiceDescriptions and ServiceBuilders are now Serializable diff --git a/base/vendor/guzzlehttp/guzzle/Dockerfile b/base/vendor/guzzlehttp/guzzle/Dockerfile new file mode 100644 index 00000000..f6a09523 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/Dockerfile @@ -0,0 +1,18 @@ +FROM composer:latest as setup + +RUN mkdir /guzzle + +WORKDIR /guzzle + +RUN set -xe \ + && composer init --name=guzzlehttp/test --description="Simple project for testing Guzzle scripts" --author="Márk Sági-Kazár " --no-interaction \ + && composer require guzzlehttp/guzzle + + +FROM php:7.3 + +RUN mkdir /guzzle + +WORKDIR /guzzle + +COPY --from=setup /guzzle /guzzle diff --git a/base/vendor/guzzlehttp/guzzle/LICENSE b/base/vendor/guzzlehttp/guzzle/LICENSE new file mode 100644 index 00000000..50a177b0 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2011-2018 Michael Dowling, https://github.com/mtdowling + +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/base/vendor/guzzlehttp/guzzle/README.md b/base/vendor/guzzlehttp/guzzle/README.md new file mode 100644 index 00000000..5fdb6c5f --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/README.md @@ -0,0 +1,90 @@ +Guzzle, PHP HTTP client +======================= + +[![Latest Version](https://img.shields.io/github/release/guzzle/guzzle.svg?style=flat-square)](https://github.com/guzzle/guzzle/releases) +[![Build Status](https://img.shields.io/travis/guzzle/guzzle.svg?style=flat-square)](https://travis-ci.org/guzzle/guzzle) +[![Total Downloads](https://img.shields.io/packagist/dt/guzzlehttp/guzzle.svg?style=flat-square)](https://packagist.org/packages/guzzlehttp/guzzle) + +Guzzle is a PHP HTTP client that makes it easy to send HTTP requests and +trivial to integrate with web services. + +- Simple interface for building query strings, POST requests, streaming large + uploads, streaming large downloads, using HTTP cookies, uploading JSON data, + etc... +- Can send both synchronous and asynchronous requests using the same interface. +- Uses PSR-7 interfaces for requests, responses, and streams. This allows you + to utilize other PSR-7 compatible libraries with Guzzle. +- Abstracts away the underlying HTTP transport, allowing you to write + environment and transport agnostic code; i.e., no hard dependency on cURL, + PHP streams, sockets, or non-blocking event loops. +- Middleware system allows you to augment and compose client behavior. + +```php +$client = new \GuzzleHttp\Client(); +$response = $client->request('GET', 'https://api.github.com/repos/guzzle/guzzle'); + +echo $response->getStatusCode(); # 200 +echo $response->getHeaderLine('content-type'); # 'application/json; charset=utf8' +echo $response->getBody(); # '{"id": 1420053, "name": "guzzle", ...}' + +# Send an asynchronous request. +$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org'); +$promise = $client->sendAsync($request)->then(function ($response) { + echo 'I completed! ' . $response->getBody(); +}); + +$promise->wait(); +``` + +## Help and docs + +- [Documentation](http://guzzlephp.org/) +- [Stack Overflow](http://stackoverflow.com/questions/tagged/guzzle) +- [Gitter](https://gitter.im/guzzle/guzzle) + + +## Installing Guzzle + +The recommended way to install Guzzle is through +[Composer](http://getcomposer.org). + +```bash +# Install Composer +curl -sS https://getcomposer.org/installer | php +``` + +Next, run the Composer command to install the latest stable version of Guzzle: + +```bash +composer require guzzlehttp/guzzle +``` + +After installing, you need to require Composer's autoloader: + +```php +require 'vendor/autoload.php'; +``` + +You can then later update Guzzle using composer: + + ```bash +composer update + ``` + + +## Version Guidance + +| Version | Status | Packagist | Namespace | Repo | Docs | PSR-7 | PHP Version | +|---------|------------|---------------------|--------------|---------------------|---------------------|-------|-------------| +| 3.x | EOL | `guzzle/guzzle` | `Guzzle` | [v3][guzzle-3-repo] | [v3][guzzle-3-docs] | No | >= 5.3.3 | +| 4.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v4][guzzle-4-repo] | N/A | No | >= 5.4 | +| 5.x | EOL | `guzzlehttp/guzzle` | `GuzzleHttp` | [v5][guzzle-5-repo] | [v5][guzzle-5-docs] | No | >= 5.4 | +| 6.x | Latest | `guzzlehttp/guzzle` | `GuzzleHttp` | [v6][guzzle-6-repo] | [v6][guzzle-6-docs] | Yes | >= 5.5 | + +[guzzle-3-repo]: https://github.com/guzzle/guzzle3 +[guzzle-4-repo]: https://github.com/guzzle/guzzle/tree/4.x +[guzzle-5-repo]: https://github.com/guzzle/guzzle/tree/5.3 +[guzzle-6-repo]: https://github.com/guzzle/guzzle +[guzzle-3-docs]: http://guzzle3.readthedocs.org +[guzzle-5-docs]: http://guzzle.readthedocs.org/en/5.3/ +[guzzle-6-docs]: http://guzzle.readthedocs.org/en/latest/ diff --git a/base/vendor/guzzlehttp/guzzle/UPGRADING.md b/base/vendor/guzzlehttp/guzzle/UPGRADING.md new file mode 100644 index 00000000..91d1dcc9 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/UPGRADING.md @@ -0,0 +1,1203 @@ +Guzzle Upgrade Guide +==================== + +5.0 to 6.0 +---------- + +Guzzle now uses [PSR-7](http://www.php-fig.org/psr/psr-7/) for HTTP messages. +Due to the fact that these messages are immutable, this prompted a refactoring +of Guzzle to use a middleware based system rather than an event system. Any +HTTP message interaction (e.g., `GuzzleHttp\Message\Request`) need to be +updated to work with the new immutable PSR-7 request and response objects. Any +event listeners or subscribers need to be updated to become middleware +functions that wrap handlers (or are injected into a +`GuzzleHttp\HandlerStack`). + +- Removed `GuzzleHttp\BatchResults` +- Removed `GuzzleHttp\Collection` +- Removed `GuzzleHttp\HasDataTrait` +- Removed `GuzzleHttp\ToArrayInterface` +- The `guzzlehttp/streams` dependency has been removed. Stream functionality + is now present in the `GuzzleHttp\Psr7` namespace provided by the + `guzzlehttp/psr7` package. +- Guzzle no longer uses ReactPHP promises and now uses the + `guzzlehttp/promises` library. We use a custom promise library for three + significant reasons: + 1. React promises (at the time of writing this) are recursive. Promise + chaining and promise resolution will eventually blow the stack. Guzzle + promises are not recursive as they use a sort of trampolining technique. + Note: there has been movement in the React project to modify promises to + no longer utilize recursion. + 2. Guzzle needs to have the ability to synchronously block on a promise to + wait for a result. Guzzle promises allows this functionality (and does + not require the use of recursion). + 3. Because we need to be able to wait on a result, doing so using React + promises requires wrapping react promises with RingPHP futures. This + overhead is no longer needed, reducing stack sizes, reducing complexity, + and improving performance. +- `GuzzleHttp\Mimetypes` has been moved to a function in + `GuzzleHttp\Psr7\mimetype_from_extension` and + `GuzzleHttp\Psr7\mimetype_from_filename`. +- `GuzzleHttp\Query` and `GuzzleHttp\QueryParser` have been removed. Query + strings must now be passed into request objects as strings, or provided to + the `query` request option when creating requests with clients. The `query` + option uses PHP's `http_build_query` to convert an array to a string. If you + need a different serialization technique, you will need to pass the query + string in as a string. There are a couple helper functions that will make + working with query strings easier: `GuzzleHttp\Psr7\parse_query` and + `GuzzleHttp\Psr7\build_query`. +- Guzzle no longer has a dependency on RingPHP. Due to the use of a middleware + system based on PSR-7, using RingPHP and it's middleware system as well adds + more complexity than the benefits it provides. All HTTP handlers that were + present in RingPHP have been modified to work directly with PSR-7 messages + and placed in the `GuzzleHttp\Handler` namespace. This significantly reduces + complexity in Guzzle, removes a dependency, and improves performance. RingPHP + will be maintained for Guzzle 5 support, but will no longer be a part of + Guzzle 6. +- As Guzzle now uses a middleware based systems the event system and RingPHP + integration has been removed. Note: while the event system has been removed, + it is possible to add your own type of event system that is powered by the + middleware system. + - Removed the `Event` namespace. + - Removed the `Subscriber` namespace. + - Removed `Transaction` class + - Removed `RequestFsm` + - Removed `RingBridge` + - `GuzzleHttp\Subscriber\Cookie` is now provided by + `GuzzleHttp\Middleware::cookies` + - `GuzzleHttp\Subscriber\HttpError` is now provided by + `GuzzleHttp\Middleware::httpError` + - `GuzzleHttp\Subscriber\History` is now provided by + `GuzzleHttp\Middleware::history` + - `GuzzleHttp\Subscriber\Mock` is now provided by + `GuzzleHttp\Handler\MockHandler` + - `GuzzleHttp\Subscriber\Prepare` is now provided by + `GuzzleHttp\PrepareBodyMiddleware` + - `GuzzleHttp\Subscriber\Redirect` is now provided by + `GuzzleHttp\RedirectMiddleware` +- Guzzle now uses `Psr\Http\Message\UriInterface` (implements in + `GuzzleHttp\Psr7\Uri`) for URI support. `GuzzleHttp\Url` is now gone. +- Static functions in `GuzzleHttp\Utils` have been moved to namespaced + functions under the `GuzzleHttp` namespace. This requires either a Composer + based autoloader or you to include functions.php. +- `GuzzleHttp\ClientInterface::getDefaultOption` has been renamed to + `GuzzleHttp\ClientInterface::getConfig`. +- `GuzzleHttp\ClientInterface::setDefaultOption` has been removed. +- The `json` and `xml` methods of response objects has been removed. With the + migration to strictly adhering to PSR-7 as the interface for Guzzle messages, + adding methods to message interfaces would actually require Guzzle messages + to extend from PSR-7 messages rather then work with them directly. + +## Migrating to middleware + +The change to PSR-7 unfortunately required significant refactoring to Guzzle +due to the fact that PSR-7 messages are immutable. Guzzle 5 relied on an event +system from plugins. The event system relied on mutability of HTTP messages and +side effects in order to work. With immutable messages, you have to change your +workflow to become more about either returning a value (e.g., functional +middlewares) or setting a value on an object. Guzzle v6 has chosen the +functional middleware approach. + +Instead of using the event system to listen for things like the `before` event, +you now create a stack based middleware function that intercepts a request on +the way in and the promise of the response on the way out. This is a much +simpler and more predictable approach than the event system and works nicely +with PSR-7 middleware. Due to the use of promises, the middleware system is +also asynchronous. + +v5: + +```php +use GuzzleHttp\Event\BeforeEvent; +$client = new GuzzleHttp\Client(); +// Get the emitter and listen to the before event. +$client->getEmitter()->on('before', function (BeforeEvent $e) { + // Guzzle v5 events relied on mutation + $e->getRequest()->setHeader('X-Foo', 'Bar'); +}); +``` + +v6: + +In v6, you can modify the request before it is sent using the `mapRequest` +middleware. The idiomatic way in v6 to modify the request/response lifecycle is +to setup a handler middleware stack up front and inject the handler into a +client. + +```php +use GuzzleHttp\Middleware; +// Create a handler stack that has all of the default middlewares attached +$handler = GuzzleHttp\HandlerStack::create(); +// Push the handler onto the handler stack +$handler->push(Middleware::mapRequest(function (RequestInterface $request) { + // Notice that we have to return a request object + return $request->withHeader('X-Foo', 'Bar'); +})); +// Inject the handler into the client +$client = new GuzzleHttp\Client(['handler' => $handler]); +``` + +## POST Requests + +This version added the [`form_params`](http://guzzle.readthedocs.org/en/latest/request-options.html#form_params) +and `multipart` request options. `form_params` is an associative array of +strings or array of strings and is used to serialize an +`application/x-www-form-urlencoded` POST request. The +[`multipart`](http://guzzle.readthedocs.org/en/latest/request-options.html#multipart) +option is now used to send a multipart/form-data POST request. + +`GuzzleHttp\Post\PostFile` has been removed. Use the `multipart` option to add +POST files to a multipart/form-data request. + +The `body` option no longer accepts an array to send POST requests. Please use +`multipart` or `form_params` instead. + +The `base_url` option has been renamed to `base_uri`. + +4.x to 5.0 +---------- + +## Rewritten Adapter Layer + +Guzzle now uses [RingPHP](http://ringphp.readthedocs.org/en/latest) to send +HTTP requests. The `adapter` option in a `GuzzleHttp\Client` constructor +is still supported, but it has now been renamed to `handler`. Instead of +passing a `GuzzleHttp\Adapter\AdapterInterface`, you must now pass a PHP +`callable` that follows the RingPHP specification. + +## Removed Fluent Interfaces + +[Fluent interfaces were removed](http://ocramius.github.io/blog/fluent-interfaces-are-evil) +from the following classes: + +- `GuzzleHttp\Collection` +- `GuzzleHttp\Url` +- `GuzzleHttp\Query` +- `GuzzleHttp\Post\PostBody` +- `GuzzleHttp\Cookie\SetCookie` + +## Removed functions.php + +Removed "functions.php", so that Guzzle is truly PSR-4 compliant. The following +functions can be used as replacements. + +- `GuzzleHttp\json_decode` -> `GuzzleHttp\Utils::jsonDecode` +- `GuzzleHttp\get_path` -> `GuzzleHttp\Utils::getPath` +- `GuzzleHttp\Utils::setPath` -> `GuzzleHttp\set_path` +- `GuzzleHttp\Pool::batch` -> `GuzzleHttp\batch`. This function is, however, + deprecated in favor of using `GuzzleHttp\Pool::batch()`. + +The "procedural" global client has been removed with no replacement (e.g., +`GuzzleHttp\get()`, `GuzzleHttp\post()`, etc.). Use a `GuzzleHttp\Client` +object as a replacement. + +## `throwImmediately` has been removed + +The concept of "throwImmediately" has been removed from exceptions and error +events. This control mechanism was used to stop a transfer of concurrent +requests from completing. This can now be handled by throwing the exception or +by cancelling a pool of requests or each outstanding future request +individually. + +## headers event has been removed + +Removed the "headers" event. This event was only useful for changing the +body a response once the headers of the response were known. You can implement +a similar behavior in a number of ways. One example might be to use a +FnStream that has access to the transaction being sent. For example, when the +first byte is written, you could check if the response headers match your +expectations, and if so, change the actual stream body that is being +written to. + +## Updates to HTTP Messages + +Removed the `asArray` parameter from +`GuzzleHttp\Message\MessageInterface::getHeader`. If you want to get a header +value as an array, then use the newly added `getHeaderAsArray()` method of +`MessageInterface`. This change makes the Guzzle interfaces compatible with +the PSR-7 interfaces. + +3.x to 4.0 +---------- + +## Overarching changes: + +- Now requires PHP 5.4 or greater. +- No longer requires cURL to send requests. +- Guzzle no longer wraps every exception it throws. Only exceptions that are + recoverable are now wrapped by Guzzle. +- Various namespaces have been removed or renamed. +- No longer requiring the Symfony EventDispatcher. A custom event dispatcher + based on the Symfony EventDispatcher is + now utilized in `GuzzleHttp\Event\EmitterInterface` (resulting in significant + speed and functionality improvements). + +Changes per Guzzle 3.x namespace are described below. + +## Batch + +The `Guzzle\Batch` namespace has been removed. This is best left to +third-parties to implement on top of Guzzle's core HTTP library. + +## Cache + +The `Guzzle\Cache` namespace has been removed. (Todo: No suitable replacement +has been implemented yet, but hoping to utilize a PSR cache interface). + +## Common + +- Removed all of the wrapped exceptions. It's better to use the standard PHP + library for unrecoverable exceptions. +- `FromConfigInterface` has been removed. +- `Guzzle\Common\Version` has been removed. The VERSION constant can be found + at `GuzzleHttp\ClientInterface::VERSION`. + +### Collection + +- `getAll` has been removed. Use `toArray` to convert a collection to an array. +- `inject` has been removed. +- `keySearch` has been removed. +- `getPath` no longer supports wildcard expressions. Use something better like + JMESPath for this. +- `setPath` now supports appending to an existing array via the `[]` notation. + +### Events + +Guzzle no longer requires Symfony's EventDispatcher component. Guzzle now uses +`GuzzleHttp\Event\Emitter`. + +- `Symfony\Component\EventDispatcher\EventDispatcherInterface` is replaced by + `GuzzleHttp\Event\EmitterInterface`. +- `Symfony\Component\EventDispatcher\EventDispatcher` is replaced by + `GuzzleHttp\Event\Emitter`. +- `Symfony\Component\EventDispatcher\Event` is replaced by + `GuzzleHttp\Event\Event`, and Guzzle now has an EventInterface in + `GuzzleHttp\Event\EventInterface`. +- `AbstractHasDispatcher` has moved to a trait, `HasEmitterTrait`, and + `HasDispatcherInterface` has moved to `HasEmitterInterface`. Retrieving the + event emitter of a request, client, etc. now uses the `getEmitter` method + rather than the `getDispatcher` method. + +#### Emitter + +- Use the `once()` method to add a listener that automatically removes itself + the first time it is invoked. +- Use the `listeners()` method to retrieve a list of event listeners rather than + the `getListeners()` method. +- Use `emit()` instead of `dispatch()` to emit an event from an emitter. +- Use `attach()` instead of `addSubscriber()` and `detach()` instead of + `removeSubscriber()`. + +```php +$mock = new Mock(); +// 3.x +$request->getEventDispatcher()->addSubscriber($mock); +$request->getEventDispatcher()->removeSubscriber($mock); +// 4.x +$request->getEmitter()->attach($mock); +$request->getEmitter()->detach($mock); +``` + +Use the `on()` method to add a listener rather than the `addListener()` method. + +```php +// 3.x +$request->getEventDispatcher()->addListener('foo', function (Event $event) { /* ... */ } ); +// 4.x +$request->getEmitter()->on('foo', function (Event $event, $name) { /* ... */ } ); +``` + +## Http + +### General changes + +- The cacert.pem certificate has been moved to `src/cacert.pem`. +- Added the concept of adapters that are used to transfer requests over the + wire. +- Simplified the event system. +- Sending requests in parallel is still possible, but batching is no longer a + concept of the HTTP layer. Instead, you must use the `complete` and `error` + events to asynchronously manage parallel request transfers. +- `Guzzle\Http\Url` has moved to `GuzzleHttp\Url`. +- `Guzzle\Http\QueryString` has moved to `GuzzleHttp\Query`. +- QueryAggregators have been rewritten so that they are simply callable + functions. +- `GuzzleHttp\StaticClient` has been removed. Use the functions provided in + `functions.php` for an easy to use static client instance. +- Exceptions in `GuzzleHttp\Exception` have been updated to all extend from + `GuzzleHttp\Exception\TransferException`. + +### Client + +Calling methods like `get()`, `post()`, `head()`, etc. no longer create and +return a request, but rather creates a request, sends the request, and returns +the response. + +```php +// 3.0 +$request = $client->get('/'); +$response = $request->send(); + +// 4.0 +$response = $client->get('/'); + +// or, to mirror the previous behavior +$request = $client->createRequest('GET', '/'); +$response = $client->send($request); +``` + +`GuzzleHttp\ClientInterface` has changed. + +- The `send` method no longer accepts more than one request. Use `sendAll` to + send multiple requests in parallel. +- `setUserAgent()` has been removed. Use a default request option instead. You + could, for example, do something like: + `$client->setConfig('defaults/headers/User-Agent', 'Foo/Bar ' . $client::getDefaultUserAgent())`. +- `setSslVerification()` has been removed. Use default request options instead, + like `$client->setConfig('defaults/verify', true)`. + +`GuzzleHttp\Client` has changed. + +- The constructor now accepts only an associative array. You can include a + `base_url` string or array to use a URI template as the base URL of a client. + You can also specify a `defaults` key that is an associative array of default + request options. You can pass an `adapter` to use a custom adapter, + `batch_adapter` to use a custom adapter for sending requests in parallel, or + a `message_factory` to change the factory used to create HTTP requests and + responses. +- The client no longer emits a `client.create_request` event. +- Creating requests with a client no longer automatically utilize a URI + template. You must pass an array into a creational method (e.g., + `createRequest`, `get`, `put`, etc.) in order to expand a URI template. + +### Messages + +Messages no longer have references to their counterparts (i.e., a request no +longer has a reference to it's response, and a response no loger has a +reference to its request). This association is now managed through a +`GuzzleHttp\Adapter\TransactionInterface` object. You can get references to +these transaction objects using request events that are emitted over the +lifecycle of a request. + +#### Requests with a body + +- `GuzzleHttp\Message\EntityEnclosingRequest` and + `GuzzleHttp\Message\EntityEnclosingRequestInterface` have been removed. The + separation between requests that contain a body and requests that do not + contain a body has been removed, and now `GuzzleHttp\Message\RequestInterface` + handles both use cases. +- Any method that previously accepts a `GuzzleHttp\Response` object now accept a + `GuzzleHttp\Message\ResponseInterface`. +- `GuzzleHttp\Message\RequestFactoryInterface` has been renamed to + `GuzzleHttp\Message\MessageFactoryInterface`. This interface is used to create + both requests and responses and is implemented in + `GuzzleHttp\Message\MessageFactory`. +- POST field and file methods have been removed from the request object. You + must now use the methods made available to `GuzzleHttp\Post\PostBodyInterface` + to control the format of a POST body. Requests that are created using a + standard `GuzzleHttp\Message\MessageFactoryInterface` will automatically use + a `GuzzleHttp\Post\PostBody` body if the body was passed as an array or if + the method is POST and no body is provided. + +```php +$request = $client->createRequest('POST', '/'); +$request->getBody()->setField('foo', 'bar'); +$request->getBody()->addFile(new PostFile('file_key', fopen('/path/to/content', 'r'))); +``` + +#### Headers + +- `GuzzleHttp\Message\Header` has been removed. Header values are now simply + represented by an array of values or as a string. Header values are returned + as a string by default when retrieving a header value from a message. You can + pass an optional argument of `true` to retrieve a header value as an array + of strings instead of a single concatenated string. +- `GuzzleHttp\PostFile` and `GuzzleHttp\PostFileInterface` have been moved to + `GuzzleHttp\Post`. This interface has been simplified and now allows the + addition of arbitrary headers. +- Custom headers like `GuzzleHttp\Message\Header\Link` have been removed. Most + of the custom headers are now handled separately in specific + subscribers/plugins, and `GuzzleHttp\Message\HeaderValues::parseParams()` has + been updated to properly handle headers that contain parameters (like the + `Link` header). + +#### Responses + +- `GuzzleHttp\Message\Response::getInfo()` and + `GuzzleHttp\Message\Response::setInfo()` have been removed. Use the event + system to retrieve this type of information. +- `GuzzleHttp\Message\Response::getRawHeaders()` has been removed. +- `GuzzleHttp\Message\Response::getMessage()` has been removed. +- `GuzzleHttp\Message\Response::calculateAge()` and other cache specific + methods have moved to the CacheSubscriber. +- Header specific helper functions like `getContentMd5()` have been removed. + Just use `getHeader('Content-MD5')` instead. +- `GuzzleHttp\Message\Response::setRequest()` and + `GuzzleHttp\Message\Response::getRequest()` have been removed. Use the event + system to work with request and response objects as a transaction. +- `GuzzleHttp\Message\Response::getRedirectCount()` has been removed. Use the + Redirect subscriber instead. +- `GuzzleHttp\Message\Response::isSuccessful()` and other related methods have + been removed. Use `getStatusCode()` instead. + +#### Streaming responses + +Streaming requests can now be created by a client directly, returning a +`GuzzleHttp\Message\ResponseInterface` object that contains a body stream +referencing an open PHP HTTP stream. + +```php +// 3.0 +use Guzzle\Stream\PhpStreamRequestFactory; +$request = $client->get('/'); +$factory = new PhpStreamRequestFactory(); +$stream = $factory->fromRequest($request); +$data = $stream->read(1024); + +// 4.0 +$response = $client->get('/', ['stream' => true]); +// Read some data off of the stream in the response body +$data = $response->getBody()->read(1024); +``` + +#### Redirects + +The `configureRedirects()` method has been removed in favor of a +`allow_redirects` request option. + +```php +// Standard redirects with a default of a max of 5 redirects +$request = $client->createRequest('GET', '/', ['allow_redirects' => true]); + +// Strict redirects with a custom number of redirects +$request = $client->createRequest('GET', '/', [ + 'allow_redirects' => ['max' => 5, 'strict' => true] +]); +``` + +#### EntityBody + +EntityBody interfaces and classes have been removed or moved to +`GuzzleHttp\Stream`. All classes and interfaces that once required +`GuzzleHttp\EntityBodyInterface` now require +`GuzzleHttp\Stream\StreamInterface`. Creating a new body for a request no +longer uses `GuzzleHttp\EntityBody::factory` but now uses +`GuzzleHttp\Stream\Stream::factory` or even better: +`GuzzleHttp\Stream\create()`. + +- `Guzzle\Http\EntityBodyInterface` is now `GuzzleHttp\Stream\StreamInterface` +- `Guzzle\Http\EntityBody` is now `GuzzleHttp\Stream\Stream` +- `Guzzle\Http\CachingEntityBody` is now `GuzzleHttp\Stream\CachingStream` +- `Guzzle\Http\ReadLimitEntityBody` is now `GuzzleHttp\Stream\LimitStream` +- `Guzzle\Http\IoEmittyinEntityBody` has been removed. + +#### Request lifecycle events + +Requests previously submitted a large number of requests. The number of events +emitted over the lifecycle of a request has been significantly reduced to make +it easier to understand how to extend the behavior of a request. All events +emitted during the lifecycle of a request now emit a custom +`GuzzleHttp\Event\EventInterface` object that contains context providing +methods and a way in which to modify the transaction at that specific point in +time (e.g., intercept the request and set a response on the transaction). + +- `request.before_send` has been renamed to `before` and now emits a + `GuzzleHttp\Event\BeforeEvent` +- `request.complete` has been renamed to `complete` and now emits a + `GuzzleHttp\Event\CompleteEvent`. +- `request.sent` has been removed. Use `complete`. +- `request.success` has been removed. Use `complete`. +- `error` is now an event that emits a `GuzzleHttp\Event\ErrorEvent`. +- `request.exception` has been removed. Use `error`. +- `request.receive.status_line` has been removed. +- `curl.callback.progress` has been removed. Use a custom `StreamInterface` to + maintain a status update. +- `curl.callback.write` has been removed. Use a custom `StreamInterface` to + intercept writes. +- `curl.callback.read` has been removed. Use a custom `StreamInterface` to + intercept reads. + +`headers` is a new event that is emitted after the response headers of a +request have been received before the body of the response is downloaded. This +event emits a `GuzzleHttp\Event\HeadersEvent`. + +You can intercept a request and inject a response using the `intercept()` event +of a `GuzzleHttp\Event\BeforeEvent`, `GuzzleHttp\Event\CompleteEvent`, and +`GuzzleHttp\Event\ErrorEvent` event. + +See: http://docs.guzzlephp.org/en/latest/events.html + +## Inflection + +The `Guzzle\Inflection` namespace has been removed. This is not a core concern +of Guzzle. + +## Iterator + +The `Guzzle\Iterator` namespace has been removed. + +- `Guzzle\Iterator\AppendIterator`, `Guzzle\Iterator\ChunkedIterator`, and + `Guzzle\Iterator\MethodProxyIterator` are nice, but not a core requirement of + Guzzle itself. +- `Guzzle\Iterator\FilterIterator` is no longer needed because an equivalent + class is shipped with PHP 5.4. +- `Guzzle\Iterator\MapIterator` is not really needed when using PHP 5.5 because + it's easier to just wrap an iterator in a generator that maps values. + +For a replacement of these iterators, see https://github.com/nikic/iter + +## Log + +The LogPlugin has moved to https://github.com/guzzle/log-subscriber. The +`Guzzle\Log` namespace has been removed. Guzzle now relies on +`Psr\Log\LoggerInterface` for all logging. The MessageFormatter class has been +moved to `GuzzleHttp\Subscriber\Log\Formatter`. + +## Parser + +The `Guzzle\Parser` namespace has been removed. This was previously used to +make it possible to plug in custom parsers for cookies, messages, URI +templates, and URLs; however, this level of complexity is not needed in Guzzle +so it has been removed. + +- Cookie: Cookie parsing logic has been moved to + `GuzzleHttp\Cookie\SetCookie::fromString`. +- Message: Message parsing logic for both requests and responses has been moved + to `GuzzleHttp\Message\MessageFactory::fromMessage`. Message parsing is only + used in debugging or deserializing messages, so it doesn't make sense for + Guzzle as a library to add this level of complexity to parsing messages. +- UriTemplate: URI template parsing has been moved to + `GuzzleHttp\UriTemplate`. The Guzzle library will automatically use the PECL + URI template library if it is installed. +- Url: URL parsing is now performed in `GuzzleHttp\Url::fromString` (previously + it was `Guzzle\Http\Url::factory()`). If custom URL parsing is necessary, + then developers are free to subclass `GuzzleHttp\Url`. + +## Plugin + +The `Guzzle\Plugin` namespace has been renamed to `GuzzleHttp\Subscriber`. +Several plugins are shipping with the core Guzzle library under this namespace. + +- `GuzzleHttp\Subscriber\Cookie`: Replaces the old CookiePlugin. Cookie jar + code has moved to `GuzzleHttp\Cookie`. +- `GuzzleHttp\Subscriber\History`: Replaces the old HistoryPlugin. +- `GuzzleHttp\Subscriber\HttpError`: Throws errors when a bad HTTP response is + received. +- `GuzzleHttp\Subscriber\Mock`: Replaces the old MockPlugin. +- `GuzzleHttp\Subscriber\Prepare`: Prepares the body of a request just before + sending. This subscriber is attached to all requests by default. +- `GuzzleHttp\Subscriber\Redirect`: Replaces the RedirectPlugin. + +The following plugins have been removed (third-parties are free to re-implement +these if needed): + +- `GuzzleHttp\Plugin\Async` has been removed. +- `GuzzleHttp\Plugin\CurlAuth` has been removed. +- `GuzzleHttp\Plugin\ErrorResponse\ErrorResponsePlugin` has been removed. This + functionality should instead be implemented with event listeners that occur + after normal response parsing occurs in the guzzle/command package. + +The following plugins are not part of the core Guzzle package, but are provided +in separate repositories: + +- `Guzzle\Http\Plugin\BackoffPlugin` has been rewritten to be much simpler + to build custom retry policies using simple functions rather than various + chained classes. See: https://github.com/guzzle/retry-subscriber +- `Guzzle\Http\Plugin\Cache\CachePlugin` has moved to + https://github.com/guzzle/cache-subscriber +- `Guzzle\Http\Plugin\Log\LogPlugin` has moved to + https://github.com/guzzle/log-subscriber +- `Guzzle\Http\Plugin\Md5\Md5Plugin` has moved to + https://github.com/guzzle/message-integrity-subscriber +- `Guzzle\Http\Plugin\Mock\MockPlugin` has moved to + `GuzzleHttp\Subscriber\MockSubscriber`. +- `Guzzle\Http\Plugin\Oauth\OauthPlugin` has moved to + https://github.com/guzzle/oauth-subscriber + +## Service + +The service description layer of Guzzle has moved into two separate packages: + +- http://github.com/guzzle/command Provides a high level abstraction over web + services by representing web service operations using commands. +- http://github.com/guzzle/guzzle-services Provides an implementation of + guzzle/command that provides request serialization and response parsing using + Guzzle service descriptions. + +## Stream + +Stream have moved to a separate package available at +https://github.com/guzzle/streams. + +`Guzzle\Stream\StreamInterface` has been given a large update to cleanly take +on the responsibilities of `Guzzle\Http\EntityBody` and +`Guzzle\Http\EntityBodyInterface` now that they have been removed. The number +of methods implemented by the `StreamInterface` has been drastically reduced to +allow developers to more easily extend and decorate stream behavior. + +## Removed methods from StreamInterface + +- `getStream` and `setStream` have been removed to better encapsulate streams. +- `getMetadata` and `setMetadata` have been removed in favor of + `GuzzleHttp\Stream\MetadataStreamInterface`. +- `getWrapper`, `getWrapperData`, `getStreamType`, and `getUri` have all been + removed. This data is accessible when + using streams that implement `GuzzleHttp\Stream\MetadataStreamInterface`. +- `rewind` has been removed. Use `seek(0)` for a similar behavior. + +## Renamed methods + +- `detachStream` has been renamed to `detach`. +- `feof` has been renamed to `eof`. +- `ftell` has been renamed to `tell`. +- `readLine` has moved from an instance method to a static class method of + `GuzzleHttp\Stream\Stream`. + +## Metadata streams + +`GuzzleHttp\Stream\MetadataStreamInterface` has been added to denote streams +that contain additional metadata accessible via `getMetadata()`. +`GuzzleHttp\Stream\StreamInterface::getMetadata` and +`GuzzleHttp\Stream\StreamInterface::setMetadata` have been removed. + +## StreamRequestFactory + +The entire concept of the StreamRequestFactory has been removed. The way this +was used in Guzzle 3 broke the actual interface of sending streaming requests +(instead of getting back a Response, you got a StreamInterface). Streaming +PHP requests are now implemented through the `GuzzleHttp\Adapter\StreamAdapter`. + +3.6 to 3.7 +---------- + +### Deprecations + +- You can now enable E_USER_DEPRECATED warnings to see if you are using any deprecated methods.: + +```php +\Guzzle\Common\Version::$emitWarnings = true; +``` + +The following APIs and options have been marked as deprecated: + +- Marked `Guzzle\Http\Message\Request::isResponseBodyRepeatable()` as deprecated. Use `$request->getResponseBody()->isRepeatable()` instead. +- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +- Marked `Guzzle\Http\Message\Request::canCache()` as deprecated. Use `Guzzle\Plugin\Cache\DefaultCanCacheStrategy->canCacheRequest()` instead. +- Marked `Guzzle\Http\Message\Request::setIsRedirect()` as deprecated. Use the HistoryPlugin instead. +- Marked `Guzzle\Http\Message\Request::isRedirect()` as deprecated. Use the HistoryPlugin instead. +- Marked `Guzzle\Cache\CacheAdapterFactory::factory()` as deprecated +- Marked `Guzzle\Service\Client::enableMagicMethods()` as deprecated. Magic methods can no longer be disabled on a Guzzle\Service\Client. +- Marked `Guzzle\Parser\Url\UrlParser` as deprecated. Just use PHP's `parse_url()` and percent encode your UTF-8. +- Marked `Guzzle\Common\Collection::inject()` as deprecated. +- Marked `Guzzle\Plugin\CurlAuth\CurlAuthPlugin` as deprecated. Use + `$client->getConfig()->setPath('request.options/auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` or + `$client->setDefaultOption('auth', array('user', 'pass', 'Basic|Digest|NTLM|Any'));` + +3.7 introduces `request.options` as a parameter for a client configuration and as an optional argument to all creational +request methods. When paired with a client's configuration settings, these options allow you to specify default settings +for various aspects of a request. Because these options make other previous configuration options redundant, several +configuration options and methods of a client and AbstractCommand have been deprecated. + +- Marked `Guzzle\Service\Client::getDefaultHeaders()` as deprecated. Use `$client->getDefaultOption('headers')`. +- Marked `Guzzle\Service\Client::setDefaultHeaders()` as deprecated. Use `$client->setDefaultOption('headers/{header_name}', 'value')`. +- Marked 'request.params' for `Guzzle\Http\Client` as deprecated. Use `$client->setDefaultOption('params/{param_name}', 'value')` +- Marked 'command.headers', 'command.response_body' and 'command.on_complete' as deprecated for AbstractCommand. These will work through Guzzle 4.0 + + $command = $client->getCommand('foo', array( + 'command.headers' => array('Test' => '123'), + 'command.response_body' => '/path/to/file' + )); + + // Should be changed to: + + $command = $client->getCommand('foo', array( + 'command.request_options' => array( + 'headers' => array('Test' => '123'), + 'save_as' => '/path/to/file' + ) + )); + +### Interface changes + +Additions and changes (you will need to update any implementations or subclasses you may have created): + +- Added an `$options` argument to the end of the following methods of `Guzzle\Http\ClientInterface`: + createRequest, head, delete, put, patch, post, options, prepareRequest +- Added an `$options` argument to the end of `Guzzle\Http\Message\Request\RequestFactoryInterface::createRequest()` +- Added an `applyOptions()` method to `Guzzle\Http\Message\Request\RequestFactoryInterface` +- Changed `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $body = null)` to + `Guzzle\Http\ClientInterface::get($uri = null, $headers = null, $options = array())`. You can still pass in a + resource, string, or EntityBody into the $options parameter to specify the download location of the response. +- Changed `Guzzle\Common\Collection::__construct($data)` to no longer accepts a null value for `$data` but a + default `array()` +- Added `Guzzle\Stream\StreamInterface::isRepeatable` +- Made `Guzzle\Http\Client::expandTemplate` and `getUriTemplate` protected methods. + +The following methods were removed from interfaces. All of these methods are still available in the concrete classes +that implement them, but you should update your code to use alternative methods: + +- Removed `Guzzle\Http\ClientInterface::setDefaultHeaders(). Use + `$client->getConfig()->setPath('request.options/headers/{header_name}', 'value')`. or + `$client->getConfig()->setPath('request.options/headers', array('header_name' => 'value'))` or + `$client->setDefaultOption('headers/{header_name}', 'value')`. or + `$client->setDefaultOption('headers', array('header_name' => 'value'))`. +- Removed `Guzzle\Http\ClientInterface::getDefaultHeaders(). Use `$client->getConfig()->getPath('request.options/headers')`. +- Removed `Guzzle\Http\ClientInterface::expandTemplate()`. This is an implementation detail. +- Removed `Guzzle\Http\ClientInterface::setRequestFactory()`. This is an implementation detail. +- Removed `Guzzle\Http\ClientInterface::getCurlMulti()`. This is a very specific implementation detail. +- Removed `Guzzle\Http\Message\RequestInterface::canCache`. Use the CachePlugin. +- Removed `Guzzle\Http\Message\RequestInterface::setIsRedirect`. Use the HistoryPlugin. +- Removed `Guzzle\Http\Message\RequestInterface::isRedirect`. Use the HistoryPlugin. + +### Cache plugin breaking changes + +- CacheKeyProviderInterface and DefaultCacheKeyProvider are no longer used. All of this logic is handled in a + CacheStorageInterface. These two objects and interface will be removed in a future version. +- Always setting X-cache headers on cached responses +- Default cache TTLs are now handled by the CacheStorageInterface of a CachePlugin +- `CacheStorageInterface::cache($key, Response $response, $ttl = null)` has changed to `cache(RequestInterface + $request, Response $response);` +- `CacheStorageInterface::fetch($key)` has changed to `fetch(RequestInterface $request);` +- `CacheStorageInterface::delete($key)` has changed to `delete(RequestInterface $request);` +- Added `CacheStorageInterface::purge($url)` +- `DefaultRevalidation::__construct(CacheKeyProviderInterface $cacheKey, CacheStorageInterface $cache, CachePlugin + $plugin)` has changed to `DefaultRevalidation::__construct(CacheStorageInterface $cache, + CanCacheStrategyInterface $canCache = null)` +- Added `RevalidationInterface::shouldRevalidate(RequestInterface $request, Response $response)` + +3.5 to 3.6 +---------- + +* Mixed casing of headers are now forced to be a single consistent casing across all values for that header. +* Messages internally use a HeaderCollection object to delegate handling case-insensitive header resolution +* Removed the whole changedHeader() function system of messages because all header changes now go through addHeader(). + For example, setHeader() first removes the header using unset on a HeaderCollection and then calls addHeader(). + Keeping the Host header and URL host in sync is now handled by overriding the addHeader method in Request. +* Specific header implementations can be created for complex headers. When a message creates a header, it uses a + HeaderFactory which can map specific headers to specific header classes. There is now a Link header and + CacheControl header implementation. +* Moved getLinks() from Response to just be used on a Link header object. + +If you previously relied on Guzzle\Http\Message\Header::raw(), then you will need to update your code to use the +HeaderInterface (e.g. toArray(), getAll(), etc.). + +### Interface changes + +* Removed from interface: Guzzle\Http\ClientInterface::setUriTemplate +* Removed from interface: Guzzle\Http\ClientInterface::setCurlMulti() +* Removed Guzzle\Http\Message\Request::receivedRequestHeader() and implemented this functionality in + Guzzle\Http\Curl\RequestMediator +* Removed the optional $asString parameter from MessageInterface::getHeader(). Just cast the header to a string. +* Removed the optional $tryChunkedTransfer option from Guzzle\Http\Message\EntityEnclosingRequestInterface +* Removed the $asObjects argument from Guzzle\Http\Message\MessageInterface::getHeaders() + +### Removed deprecated functions + +* Removed Guzzle\Parser\ParserRegister::get(). Use getParser() +* Removed Guzzle\Parser\ParserRegister::set(). Use registerParser(). + +### Deprecations + +* The ability to case-insensitively search for header values +* Guzzle\Http\Message\Header::hasExactHeader +* Guzzle\Http\Message\Header::raw. Use getAll() +* Deprecated cache control specific methods on Guzzle\Http\Message\AbstractMessage. Use the CacheControl header object + instead. + +### Other changes + +* All response header helper functions return a string rather than mixing Header objects and strings inconsistently +* Removed cURL blacklist support. This is no longer necessary now that Expect, Accept, etc. are managed by Guzzle + directly via interfaces +* Removed the injecting of a request object onto a response object. The methods to get and set a request still exist + but are a no-op until removed. +* Most classes that used to require a `Guzzle\Service\Command\CommandInterface` typehint now request a + `Guzzle\Service\Command\ArrayCommandInterface`. +* Added `Guzzle\Http\Message\RequestInterface::startResponse()` to the RequestInterface to handle injecting a response + on a request while the request is still being transferred +* `Guzzle\Service\Command\CommandInterface` now extends from ToArrayInterface and ArrayAccess + +3.3 to 3.4 +---------- + +Base URLs of a client now follow the rules of http://tools.ietf.org/html/rfc3986#section-5.2.2 when merging URLs. + +3.2 to 3.3 +---------- + +### Response::getEtag() quote stripping removed + +`Guzzle\Http\Message\Response::getEtag()` no longer strips quotes around the ETag response header + +### Removed `Guzzle\Http\Utils` + +The `Guzzle\Http\Utils` class was removed. This class was only used for testing. + +### Stream wrapper and type + +`Guzzle\Stream\Stream::getWrapper()` and `Guzzle\Stream\Stream::getStreamType()` are no longer converted to lowercase. + +### curl.emit_io became emit_io + +Emitting IO events from a RequestMediator is now a parameter that must be set in a request's curl options using the +'emit_io' key. This was previously set under a request's parameters using 'curl.emit_io' + +3.1 to 3.2 +---------- + +### CurlMulti is no longer reused globally + +Before 3.2, the same CurlMulti object was reused globally for each client. This can cause issue where plugins added +to a single client can pollute requests dispatched from other clients. + +If you still wish to reuse the same CurlMulti object with each client, then you can add a listener to the +ServiceBuilder's `service_builder.create_client` event to inject a custom CurlMulti object into each client as it is +created. + +```php +$multi = new Guzzle\Http\Curl\CurlMulti(); +$builder = Guzzle\Service\Builder\ServiceBuilder::factory('/path/to/config.json'); +$builder->addListener('service_builder.create_client', function ($event) use ($multi) { + $event['client']->setCurlMulti($multi); +} +}); +``` + +### No default path + +URLs no longer have a default path value of '/' if no path was specified. + +Before: + +```php +$request = $client->get('http://www.foo.com'); +echo $request->getUrl(); +// >> http://www.foo.com/ +``` + +After: + +```php +$request = $client->get('http://www.foo.com'); +echo $request->getUrl(); +// >> http://www.foo.com +``` + +### Less verbose BadResponseException + +The exception message for `Guzzle\Http\Exception\BadResponseException` no longer contains the full HTTP request and +response information. You can, however, get access to the request and response object by calling `getRequest()` or +`getResponse()` on the exception object. + +### Query parameter aggregation + +Multi-valued query parameters are no longer aggregated using a callback function. `Guzzle\Http\Query` now has a +setAggregator() method that accepts a `Guzzle\Http\QueryAggregator\QueryAggregatorInterface` object. This object is +responsible for handling the aggregation of multi-valued query string variables into a flattened hash. + +2.8 to 3.x +---------- + +### Guzzle\Service\Inspector + +Change `\Guzzle\Service\Inspector::fromConfig` to `\Guzzle\Common\Collection::fromConfig` + +**Before** + +```php +use Guzzle\Service\Inspector; + +class YourClient extends \Guzzle\Service\Client +{ + public static function factory($config = array()) + { + $default = array(); + $required = array('base_url', 'username', 'api_key'); + $config = Inspector::fromConfig($config, $default, $required); + + $client = new self( + $config->get('base_url'), + $config->get('username'), + $config->get('api_key') + ); + $client->setConfig($config); + + $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json')); + + return $client; + } +``` + +**After** + +```php +use Guzzle\Common\Collection; + +class YourClient extends \Guzzle\Service\Client +{ + public static function factory($config = array()) + { + $default = array(); + $required = array('base_url', 'username', 'api_key'); + $config = Collection::fromConfig($config, $default, $required); + + $client = new self( + $config->get('base_url'), + $config->get('username'), + $config->get('api_key') + ); + $client->setConfig($config); + + $client->setDescription(ServiceDescription::factory(__DIR__ . DIRECTORY_SEPARATOR . 'client.json')); + + return $client; + } +``` + +### Convert XML Service Descriptions to JSON + +**Before** + +```xml + + + + + + Get a list of groups + + + Uses a search query to get a list of groups + + + + Create a group + + + + + Delete a group by ID + + + + + + + Update a group + + + + + + +``` + +**After** + +```json +{ + "name": "Zendesk REST API v2", + "apiVersion": "2012-12-31", + "description":"Provides access to Zendesk views, groups, tickets, ticket fields, and users", + "operations": { + "list_groups": { + "httpMethod":"GET", + "uri": "groups.json", + "summary": "Get a list of groups" + }, + "search_groups":{ + "httpMethod":"GET", + "uri": "search.json?query=\"{query} type:group\"", + "summary": "Uses a search query to get a list of groups", + "parameters":{ + "query":{ + "location": "uri", + "description":"Zendesk Search Query", + "type": "string", + "required": true + } + } + }, + "create_group": { + "httpMethod":"POST", + "uri": "groups.json", + "summary": "Create a group", + "parameters":{ + "data": { + "type": "array", + "location": "body", + "description":"Group JSON", + "filters": "json_encode", + "required": true + }, + "Content-Type":{ + "type": "string", + "location":"header", + "static": "application/json" + } + } + }, + "delete_group": { + "httpMethod":"DELETE", + "uri": "groups/{id}.json", + "summary": "Delete a group", + "parameters":{ + "id":{ + "location": "uri", + "description":"Group to delete by ID", + "type": "integer", + "required": true + } + } + }, + "get_group": { + "httpMethod":"GET", + "uri": "groups/{id}.json", + "summary": "Get a ticket", + "parameters":{ + "id":{ + "location": "uri", + "description":"Group to get by ID", + "type": "integer", + "required": true + } + } + }, + "update_group": { + "httpMethod":"PUT", + "uri": "groups/{id}.json", + "summary": "Update a group", + "parameters":{ + "id": { + "location": "uri", + "description":"Group to update by ID", + "type": "integer", + "required": true + }, + "data": { + "type": "array", + "location": "body", + "description":"Group JSON", + "filters": "json_encode", + "required": true + }, + "Content-Type":{ + "type": "string", + "location":"header", + "static": "application/json" + } + } + } +} +``` + +### Guzzle\Service\Description\ServiceDescription + +Commands are now called Operations + +**Before** + +```php +use Guzzle\Service\Description\ServiceDescription; + +$sd = new ServiceDescription(); +$sd->getCommands(); // @returns ApiCommandInterface[] +$sd->hasCommand($name); +$sd->getCommand($name); // @returns ApiCommandInterface|null +$sd->addCommand($command); // @param ApiCommandInterface $command +``` + +**After** + +```php +use Guzzle\Service\Description\ServiceDescription; + +$sd = new ServiceDescription(); +$sd->getOperations(); // @returns OperationInterface[] +$sd->hasOperation($name); +$sd->getOperation($name); // @returns OperationInterface|null +$sd->addOperation($operation); // @param OperationInterface $operation +``` + +### Guzzle\Common\Inflection\Inflector + +Namespace is now `Guzzle\Inflection\Inflector` + +### Guzzle\Http\Plugin + +Namespace is now `Guzzle\Plugin`. Many other changes occur within this namespace and are detailed in their own sections below. + +### Guzzle\Http\Plugin\LogPlugin and Guzzle\Common\Log + +Now `Guzzle\Plugin\Log\LogPlugin` and `Guzzle\Log` respectively. + +**Before** + +```php +use Guzzle\Common\Log\ClosureLogAdapter; +use Guzzle\Http\Plugin\LogPlugin; + +/** @var \Guzzle\Http\Client */ +$client; + +// $verbosity is an integer indicating desired message verbosity level +$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $verbosity = LogPlugin::LOG_VERBOSE); +``` + +**After** + +```php +use Guzzle\Log\ClosureLogAdapter; +use Guzzle\Log\MessageFormatter; +use Guzzle\Plugin\Log\LogPlugin; + +/** @var \Guzzle\Http\Client */ +$client; + +// $format is a string indicating desired message format -- @see MessageFormatter +$client->addSubscriber(new LogPlugin(new ClosureLogAdapter(function($m) { echo $m; }, $format = MessageFormatter::DEBUG_FORMAT); +``` + +### Guzzle\Http\Plugin\CurlAuthPlugin + +Now `Guzzle\Plugin\CurlAuth\CurlAuthPlugin`. + +### Guzzle\Http\Plugin\ExponentialBackoffPlugin + +Now `Guzzle\Plugin\Backoff\BackoffPlugin`, and other changes. + +**Before** + +```php +use Guzzle\Http\Plugin\ExponentialBackoffPlugin; + +$backoffPlugin = new ExponentialBackoffPlugin($maxRetries, array_merge( + ExponentialBackoffPlugin::getDefaultFailureCodes(), array(429) + )); + +$client->addSubscriber($backoffPlugin); +``` + +**After** + +```php +use Guzzle\Plugin\Backoff\BackoffPlugin; +use Guzzle\Plugin\Backoff\HttpBackoffStrategy; + +// Use convenient factory method instead -- see implementation for ideas of what +// you can do with chaining backoff strategies +$backoffPlugin = BackoffPlugin::getExponentialBackoff($maxRetries, array_merge( + HttpBackoffStrategy::getDefaultFailureCodes(), array(429) + )); +$client->addSubscriber($backoffPlugin); +``` + +### Known Issues + +#### [BUG] Accept-Encoding header behavior changed unintentionally. + +(See #217) (Fixed in 09daeb8c666fb44499a0646d655a8ae36456575e) + +In version 2.8 setting the `Accept-Encoding` header would set the CURLOPT_ENCODING option, which permitted cURL to +properly handle gzip/deflate compressed responses from the server. In versions affected by this bug this does not happen. +See issue #217 for a workaround, or use a version containing the fix. diff --git a/base/vendor/guzzlehttp/guzzle/composer.json b/base/vendor/guzzlehttp/guzzle/composer.json new file mode 100644 index 00000000..bbf0ff20 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/composer.json @@ -0,0 +1,59 @@ +{ + "name": "guzzlehttp/guzzle", + "type": "library", + "description": "Guzzle is a PHP HTTP client library", + "keywords": [ + "framework", + "http", + "rest", + "web service", + "curl", + "client", + "HTTP client" + ], + "homepage": "http://guzzlephp.org/", + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.5", + "ext-json": "*", + "guzzlehttp/promises": "^1.0", + "guzzlehttp/psr7": "^1.6.1" + }, + "require-dev": { + "ext-curl": "*", + "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.4 || ^7.0", + "psr/log": "^1.1" + }, + "suggest": { + "psr/log": "Required for using the Log middleware", + "ext-intl": "Required for Internationalized Domain Name (IDN) support" + }, + "config": { + "sort-packages": true + }, + "extra": { + "branch-alias": { + "dev-master": "6.5-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "autoload-dev": { + "psr-4": { + "GuzzleHttp\\Tests\\": "tests/" + } + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Client.php b/base/vendor/guzzlehttp/guzzle/src/Client.php new file mode 100644 index 00000000..f2bf2044 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Client.php @@ -0,0 +1,511 @@ + 'http://www.foo.com/1.0/', + * 'timeout' => 0, + * 'allow_redirects' => false, + * 'proxy' => '192.168.16.1:10' + * ]); + * + * Client configuration settings include the following options: + * + * - handler: (callable) Function that transfers HTTP requests over the + * wire. The function is called with a Psr7\Http\Message\RequestInterface + * and array of transfer options, and must return a + * GuzzleHttp\Promise\PromiseInterface that is fulfilled with a + * Psr7\Http\Message\ResponseInterface on success. "handler" is a + * constructor only option that cannot be overridden in per/request + * options. If no handler is provided, a default handler will be created + * that enables all of the request options below by attaching all of the + * default middleware to the handler. + * - base_uri: (string|UriInterface) Base URI of the client that is merged + * into relative URIs. Can be a string or instance of UriInterface. + * - **: any request option + * + * @param array $config Client configuration settings. + * + * @see \GuzzleHttp\RequestOptions for a list of available request options. + */ + public function __construct(array $config = []) + { + if (!isset($config['handler'])) { + $config['handler'] = HandlerStack::create(); + } elseif (!is_callable($config['handler'])) { + throw new \InvalidArgumentException('handler must be a callable'); + } + + // Convert the base_uri to a UriInterface + if (isset($config['base_uri'])) { + $config['base_uri'] = Psr7\uri_for($config['base_uri']); + } + + $this->configureDefaults($config); + } + + /** + * @param string $method + * @param array $args + * + * @return Promise\PromiseInterface + */ + public function __call($method, $args) + { + if (count($args) < 1) { + throw new \InvalidArgumentException('Magic request methods require a URI and optional options array'); + } + + $uri = $args[0]; + $opts = isset($args[1]) ? $args[1] : []; + + return substr($method, -5) === 'Async' + ? $this->requestAsync(substr($method, 0, -5), $uri, $opts) + : $this->request($method, $uri, $opts); + } + + /** + * Asynchronously send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + * + * @return Promise\PromiseInterface + */ + public function sendAsync(RequestInterface $request, array $options = []) + { + // Merge the base URI into the request URI if needed. + $options = $this->prepareDefaults($options); + + return $this->transfer( + $request->withUri($this->buildUri($request->getUri(), $options), $request->hasHeader('Host')), + $options + ); + } + + /** + * Send an HTTP request. + * + * @param array $options Request options to apply to the given + * request and to the transfer. See \GuzzleHttp\RequestOptions. + * + * @return ResponseInterface + * @throws GuzzleException + */ + public function send(RequestInterface $request, array $options = []) + { + $options[RequestOptions::SYNCHRONOUS] = true; + return $this->sendAsync($request, $options)->wait(); + } + + /** + * Create and send an asynchronous HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. Use an array to provide a URL + * template and additional variables to use in the URL template expansion. + * + * @param string $method HTTP method + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + * + * @return Promise\PromiseInterface + */ + public function requestAsync($method, $uri = '', array $options = []) + { + $options = $this->prepareDefaults($options); + // Remove request modifying parameter because it can be done up-front. + $headers = isset($options['headers']) ? $options['headers'] : []; + $body = isset($options['body']) ? $options['body'] : null; + $version = isset($options['version']) ? $options['version'] : '1.1'; + // Merge the URI into the base URI. + $uri = $this->buildUri($uri, $options); + if (is_array($body)) { + $this->invalidBody(); + } + $request = new Psr7\Request($method, $uri, $headers, $body, $version); + // Remove the option so that they are not doubly-applied. + unset($options['headers'], $options['body'], $options['version']); + + return $this->transfer($request, $options); + } + + /** + * Create and send an HTTP request. + * + * Use an absolute path to override the base path of the client, or a + * relative path to append to the base path of the client. The URL can + * contain the query string as well. + * + * @param string $method HTTP method. + * @param string|UriInterface $uri URI object or string. + * @param array $options Request options to apply. See \GuzzleHttp\RequestOptions. + * + * @return ResponseInterface + * @throws GuzzleException + */ + public function request($method, $uri = '', array $options = []) + { + $options[RequestOptions::SYNCHRONOUS] = true; + return $this->requestAsync($method, $uri, $options)->wait(); + } + + /** + * Get a client configuration option. + * + * These options include default request options of the client, a "handler" + * (if utilized by the concrete client), and a "base_uri" if utilized by + * the concrete client. + * + * @param string|null $option The config option to retrieve. + * + * @return mixed + */ + public function getConfig($option = null) + { + return $option === null + ? $this->config + : (isset($this->config[$option]) ? $this->config[$option] : null); + } + + /** + * @param string|null $uri + * + * @return UriInterface + */ + private function buildUri($uri, array $config) + { + // for BC we accept null which would otherwise fail in uri_for + $uri = Psr7\uri_for($uri === null ? '' : $uri); + + if (isset($config['base_uri'])) { + $uri = Psr7\UriResolver::resolve(Psr7\uri_for($config['base_uri']), $uri); + } + + if (isset($config['idn_conversion']) && ($config['idn_conversion'] !== false)) { + $idnOptions = ($config['idn_conversion'] === true) ? IDNA_DEFAULT : $config['idn_conversion']; + $uri = _idn_uri_convert($uri, $idnOptions); + } + + return $uri->getScheme() === '' && $uri->getHost() !== '' ? $uri->withScheme('http') : $uri; + } + + /** + * Configures the default options for a client. + * + * @param array $config + * @return void + */ + private function configureDefaults(array $config) + { + $defaults = [ + 'allow_redirects' => RedirectMiddleware::$defaultSettings, + 'http_errors' => true, + 'decode_content' => true, + 'verify' => true, + 'cookies' => false + ]; + + // idn_to_ascii() is a part of ext-intl and might be not available + $defaults['idn_conversion'] = function_exists('idn_to_ascii') + // Old ICU versions don't have this constant, so we are basically stuck (see https://github.com/guzzle/guzzle/pull/2424 + // and https://github.com/guzzle/guzzle/issues/2448 for details) + && ( + defined('INTL_IDNA_VARIANT_UTS46') + || + PHP_VERSION_ID < 70200 + ); + + // Use the standard Linux HTTP_PROXY and HTTPS_PROXY if set. + + // We can only trust the HTTP_PROXY environment variable in a CLI + // process due to the fact that PHP has no reliable mechanism to + // get environment variables that start with "HTTP_". + if (php_sapi_name() === 'cli' && getenv('HTTP_PROXY')) { + $defaults['proxy']['http'] = getenv('HTTP_PROXY'); + } + + if ($proxy = getenv('HTTPS_PROXY')) { + $defaults['proxy']['https'] = $proxy; + } + + if ($noProxy = getenv('NO_PROXY')) { + $cleanedNoProxy = str_replace(' ', '', $noProxy); + $defaults['proxy']['no'] = explode(',', $cleanedNoProxy); + } + + $this->config = $config + $defaults; + + if (!empty($config['cookies']) && $config['cookies'] === true) { + $this->config['cookies'] = new CookieJar(); + } + + // Add the default user-agent header. + if (!isset($this->config['headers'])) { + $this->config['headers'] = ['User-Agent' => default_user_agent()]; + } else { + // Add the User-Agent header if one was not already set. + foreach (array_keys($this->config['headers']) as $name) { + if (strtolower($name) === 'user-agent') { + return; + } + } + $this->config['headers']['User-Agent'] = default_user_agent(); + } + } + + /** + * Merges default options into the array. + * + * @param array $options Options to modify by reference + * + * @return array + */ + private function prepareDefaults(array $options) + { + $defaults = $this->config; + + if (!empty($defaults['headers'])) { + // Default headers are only added if they are not present. + $defaults['_conditional'] = $defaults['headers']; + unset($defaults['headers']); + } + + // Special handling for headers is required as they are added as + // conditional headers and as headers passed to a request ctor. + if (array_key_exists('headers', $options)) { + // Allows default headers to be unset. + if ($options['headers'] === null) { + $defaults['_conditional'] = []; + unset($options['headers']); + } elseif (!is_array($options['headers'])) { + throw new \InvalidArgumentException('headers must be an array'); + } + } + + // Shallow merge defaults underneath options. + $result = $options + $defaults; + + // Remove null values. + foreach ($result as $k => $v) { + if ($v === null) { + unset($result[$k]); + } + } + + return $result; + } + + /** + * Transfers the given request and applies request options. + * + * The URI of the request is not modified and the request options are used + * as-is without merging in default options. + * + * @param array $options See \GuzzleHttp\RequestOptions. + * + * @return Promise\PromiseInterface + */ + private function transfer(RequestInterface $request, array $options) + { + // save_to -> sink + if (isset($options['save_to'])) { + $options['sink'] = $options['save_to']; + unset($options['save_to']); + } + + // exceptions -> http_errors + if (isset($options['exceptions'])) { + $options['http_errors'] = $options['exceptions']; + unset($options['exceptions']); + } + + $request = $this->applyOptions($request, $options); + /** @var HandlerStack $handler */ + $handler = $options['handler']; + + try { + return Promise\promise_for($handler($request, $options)); + } catch (\Exception $e) { + return Promise\rejection_for($e); + } + } + + /** + * Applies the array of request options to a request. + * + * @param RequestInterface $request + * @param array $options + * + * @return RequestInterface + */ + private function applyOptions(RequestInterface $request, array &$options) + { + $modify = [ + 'set_headers' => [], + ]; + + if (isset($options['headers'])) { + $modify['set_headers'] = $options['headers']; + unset($options['headers']); + } + + if (isset($options['form_params'])) { + if (isset($options['multipart'])) { + throw new \InvalidArgumentException('You cannot use ' + . 'form_params and multipart at the same time. Use the ' + . 'form_params option if you want to send application/' + . 'x-www-form-urlencoded requests, and the multipart ' + . 'option to send multipart/form-data requests.'); + } + $options['body'] = http_build_query($options['form_params'], '', '&'); + unset($options['form_params']); + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); + $options['_conditional']['Content-Type'] = 'application/x-www-form-urlencoded'; + } + + if (isset($options['multipart'])) { + $options['body'] = new Psr7\MultipartStream($options['multipart']); + unset($options['multipart']); + } + + if (isset($options['json'])) { + $options['body'] = \GuzzleHttp\json_encode($options['json']); + unset($options['json']); + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); + $options['_conditional']['Content-Type'] = 'application/json'; + } + + if (!empty($options['decode_content']) + && $options['decode_content'] !== true + ) { + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Accept-Encoding'], $options['_conditional']); + $modify['set_headers']['Accept-Encoding'] = $options['decode_content']; + } + + if (isset($options['body'])) { + if (is_array($options['body'])) { + $this->invalidBody(); + } + $modify['body'] = Psr7\stream_for($options['body']); + unset($options['body']); + } + + if (!empty($options['auth']) && is_array($options['auth'])) { + $value = $options['auth']; + $type = isset($value[2]) ? strtolower($value[2]) : 'basic'; + switch ($type) { + case 'basic': + // Ensure that we don't have the header in different case and set the new value. + $modify['set_headers'] = Psr7\_caseless_remove(['Authorization'], $modify['set_headers']); + $modify['set_headers']['Authorization'] = 'Basic ' + . base64_encode("$value[0]:$value[1]"); + break; + case 'digest': + // @todo: Do not rely on curl + $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_DIGEST; + $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]"; + break; + case 'ntlm': + $options['curl'][CURLOPT_HTTPAUTH] = CURLAUTH_NTLM; + $options['curl'][CURLOPT_USERPWD] = "$value[0]:$value[1]"; + break; + } + } + + if (isset($options['query'])) { + $value = $options['query']; + if (is_array($value)) { + $value = http_build_query($value, null, '&', PHP_QUERY_RFC3986); + } + if (!is_string($value)) { + throw new \InvalidArgumentException('query must be a string or array'); + } + $modify['query'] = $value; + unset($options['query']); + } + + // Ensure that sink is not an invalid value. + if (isset($options['sink'])) { + // TODO: Add more sink validation? + if (is_bool($options['sink'])) { + throw new \InvalidArgumentException('sink must not be a boolean'); + } + } + + $request = Psr7\modify_request($request, $modify); + if ($request->getBody() instanceof Psr7\MultipartStream) { + // Use a multipart/form-data POST if a Content-Type is not set. + // Ensure that we don't have the header in different case and set the new value. + $options['_conditional'] = Psr7\_caseless_remove(['Content-Type'], $options['_conditional']); + $options['_conditional']['Content-Type'] = 'multipart/form-data; boundary=' + . $request->getBody()->getBoundary(); + } + + // Merge in conditional headers if they are not present. + if (isset($options['_conditional'])) { + // Build up the changes so it's in a single clone of the message. + $modify = []; + foreach ($options['_conditional'] as $k => $v) { + if (!$request->hasHeader($k)) { + $modify['set_headers'][$k] = $v; + } + } + $request = Psr7\modify_request($request, $modify); + // Don't pass this internal value along to middleware/handlers. + unset($options['_conditional']); + } + + return $request; + } + + /** + * Throw Exception with pre-set message. + * @return void + * @throws InvalidArgumentException Invalid body. + */ + private function invalidBody() + { + throw new \InvalidArgumentException('Passing in the "body" request ' + . 'option as an array to send a POST request has been deprecated. ' + . 'Please use the "form_params" request option to send a ' + . 'application/x-www-form-urlencoded request, or the "multipart" ' + . 'request option to send a multipart/form-data request.'); + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/ClientInterface.php b/base/vendor/guzzlehttp/guzzle/src/ClientInterface.php new file mode 100644 index 00000000..0c8d42a1 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/ClientInterface.php @@ -0,0 +1,87 @@ +strictMode = $strictMode; + + foreach ($cookieArray as $cookie) { + if (!($cookie instanceof SetCookie)) { + $cookie = new SetCookie($cookie); + } + $this->setCookie($cookie); + } + } + + /** + * Create a new Cookie jar from an associative array and domain. + * + * @param array $cookies Cookies to create the jar from + * @param string $domain Domain to set the cookies to + * + * @return self + */ + public static function fromArray(array $cookies, $domain) + { + $cookieJar = new self(); + foreach ($cookies as $name => $value) { + $cookieJar->setCookie(new SetCookie([ + 'Domain' => $domain, + 'Name' => $name, + 'Value' => $value, + 'Discard' => true + ])); + } + + return $cookieJar; + } + + /** + * @deprecated + */ + public static function getCookieValue($value) + { + return $value; + } + + /** + * Evaluate if this cookie should be persisted to storage + * that survives between requests. + * + * @param SetCookie $cookie Being evaluated. + * @param bool $allowSessionCookies If we should persist session cookies + * @return bool + */ + public static function shouldPersist( + SetCookie $cookie, + $allowSessionCookies = false + ) { + if ($cookie->getExpires() || $allowSessionCookies) { + if (!$cookie->getDiscard()) { + return true; + } + } + + return false; + } + + /** + * Finds and returns the cookie based on the name + * + * @param string $name cookie name to search for + * @return SetCookie|null cookie that was found or null if not found + */ + public function getCookieByName($name) + { + // don't allow a non string name + if ($name === null || !is_scalar($name)) { + return null; + } + foreach ($this->cookies as $cookie) { + if ($cookie->getName() !== null && strcasecmp($cookie->getName(), $name) === 0) { + return $cookie; + } + } + + return null; + } + + public function toArray() + { + return array_map(function (SetCookie $cookie) { + return $cookie->toArray(); + }, $this->getIterator()->getArrayCopy()); + } + + public function clear($domain = null, $path = null, $name = null) + { + if (!$domain) { + $this->cookies = []; + return; + } elseif (!$path) { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) use ($domain) { + return !$cookie->matchesDomain($domain); + } + ); + } elseif (!$name) { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) use ($path, $domain) { + return !($cookie->matchesPath($path) && + $cookie->matchesDomain($domain)); + } + ); + } else { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) use ($path, $domain, $name) { + return !($cookie->getName() == $name && + $cookie->matchesPath($path) && + $cookie->matchesDomain($domain)); + } + ); + } + } + + public function clearSessionCookies() + { + $this->cookies = array_filter( + $this->cookies, + function (SetCookie $cookie) { + return !$cookie->getDiscard() && $cookie->getExpires(); + } + ); + } + + public function setCookie(SetCookie $cookie) + { + // If the name string is empty (but not 0), ignore the set-cookie + // string entirely. + $name = $cookie->getName(); + if (!$name && $name !== '0') { + return false; + } + + // Only allow cookies with set and valid domain, name, value + $result = $cookie->validate(); + if ($result !== true) { + if ($this->strictMode) { + throw new \RuntimeException('Invalid cookie: ' . $result); + } else { + $this->removeCookieIfEmpty($cookie); + return false; + } + } + + // Resolve conflicts with previously set cookies + foreach ($this->cookies as $i => $c) { + + // Two cookies are identical, when their path, and domain are + // identical. + if ($c->getPath() != $cookie->getPath() || + $c->getDomain() != $cookie->getDomain() || + $c->getName() != $cookie->getName() + ) { + continue; + } + + // The previously set cookie is a discard cookie and this one is + // not so allow the new cookie to be set + if (!$cookie->getDiscard() && $c->getDiscard()) { + unset($this->cookies[$i]); + continue; + } + + // If the new cookie's expiration is further into the future, then + // replace the old cookie + if ($cookie->getExpires() > $c->getExpires()) { + unset($this->cookies[$i]); + continue; + } + + // If the value has changed, we better change it + if ($cookie->getValue() !== $c->getValue()) { + unset($this->cookies[$i]); + continue; + } + + // The cookie exists, so no need to continue + return false; + } + + $this->cookies[] = $cookie; + + return true; + } + + public function count() + { + return count($this->cookies); + } + + public function getIterator() + { + return new \ArrayIterator(array_values($this->cookies)); + } + + public function extractCookies( + RequestInterface $request, + ResponseInterface $response + ) { + if ($cookieHeader = $response->getHeader('Set-Cookie')) { + foreach ($cookieHeader as $cookie) { + $sc = SetCookie::fromString($cookie); + if (!$sc->getDomain()) { + $sc->setDomain($request->getUri()->getHost()); + } + if (0 !== strpos($sc->getPath(), '/')) { + $sc->setPath($this->getCookiePathFromRequest($request)); + } + $this->setCookie($sc); + } + } + } + + /** + * Computes cookie path following RFC 6265 section 5.1.4 + * + * @link https://tools.ietf.org/html/rfc6265#section-5.1.4 + * + * @param RequestInterface $request + * @return string + */ + private function getCookiePathFromRequest(RequestInterface $request) + { + $uriPath = $request->getUri()->getPath(); + if ('' === $uriPath) { + return '/'; + } + if (0 !== strpos($uriPath, '/')) { + return '/'; + } + if ('/' === $uriPath) { + return '/'; + } + if (0 === $lastSlashPos = strrpos($uriPath, '/')) { + return '/'; + } + + return substr($uriPath, 0, $lastSlashPos); + } + + public function withCookieHeader(RequestInterface $request) + { + $values = []; + $uri = $request->getUri(); + $scheme = $uri->getScheme(); + $host = $uri->getHost(); + $path = $uri->getPath() ?: '/'; + + foreach ($this->cookies as $cookie) { + if ($cookie->matchesPath($path) && + $cookie->matchesDomain($host) && + !$cookie->isExpired() && + (!$cookie->getSecure() || $scheme === 'https') + ) { + $values[] = $cookie->getName() . '=' + . $cookie->getValue(); + } + } + + return $values + ? $request->withHeader('Cookie', implode('; ', $values)) + : $request; + } + + /** + * If a cookie already exists and the server asks to set it again with a + * null value, the cookie must be deleted. + * + * @param SetCookie $cookie + */ + private function removeCookieIfEmpty(SetCookie $cookie) + { + $cookieValue = $cookie->getValue(); + if ($cookieValue === null || $cookieValue === '') { + $this->clear( + $cookie->getDomain(), + $cookie->getPath(), + $cookie->getName() + ); + } + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php b/base/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php new file mode 100644 index 00000000..6ee11885 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Cookie/CookieJarInterface.php @@ -0,0 +1,84 @@ +filename = $cookieFile; + $this->storeSessionCookies = $storeSessionCookies; + + if (file_exists($cookieFile)) { + $this->load($cookieFile); + } + } + + /** + * Saves the file when shutting down + */ + public function __destruct() + { + $this->save($this->filename); + } + + /** + * Saves the cookies to a file. + * + * @param string $filename File to save + * @throws \RuntimeException if the file cannot be found or created + */ + public function save($filename) + { + $json = []; + foreach ($this as $cookie) { + /** @var SetCookie $cookie */ + if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { + $json[] = $cookie->toArray(); + } + } + + $jsonStr = \GuzzleHttp\json_encode($json); + if (false === file_put_contents($filename, $jsonStr, LOCK_EX)) { + throw new \RuntimeException("Unable to save file {$filename}"); + } + } + + /** + * Load cookies from a JSON formatted file. + * + * Old cookies are kept unless overwritten by newly loaded ones. + * + * @param string $filename Cookie file to load. + * @throws \RuntimeException if the file cannot be loaded. + */ + public function load($filename) + { + $json = file_get_contents($filename); + if (false === $json) { + throw new \RuntimeException("Unable to load file {$filename}"); + } elseif ($json === '') { + return; + } + + $data = \GuzzleHttp\json_decode($json, true); + if (is_array($data)) { + foreach (json_decode($json, true) as $cookie) { + $this->setCookie(new SetCookie($cookie)); + } + } elseif (strlen($data)) { + throw new \RuntimeException("Invalid cookie file: {$filename}"); + } + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php b/base/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php new file mode 100644 index 00000000..0224a244 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Cookie/SessionCookieJar.php @@ -0,0 +1,72 @@ +sessionKey = $sessionKey; + $this->storeSessionCookies = $storeSessionCookies; + $this->load(); + } + + /** + * Saves cookies to session when shutting down + */ + public function __destruct() + { + $this->save(); + } + + /** + * Save cookies to the client session + */ + public function save() + { + $json = []; + foreach ($this as $cookie) { + /** @var SetCookie $cookie */ + if (CookieJar::shouldPersist($cookie, $this->storeSessionCookies)) { + $json[] = $cookie->toArray(); + } + } + + $_SESSION[$this->sessionKey] = json_encode($json); + } + + /** + * Load the contents of the client session into the data array + */ + protected function load() + { + if (!isset($_SESSION[$this->sessionKey])) { + return; + } + $data = json_decode($_SESSION[$this->sessionKey], true); + if (is_array($data)) { + foreach ($data as $cookie) { + $this->setCookie(new SetCookie($cookie)); + } + } elseif (strlen($data)) { + throw new \RuntimeException("Invalid cookie data"); + } + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php b/base/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php new file mode 100644 index 00000000..3d776a70 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Cookie/SetCookie.php @@ -0,0 +1,403 @@ + null, + 'Value' => null, + 'Domain' => null, + 'Path' => '/', + 'Max-Age' => null, + 'Expires' => null, + 'Secure' => false, + 'Discard' => false, + 'HttpOnly' => false + ]; + + /** @var array Cookie data */ + private $data; + + /** + * Create a new SetCookie object from a string + * + * @param string $cookie Set-Cookie header string + * + * @return self + */ + public static function fromString($cookie) + { + // Create the default return array + $data = self::$defaults; + // Explode the cookie string using a series of semicolons + $pieces = array_filter(array_map('trim', explode(';', $cookie))); + // The name of the cookie (first kvp) must exist and include an equal sign. + if (empty($pieces[0]) || !strpos($pieces[0], '=')) { + return new self($data); + } + + // Add the cookie pieces into the parsed data array + foreach ($pieces as $part) { + $cookieParts = explode('=', $part, 2); + $key = trim($cookieParts[0]); + $value = isset($cookieParts[1]) + ? trim($cookieParts[1], " \n\r\t\0\x0B") + : true; + + // Only check for non-cookies when cookies have been found + if (empty($data['Name'])) { + $data['Name'] = $key; + $data['Value'] = $value; + } else { + foreach (array_keys(self::$defaults) as $search) { + if (!strcasecmp($search, $key)) { + $data[$search] = $value; + continue 2; + } + } + $data[$key] = $value; + } + } + + return new self($data); + } + + /** + * @param array $data Array of cookie data provided by a Cookie parser + */ + public function __construct(array $data = []) + { + $this->data = array_replace(self::$defaults, $data); + // Extract the Expires value and turn it into a UNIX timestamp if needed + if (!$this->getExpires() && $this->getMaxAge()) { + // Calculate the Expires date + $this->setExpires(time() + $this->getMaxAge()); + } elseif ($this->getExpires() && !is_numeric($this->getExpires())) { + $this->setExpires($this->getExpires()); + } + } + + public function __toString() + { + $str = $this->data['Name'] . '=' . $this->data['Value'] . '; '; + foreach ($this->data as $k => $v) { + if ($k !== 'Name' && $k !== 'Value' && $v !== null && $v !== false) { + if ($k === 'Expires') { + $str .= 'Expires=' . gmdate('D, d M Y H:i:s \G\M\T', $v) . '; '; + } else { + $str .= ($v === true ? $k : "{$k}={$v}") . '; '; + } + } + } + + return rtrim($str, '; '); + } + + public function toArray() + { + return $this->data; + } + + /** + * Get the cookie name + * + * @return string + */ + public function getName() + { + return $this->data['Name']; + } + + /** + * Set the cookie name + * + * @param string $name Cookie name + */ + public function setName($name) + { + $this->data['Name'] = $name; + } + + /** + * Get the cookie value + * + * @return string + */ + public function getValue() + { + return $this->data['Value']; + } + + /** + * Set the cookie value + * + * @param string $value Cookie value + */ + public function setValue($value) + { + $this->data['Value'] = $value; + } + + /** + * Get the domain + * + * @return string|null + */ + public function getDomain() + { + return $this->data['Domain']; + } + + /** + * Set the domain of the cookie + * + * @param string $domain + */ + public function setDomain($domain) + { + $this->data['Domain'] = $domain; + } + + /** + * Get the path + * + * @return string + */ + public function getPath() + { + return $this->data['Path']; + } + + /** + * Set the path of the cookie + * + * @param string $path Path of the cookie + */ + public function setPath($path) + { + $this->data['Path'] = $path; + } + + /** + * Maximum lifetime of the cookie in seconds + * + * @return int|null + */ + public function getMaxAge() + { + return $this->data['Max-Age']; + } + + /** + * Set the max-age of the cookie + * + * @param int $maxAge Max age of the cookie in seconds + */ + public function setMaxAge($maxAge) + { + $this->data['Max-Age'] = $maxAge; + } + + /** + * The UNIX timestamp when the cookie Expires + * + * @return mixed + */ + public function getExpires() + { + return $this->data['Expires']; + } + + /** + * Set the unix timestamp for which the cookie will expire + * + * @param int $timestamp Unix timestamp + */ + public function setExpires($timestamp) + { + $this->data['Expires'] = is_numeric($timestamp) + ? (int) $timestamp + : strtotime($timestamp); + } + + /** + * Get whether or not this is a secure cookie + * + * @return bool|null + */ + public function getSecure() + { + return $this->data['Secure']; + } + + /** + * Set whether or not the cookie is secure + * + * @param bool $secure Set to true or false if secure + */ + public function setSecure($secure) + { + $this->data['Secure'] = $secure; + } + + /** + * Get whether or not this is a session cookie + * + * @return bool|null + */ + public function getDiscard() + { + return $this->data['Discard']; + } + + /** + * Set whether or not this is a session cookie + * + * @param bool $discard Set to true or false if this is a session cookie + */ + public function setDiscard($discard) + { + $this->data['Discard'] = $discard; + } + + /** + * Get whether or not this is an HTTP only cookie + * + * @return bool + */ + public function getHttpOnly() + { + return $this->data['HttpOnly']; + } + + /** + * Set whether or not this is an HTTP only cookie + * + * @param bool $httpOnly Set to true or false if this is HTTP only + */ + public function setHttpOnly($httpOnly) + { + $this->data['HttpOnly'] = $httpOnly; + } + + /** + * Check if the cookie matches a path value. + * + * A request-path path-matches a given cookie-path if at least one of + * the following conditions holds: + * + * - The cookie-path and the request-path are identical. + * - The cookie-path is a prefix of the request-path, and the last + * character of the cookie-path is %x2F ("/"). + * - The cookie-path is a prefix of the request-path, and the first + * character of the request-path that is not included in the cookie- + * path is a %x2F ("/") character. + * + * @param string $requestPath Path to check against + * + * @return bool + */ + public function matchesPath($requestPath) + { + $cookiePath = $this->getPath(); + + // Match on exact matches or when path is the default empty "/" + if ($cookiePath === '/' || $cookiePath == $requestPath) { + return true; + } + + // Ensure that the cookie-path is a prefix of the request path. + if (0 !== strpos($requestPath, $cookiePath)) { + return false; + } + + // Match if the last character of the cookie-path is "/" + if (substr($cookiePath, -1, 1) === '/') { + return true; + } + + // Match if the first character not included in cookie path is "/" + return substr($requestPath, strlen($cookiePath), 1) === '/'; + } + + /** + * Check if the cookie matches a domain value + * + * @param string $domain Domain to check against + * + * @return bool + */ + public function matchesDomain($domain) + { + // Remove the leading '.' as per spec in RFC 6265. + // http://tools.ietf.org/html/rfc6265#section-5.2.3 + $cookieDomain = ltrim($this->getDomain(), '.'); + + // Domain not set or exact match. + if (!$cookieDomain || !strcasecmp($domain, $cookieDomain)) { + return true; + } + + // Matching the subdomain according to RFC 6265. + // http://tools.ietf.org/html/rfc6265#section-5.1.3 + if (filter_var($domain, FILTER_VALIDATE_IP)) { + return false; + } + + return (bool) preg_match('/\.' . preg_quote($cookieDomain, '/') . '$/', $domain); + } + + /** + * Check if the cookie is expired + * + * @return bool + */ + public function isExpired() + { + return $this->getExpires() !== null && time() > $this->getExpires(); + } + + /** + * Check if the cookie is valid according to RFC 6265 + * + * @return bool|string Returns true if valid or an error message if invalid + */ + public function validate() + { + // Names must not be empty, but can be 0 + $name = $this->getName(); + if (empty($name) && !is_numeric($name)) { + return 'The cookie name must not be empty'; + } + + // Check if any of the invalid characters are present in the cookie name + if (preg_match( + '/[\x00-\x20\x22\x28-\x29\x2c\x2f\x3a-\x40\x5c\x7b\x7d\x7f]/', + $name + )) { + return 'Cookie name must not contain invalid characters: ASCII ' + . 'Control characters (0-31;127), space, tab and the ' + . 'following characters: ()<>@,;:\"/?={}'; + } + + // Value must not be empty, but can be 0 + $value = $this->getValue(); + if (empty($value) && !is_numeric($value)) { + return 'The cookie value must not be empty'; + } + + // Domains must not be empty, but can be 0 + // A "0" is not a valid internet domain, but may be used as server name + // in a private network. + $domain = $this->getDomain(); + if (empty($domain) && !is_numeric($domain)) { + return 'The cookie domain must not be empty'; + } + + return true; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php b/base/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php new file mode 100644 index 00000000..427d896f --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Exception/BadResponseException.php @@ -0,0 +1,27 @@ +getStatusCode() + : 0; + parent::__construct($message, $code, $previous); + $this->request = $request; + $this->response = $response; + $this->handlerContext = $handlerContext; + } + + /** + * Wrap non-RequestExceptions with a RequestException + * + * @param RequestInterface $request + * @param \Exception $e + * + * @return RequestException + */ + public static function wrapException(RequestInterface $request, \Exception $e) + { + return $e instanceof RequestException + ? $e + : new RequestException($e->getMessage(), $request, null, $e); + } + + /** + * Factory method to create a new exception with a normalized error message + * + * @param RequestInterface $request Request + * @param ResponseInterface $response Response received + * @param \Exception $previous Previous exception + * @param array $ctx Optional handler context. + * + * @return self + */ + public static function create( + RequestInterface $request, + ResponseInterface $response = null, + \Exception $previous = null, + array $ctx = [] + ) { + if (!$response) { + return new self( + 'Error completing request', + $request, + null, + $previous, + $ctx + ); + } + + $level = (int) floor($response->getStatusCode() / 100); + if ($level === 4) { + $label = 'Client error'; + $className = ClientException::class; + } elseif ($level === 5) { + $label = 'Server error'; + $className = ServerException::class; + } else { + $label = 'Unsuccessful request'; + $className = __CLASS__; + } + + $uri = $request->getUri(); + $uri = static::obfuscateUri($uri); + + // Client Error: `GET /` resulted in a `404 Not Found` response: + // ... (truncated) + $message = sprintf( + '%s: `%s %s` resulted in a `%s %s` response', + $label, + $request->getMethod(), + $uri, + $response->getStatusCode(), + $response->getReasonPhrase() + ); + + $summary = static::getResponseBodySummary($response); + + if ($summary !== null) { + $message .= ":\n{$summary}\n"; + } + + return new $className($message, $request, $response, $previous, $ctx); + } + + /** + * Get a short summary of the response + * + * Will return `null` if the response is not printable. + * + * @param ResponseInterface $response + * + * @return string|null + */ + public static function getResponseBodySummary(ResponseInterface $response) + { + return \GuzzleHttp\Psr7\get_message_body_summary($response); + } + + /** + * Obfuscates URI if there is a username and a password present + * + * @param UriInterface $uri + * + * @return UriInterface + */ + private static function obfuscateUri(UriInterface $uri) + { + $userInfo = $uri->getUserInfo(); + + if (false !== ($pos = strpos($userInfo, ':'))) { + return $uri->withUserInfo(substr($userInfo, 0, $pos), '***'); + } + + return $uri; + } + + /** + * Get the request that caused the exception + * + * @return RequestInterface + */ + public function getRequest() + { + return $this->request; + } + + /** + * Get the associated response + * + * @return ResponseInterface|null + */ + public function getResponse() + { + return $this->response; + } + + /** + * Check if a response was received + * + * @return bool + */ + public function hasResponse() + { + return $this->response !== null; + } + + /** + * Get contextual information about the error from the underlying handler. + * + * The contents of this array will vary depending on which handler you are + * using. It may also be just an empty array. Relying on this data will + * couple you to a specific handler, but can give more debug information + * when needed. + * + * @return array + */ + public function getHandlerContext() + { + return $this->handlerContext; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php b/base/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php new file mode 100644 index 00000000..a77c2892 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Exception/SeekException.php @@ -0,0 +1,27 @@ +stream = $stream; + $msg = $msg ?: 'Could not seek the stream to position ' . $pos; + parent::__construct($msg); + } + + /** + * @return StreamInterface + */ + public function getStream() + { + return $this->stream; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php b/base/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php new file mode 100644 index 00000000..127094c1 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Exception/ServerException.php @@ -0,0 +1,9 @@ +maxHandles = $maxHandles; + } + + public function create(RequestInterface $request, array $options) + { + if (isset($options['curl']['body_as_string'])) { + $options['_body_as_string'] = $options['curl']['body_as_string']; + unset($options['curl']['body_as_string']); + } + + $easy = new EasyHandle; + $easy->request = $request; + $easy->options = $options; + $conf = $this->getDefaultConf($easy); + $this->applyMethod($easy, $conf); + $this->applyHandlerOptions($easy, $conf); + $this->applyHeaders($easy, $conf); + unset($conf['_headers']); + + // Add handler options from the request configuration options + if (isset($options['curl'])) { + $conf = array_replace($conf, $options['curl']); + } + + $conf[CURLOPT_HEADERFUNCTION] = $this->createHeaderFn($easy); + $easy->handle = $this->handles + ? array_pop($this->handles) + : curl_init(); + curl_setopt_array($easy->handle, $conf); + + return $easy; + } + + public function release(EasyHandle $easy) + { + $resource = $easy->handle; + unset($easy->handle); + + if (count($this->handles) >= $this->maxHandles) { + curl_close($resource); + } else { + // Remove all callback functions as they can hold onto references + // and are not cleaned up by curl_reset. Using curl_setopt_array + // does not work for some reason, so removing each one + // individually. + curl_setopt($resource, CURLOPT_HEADERFUNCTION, null); + curl_setopt($resource, CURLOPT_READFUNCTION, null); + curl_setopt($resource, CURLOPT_WRITEFUNCTION, null); + curl_setopt($resource, CURLOPT_PROGRESSFUNCTION, null); + curl_reset($resource); + $this->handles[] = $resource; + } + } + + /** + * Completes a cURL transaction, either returning a response promise or a + * rejected promise. + * + * @param callable $handler + * @param EasyHandle $easy + * @param CurlFactoryInterface $factory Dictates how the handle is released + * + * @return \GuzzleHttp\Promise\PromiseInterface + */ + public static function finish( + callable $handler, + EasyHandle $easy, + CurlFactoryInterface $factory + ) { + if (isset($easy->options['on_stats'])) { + self::invokeStats($easy); + } + + if (!$easy->response || $easy->errno) { + return self::finishError($handler, $easy, $factory); + } + + // Return the response if it is present and there is no error. + $factory->release($easy); + + // Rewind the body of the response if possible. + $body = $easy->response->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + + return new FulfilledPromise($easy->response); + } + + private static function invokeStats(EasyHandle $easy) + { + $curlStats = curl_getinfo($easy->handle); + $curlStats['appconnect_time'] = curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME); + $stats = new TransferStats( + $easy->request, + $easy->response, + $curlStats['total_time'], + $easy->errno, + $curlStats + ); + call_user_func($easy->options['on_stats'], $stats); + } + + private static function finishError( + callable $handler, + EasyHandle $easy, + CurlFactoryInterface $factory + ) { + // Get error information and release the handle to the factory. + $ctx = [ + 'errno' => $easy->errno, + 'error' => curl_error($easy->handle), + 'appconnect_time' => curl_getinfo($easy->handle, CURLINFO_APPCONNECT_TIME), + ] + curl_getinfo($easy->handle); + $ctx[self::CURL_VERSION_STR] = curl_version()['version']; + $factory->release($easy); + + // Retry when nothing is present or when curl failed to rewind. + if (empty($easy->options['_err_message']) + && (!$easy->errno || $easy->errno == 65) + ) { + return self::retryFailedRewind($handler, $easy, $ctx); + } + + return self::createRejection($easy, $ctx); + } + + private static function createRejection(EasyHandle $easy, array $ctx) + { + static $connectionErrors = [ + CURLE_OPERATION_TIMEOUTED => true, + CURLE_COULDNT_RESOLVE_HOST => true, + CURLE_COULDNT_CONNECT => true, + CURLE_SSL_CONNECT_ERROR => true, + CURLE_GOT_NOTHING => true, + ]; + + // If an exception was encountered during the onHeaders event, then + // return a rejected promise that wraps that exception. + if ($easy->onHeadersException) { + return \GuzzleHttp\Promise\rejection_for( + new RequestException( + 'An error was encountered during the on_headers event', + $easy->request, + $easy->response, + $easy->onHeadersException, + $ctx + ) + ); + } + if (version_compare($ctx[self::CURL_VERSION_STR], self::LOW_CURL_VERSION_NUMBER)) { + $message = sprintf( + 'cURL error %s: %s (%s)', + $ctx['errno'], + $ctx['error'], + 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html' + ); + } else { + $message = sprintf( + 'cURL error %s: %s (%s) for %s', + $ctx['errno'], + $ctx['error'], + 'see https://curl.haxx.se/libcurl/c/libcurl-errors.html', + $easy->request->getUri() + ); + } + + // Create a connection exception if it was a specific error code. + $error = isset($connectionErrors[$easy->errno]) + ? new ConnectException($message, $easy->request, null, $ctx) + : new RequestException($message, $easy->request, $easy->response, null, $ctx); + + return \GuzzleHttp\Promise\rejection_for($error); + } + + private function getDefaultConf(EasyHandle $easy) + { + $conf = [ + '_headers' => $easy->request->getHeaders(), + CURLOPT_CUSTOMREQUEST => $easy->request->getMethod(), + CURLOPT_URL => (string) $easy->request->getUri()->withFragment(''), + CURLOPT_RETURNTRANSFER => false, + CURLOPT_HEADER => false, + CURLOPT_CONNECTTIMEOUT => 150, + ]; + + if (defined('CURLOPT_PROTOCOLS')) { + $conf[CURLOPT_PROTOCOLS] = CURLPROTO_HTTP | CURLPROTO_HTTPS; + } + + $version = $easy->request->getProtocolVersion(); + if ($version == 1.1) { + $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_1; + } elseif ($version == 2.0) { + $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_2_0; + } else { + $conf[CURLOPT_HTTP_VERSION] = CURL_HTTP_VERSION_1_0; + } + + return $conf; + } + + private function applyMethod(EasyHandle $easy, array &$conf) + { + $body = $easy->request->getBody(); + $size = $body->getSize(); + + if ($size === null || $size > 0) { + $this->applyBody($easy->request, $easy->options, $conf); + return; + } + + $method = $easy->request->getMethod(); + if ($method === 'PUT' || $method === 'POST') { + // See http://tools.ietf.org/html/rfc7230#section-3.3.2 + if (!$easy->request->hasHeader('Content-Length')) { + $conf[CURLOPT_HTTPHEADER][] = 'Content-Length: 0'; + } + } elseif ($method === 'HEAD') { + $conf[CURLOPT_NOBODY] = true; + unset( + $conf[CURLOPT_WRITEFUNCTION], + $conf[CURLOPT_READFUNCTION], + $conf[CURLOPT_FILE], + $conf[CURLOPT_INFILE] + ); + } + } + + private function applyBody(RequestInterface $request, array $options, array &$conf) + { + $size = $request->hasHeader('Content-Length') + ? (int) $request->getHeaderLine('Content-Length') + : null; + + // Send the body as a string if the size is less than 1MB OR if the + // [curl][body_as_string] request value is set. + if (($size !== null && $size < 1000000) || + !empty($options['_body_as_string']) + ) { + $conf[CURLOPT_POSTFIELDS] = (string) $request->getBody(); + // Don't duplicate the Content-Length header + $this->removeHeader('Content-Length', $conf); + $this->removeHeader('Transfer-Encoding', $conf); + } else { + $conf[CURLOPT_UPLOAD] = true; + if ($size !== null) { + $conf[CURLOPT_INFILESIZE] = $size; + $this->removeHeader('Content-Length', $conf); + } + $body = $request->getBody(); + if ($body->isSeekable()) { + $body->rewind(); + } + $conf[CURLOPT_READFUNCTION] = function ($ch, $fd, $length) use ($body) { + return $body->read($length); + }; + } + + // If the Expect header is not present, prevent curl from adding it + if (!$request->hasHeader('Expect')) { + $conf[CURLOPT_HTTPHEADER][] = 'Expect:'; + } + + // cURL sometimes adds a content-type by default. Prevent this. + if (!$request->hasHeader('Content-Type')) { + $conf[CURLOPT_HTTPHEADER][] = 'Content-Type:'; + } + } + + private function applyHeaders(EasyHandle $easy, array &$conf) + { + foreach ($conf['_headers'] as $name => $values) { + foreach ($values as $value) { + $value = (string) $value; + if ($value === '') { + // cURL requires a special format for empty headers. + // See https://github.com/guzzle/guzzle/issues/1882 for more details. + $conf[CURLOPT_HTTPHEADER][] = "$name;"; + } else { + $conf[CURLOPT_HTTPHEADER][] = "$name: $value"; + } + } + } + + // Remove the Accept header if one was not set + if (!$easy->request->hasHeader('Accept')) { + $conf[CURLOPT_HTTPHEADER][] = 'Accept:'; + } + } + + /** + * Remove a header from the options array. + * + * @param string $name Case-insensitive header to remove + * @param array $options Array of options to modify + */ + private function removeHeader($name, array &$options) + { + foreach (array_keys($options['_headers']) as $key) { + if (!strcasecmp($key, $name)) { + unset($options['_headers'][$key]); + return; + } + } + } + + private function applyHandlerOptions(EasyHandle $easy, array &$conf) + { + $options = $easy->options; + if (isset($options['verify'])) { + if ($options['verify'] === false) { + unset($conf[CURLOPT_CAINFO]); + $conf[CURLOPT_SSL_VERIFYHOST] = 0; + $conf[CURLOPT_SSL_VERIFYPEER] = false; + } else { + $conf[CURLOPT_SSL_VERIFYHOST] = 2; + $conf[CURLOPT_SSL_VERIFYPEER] = true; + if (is_string($options['verify'])) { + // Throw an error if the file/folder/link path is not valid or doesn't exist. + if (!file_exists($options['verify'])) { + throw new \InvalidArgumentException( + "SSL CA bundle not found: {$options['verify']}" + ); + } + // If it's a directory or a link to a directory use CURLOPT_CAPATH. + // If not, it's probably a file, or a link to a file, so use CURLOPT_CAINFO. + if (is_dir($options['verify']) || + (is_link($options['verify']) && is_dir(readlink($options['verify'])))) { + $conf[CURLOPT_CAPATH] = $options['verify']; + } else { + $conf[CURLOPT_CAINFO] = $options['verify']; + } + } + } + } + + if (!empty($options['decode_content'])) { + $accept = $easy->request->getHeaderLine('Accept-Encoding'); + if ($accept) { + $conf[CURLOPT_ENCODING] = $accept; + } else { + $conf[CURLOPT_ENCODING] = ''; + // Don't let curl send the header over the wire + $conf[CURLOPT_HTTPHEADER][] = 'Accept-Encoding:'; + } + } + + if (isset($options['sink'])) { + $sink = $options['sink']; + if (!is_string($sink)) { + $sink = \GuzzleHttp\Psr7\stream_for($sink); + } elseif (!is_dir(dirname($sink))) { + // Ensure that the directory exists before failing in curl. + throw new \RuntimeException(sprintf( + 'Directory %s does not exist for sink value of %s', + dirname($sink), + $sink + )); + } else { + $sink = new LazyOpenStream($sink, 'w+'); + } + $easy->sink = $sink; + $conf[CURLOPT_WRITEFUNCTION] = function ($ch, $write) use ($sink) { + return $sink->write($write); + }; + } else { + // Use a default temp stream if no sink was set. + $conf[CURLOPT_FILE] = fopen('php://temp', 'w+'); + $easy->sink = Psr7\stream_for($conf[CURLOPT_FILE]); + } + $timeoutRequiresNoSignal = false; + if (isset($options['timeout'])) { + $timeoutRequiresNoSignal |= $options['timeout'] < 1; + $conf[CURLOPT_TIMEOUT_MS] = $options['timeout'] * 1000; + } + + // CURL default value is CURL_IPRESOLVE_WHATEVER + if (isset($options['force_ip_resolve'])) { + if ('v4' === $options['force_ip_resolve']) { + $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V4; + } elseif ('v6' === $options['force_ip_resolve']) { + $conf[CURLOPT_IPRESOLVE] = CURL_IPRESOLVE_V6; + } + } + + if (isset($options['connect_timeout'])) { + $timeoutRequiresNoSignal |= $options['connect_timeout'] < 1; + $conf[CURLOPT_CONNECTTIMEOUT_MS] = $options['connect_timeout'] * 1000; + } + + if ($timeoutRequiresNoSignal && strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN') { + $conf[CURLOPT_NOSIGNAL] = true; + } + + if (isset($options['proxy'])) { + if (!is_array($options['proxy'])) { + $conf[CURLOPT_PROXY] = $options['proxy']; + } else { + $scheme = $easy->request->getUri()->getScheme(); + if (isset($options['proxy'][$scheme])) { + $host = $easy->request->getUri()->getHost(); + if (!isset($options['proxy']['no']) || + !\GuzzleHttp\is_host_in_noproxy($host, $options['proxy']['no']) + ) { + $conf[CURLOPT_PROXY] = $options['proxy'][$scheme]; + } + } + } + } + + if (isset($options['cert'])) { + $cert = $options['cert']; + if (is_array($cert)) { + $conf[CURLOPT_SSLCERTPASSWD] = $cert[1]; + $cert = $cert[0]; + } + if (!file_exists($cert)) { + throw new \InvalidArgumentException( + "SSL certificate not found: {$cert}" + ); + } + $conf[CURLOPT_SSLCERT] = $cert; + } + + if (isset($options['ssl_key'])) { + if (is_array($options['ssl_key'])) { + if (count($options['ssl_key']) === 2) { + list($sslKey, $conf[CURLOPT_SSLKEYPASSWD]) = $options['ssl_key']; + } else { + list($sslKey) = $options['ssl_key']; + } + } + + $sslKey = isset($sslKey) ? $sslKey: $options['ssl_key']; + + if (!file_exists($sslKey)) { + throw new \InvalidArgumentException( + "SSL private key not found: {$sslKey}" + ); + } + $conf[CURLOPT_SSLKEY] = $sslKey; + } + + if (isset($options['progress'])) { + $progress = $options['progress']; + if (!is_callable($progress)) { + throw new \InvalidArgumentException( + 'progress client option must be callable' + ); + } + $conf[CURLOPT_NOPROGRESS] = false; + $conf[CURLOPT_PROGRESSFUNCTION] = function () use ($progress) { + $args = func_get_args(); + // PHP 5.5 pushed the handle onto the start of the args + if (is_resource($args[0])) { + array_shift($args); + } + call_user_func_array($progress, $args); + }; + } + + if (!empty($options['debug'])) { + $conf[CURLOPT_STDERR] = \GuzzleHttp\debug_resource($options['debug']); + $conf[CURLOPT_VERBOSE] = true; + } + } + + /** + * This function ensures that a response was set on a transaction. If one + * was not set, then the request is retried if possible. This error + * typically means you are sending a payload, curl encountered a + * "Connection died, retrying a fresh connect" error, tried to rewind the + * stream, and then encountered a "necessary data rewind wasn't possible" + * error, causing the request to be sent through curl_multi_info_read() + * without an error status. + */ + private static function retryFailedRewind( + callable $handler, + EasyHandle $easy, + array $ctx + ) { + try { + // Only rewind if the body has been read from. + $body = $easy->request->getBody(); + if ($body->tell() > 0) { + $body->rewind(); + } + } catch (\RuntimeException $e) { + $ctx['error'] = 'The connection unexpectedly failed without ' + . 'providing an error. The request would have been retried, ' + . 'but attempting to rewind the request body failed. ' + . 'Exception: ' . $e; + return self::createRejection($easy, $ctx); + } + + // Retry no more than 3 times before giving up. + if (!isset($easy->options['_curl_retries'])) { + $easy->options['_curl_retries'] = 1; + } elseif ($easy->options['_curl_retries'] == 2) { + $ctx['error'] = 'The cURL request was retried 3 times ' + . 'and did not succeed. The most likely reason for the failure ' + . 'is that cURL was unable to rewind the body of the request ' + . 'and subsequent retries resulted in the same error. Turn on ' + . 'the debug option to see what went wrong. See ' + . 'https://bugs.php.net/bug.php?id=47204 for more information.'; + return self::createRejection($easy, $ctx); + } else { + $easy->options['_curl_retries']++; + } + + return $handler($easy->request, $easy->options); + } + + private function createHeaderFn(EasyHandle $easy) + { + if (isset($easy->options['on_headers'])) { + $onHeaders = $easy->options['on_headers']; + + if (!is_callable($onHeaders)) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + } else { + $onHeaders = null; + } + + return function ($ch, $h) use ( + $onHeaders, + $easy, + &$startingResponse + ) { + $value = trim($h); + if ($value === '') { + $startingResponse = true; + $easy->createResponse(); + if ($onHeaders !== null) { + try { + $onHeaders($easy->response); + } catch (\Exception $e) { + // Associate the exception with the handle and trigger + // a curl header write error by returning 0. + $easy->onHeadersException = $e; + return -1; + } + } + } elseif ($startingResponse) { + $startingResponse = false; + $easy->headers = [$value]; + } else { + $easy->headers[] = $value; + } + return strlen($h); + }; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php b/base/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php new file mode 100644 index 00000000..b0fc2368 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Handler/CurlFactoryInterface.php @@ -0,0 +1,27 @@ +factory = isset($options['handle_factory']) + ? $options['handle_factory'] + : new CurlFactory(3); + } + + public function __invoke(RequestInterface $request, array $options) + { + if (isset($options['delay'])) { + usleep($options['delay'] * 1000); + } + + $easy = $this->factory->create($request, $options); + curl_exec($easy->handle); + $easy->errno = curl_errno($easy->handle); + + return CurlFactory::finish($this, $easy, $this->factory); + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php b/base/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php new file mode 100644 index 00000000..b73e5c72 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Handler/CurlMultiHandler.php @@ -0,0 +1,219 @@ +factory = isset($options['handle_factory']) + ? $options['handle_factory'] : new CurlFactory(50); + + if (isset($options['select_timeout'])) { + $this->selectTimeout = $options['select_timeout']; + } elseif ($selectTimeout = getenv('GUZZLE_CURL_SELECT_TIMEOUT')) { + $this->selectTimeout = $selectTimeout; + } else { + $this->selectTimeout = 1; + } + + $this->options = isset($options['options']) ? $options['options'] : []; + } + + public function __get($name) + { + if ($name === '_mh') { + $this->_mh = curl_multi_init(); + + foreach ($this->options as $option => $value) { + // A warning is raised in case of a wrong option. + curl_multi_setopt($this->_mh, $option, $value); + } + + // Further calls to _mh will return the value directly, without entering the + // __get() method at all. + return $this->_mh; + } + + throw new \BadMethodCallException(); + } + + public function __destruct() + { + if (isset($this->_mh)) { + curl_multi_close($this->_mh); + unset($this->_mh); + } + } + + public function __invoke(RequestInterface $request, array $options) + { + $easy = $this->factory->create($request, $options); + $id = (int) $easy->handle; + + $promise = new Promise( + [$this, 'execute'], + function () use ($id) { + return $this->cancel($id); + } + ); + + $this->addRequest(['easy' => $easy, 'deferred' => $promise]); + + return $promise; + } + + /** + * Ticks the curl event loop. + */ + public function tick() + { + // Add any delayed handles if needed. + if ($this->delays) { + $currentTime = \GuzzleHttp\_current_time(); + foreach ($this->delays as $id => $delay) { + if ($currentTime >= $delay) { + unset($this->delays[$id]); + curl_multi_add_handle( + $this->_mh, + $this->handles[$id]['easy']->handle + ); + } + } + } + + // Step through the task queue which may add additional requests. + P\queue()->run(); + + if ($this->active && + curl_multi_select($this->_mh, $this->selectTimeout) === -1 + ) { + // Perform a usleep if a select returns -1. + // See: https://bugs.php.net/bug.php?id=61141 + usleep(250); + } + + while (curl_multi_exec($this->_mh, $this->active) === CURLM_CALL_MULTI_PERFORM); + + $this->processMessages(); + } + + /** + * Runs until all outstanding connections have completed. + */ + public function execute() + { + $queue = P\queue(); + + while ($this->handles || !$queue->isEmpty()) { + // If there are no transfers, then sleep for the next delay + if (!$this->active && $this->delays) { + usleep($this->timeToNext()); + } + $this->tick(); + } + } + + private function addRequest(array $entry) + { + $easy = $entry['easy']; + $id = (int) $easy->handle; + $this->handles[$id] = $entry; + if (empty($easy->options['delay'])) { + curl_multi_add_handle($this->_mh, $easy->handle); + } else { + $this->delays[$id] = \GuzzleHttp\_current_time() + ($easy->options['delay'] / 1000); + } + } + + /** + * Cancels a handle from sending and removes references to it. + * + * @param int $id Handle ID to cancel and remove. + * + * @return bool True on success, false on failure. + */ + private function cancel($id) + { + // Cannot cancel if it has been processed. + if (!isset($this->handles[$id])) { + return false; + } + + $handle = $this->handles[$id]['easy']->handle; + unset($this->delays[$id], $this->handles[$id]); + curl_multi_remove_handle($this->_mh, $handle); + curl_close($handle); + + return true; + } + + private function processMessages() + { + while ($done = curl_multi_info_read($this->_mh)) { + $id = (int) $done['handle']; + curl_multi_remove_handle($this->_mh, $done['handle']); + + if (!isset($this->handles[$id])) { + // Probably was cancelled. + continue; + } + + $entry = $this->handles[$id]; + unset($this->handles[$id], $this->delays[$id]); + $entry['easy']->errno = $done['result']; + $entry['deferred']->resolve( + CurlFactory::finish( + $this, + $entry['easy'], + $this->factory + ) + ); + } + } + + private function timeToNext() + { + $currentTime = \GuzzleHttp\_current_time(); + $nextTime = PHP_INT_MAX; + foreach ($this->delays as $time) { + if ($time < $nextTime) { + $nextTime = $time; + } + } + + return max(0, $nextTime - $currentTime) * 1000000; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php b/base/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php new file mode 100644 index 00000000..7754e911 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Handler/EasyHandle.php @@ -0,0 +1,92 @@ +headers)) { + throw new \RuntimeException('No headers have been received'); + } + + // HTTP-version SP status-code SP reason-phrase + $startLine = explode(' ', array_shift($this->headers), 3); + $headers = \GuzzleHttp\headers_from_lines($this->headers); + $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers); + + if (!empty($this->options['decode_content']) + && isset($normalizedKeys['content-encoding']) + ) { + $headers['x-encoded-content-encoding'] + = $headers[$normalizedKeys['content-encoding']]; + unset($headers[$normalizedKeys['content-encoding']]); + if (isset($normalizedKeys['content-length'])) { + $headers['x-encoded-content-length'] + = $headers[$normalizedKeys['content-length']]; + + $bodyLength = (int) $this->sink->getSize(); + if ($bodyLength) { + $headers[$normalizedKeys['content-length']] = $bodyLength; + } else { + unset($headers[$normalizedKeys['content-length']]); + } + } + } + + // Attach a response to the easy handle with the parsed headers. + $this->response = new Response( + $startLine[1], + $headers, + $this->sink, + substr($startLine[0], 5), + isset($startLine[2]) ? (string) $startLine[2] : null + ); + } + + public function __get($name) + { + $msg = $name === 'handle' + ? 'The EasyHandle has been released' + : 'Invalid property: ' . $name; + throw new \BadMethodCallException($msg); + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php b/base/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php new file mode 100644 index 00000000..5b312bc0 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Handler/MockHandler.php @@ -0,0 +1,195 @@ +onFulfilled = $onFulfilled; + $this->onRejected = $onRejected; + + if ($queue) { + call_user_func_array([$this, 'append'], $queue); + } + } + + public function __invoke(RequestInterface $request, array $options) + { + if (!$this->queue) { + throw new \OutOfBoundsException('Mock queue is empty'); + } + + if (isset($options['delay']) && is_numeric($options['delay'])) { + usleep($options['delay'] * 1000); + } + + $this->lastRequest = $request; + $this->lastOptions = $options; + $response = array_shift($this->queue); + + if (isset($options['on_headers'])) { + if (!is_callable($options['on_headers'])) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + try { + $options['on_headers']($response); + } catch (\Exception $e) { + $msg = 'An error was encountered during the on_headers event'; + $response = new RequestException($msg, $request, $response, $e); + } + } + + if (is_callable($response)) { + $response = call_user_func($response, $request, $options); + } + + $response = $response instanceof \Exception + ? \GuzzleHttp\Promise\rejection_for($response) + : \GuzzleHttp\Promise\promise_for($response); + + return $response->then( + function ($value) use ($request, $options) { + $this->invokeStats($request, $options, $value); + if ($this->onFulfilled) { + call_user_func($this->onFulfilled, $value); + } + if (isset($options['sink'])) { + $contents = (string) $value->getBody(); + $sink = $options['sink']; + + if (is_resource($sink)) { + fwrite($sink, $contents); + } elseif (is_string($sink)) { + file_put_contents($sink, $contents); + } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) { + $sink->write($contents); + } + } + + return $value; + }, + function ($reason) use ($request, $options) { + $this->invokeStats($request, $options, null, $reason); + if ($this->onRejected) { + call_user_func($this->onRejected, $reason); + } + return \GuzzleHttp\Promise\rejection_for($reason); + } + ); + } + + /** + * Adds one or more variadic requests, exceptions, callables, or promises + * to the queue. + */ + public function append() + { + foreach (func_get_args() as $value) { + if ($value instanceof ResponseInterface + || $value instanceof \Exception + || $value instanceof PromiseInterface + || is_callable($value) + ) { + $this->queue[] = $value; + } else { + throw new \InvalidArgumentException('Expected a response or ' + . 'exception. Found ' . \GuzzleHttp\describe_type($value)); + } + } + } + + /** + * Get the last received request. + * + * @return RequestInterface + */ + public function getLastRequest() + { + return $this->lastRequest; + } + + /** + * Get the last received request options. + * + * @return array + */ + public function getLastOptions() + { + return $this->lastOptions; + } + + /** + * Returns the number of remaining items in the queue. + * + * @return int + */ + public function count() + { + return count($this->queue); + } + + public function reset() + { + $this->queue = []; + } + + private function invokeStats( + RequestInterface $request, + array $options, + ResponseInterface $response = null, + $reason = null + ) { + if (isset($options['on_stats'])) { + $transferTime = isset($options['transfer_time']) ? $options['transfer_time'] : 0; + $stats = new TransferStats($request, $response, $transferTime, $reason); + call_user_func($options['on_stats'], $stats); + } + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php b/base/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php new file mode 100644 index 00000000..f8b00be0 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Handler/Proxy.php @@ -0,0 +1,55 @@ +withoutHeader('Expect'); + + // Append a content-length header if body size is zero to match + // cURL's behavior. + if (0 === $request->getBody()->getSize()) { + $request = $request->withHeader('Content-Length', '0'); + } + + return $this->createResponse( + $request, + $options, + $this->createStream($request, $options), + $startTime + ); + } catch (\InvalidArgumentException $e) { + throw $e; + } catch (\Exception $e) { + // Determine if the error was a networking error. + $message = $e->getMessage(); + // This list can probably get more comprehensive. + if (strpos($message, 'getaddrinfo') // DNS lookup failed + || strpos($message, 'Connection refused') + || strpos($message, "couldn't connect to host") // error on HHVM + || strpos($message, "connection attempt failed") + ) { + $e = new ConnectException($e->getMessage(), $request, $e); + } + $e = RequestException::wrapException($request, $e); + $this->invokeStats($options, $request, $startTime, null, $e); + + return \GuzzleHttp\Promise\rejection_for($e); + } + } + + private function invokeStats( + array $options, + RequestInterface $request, + $startTime, + ResponseInterface $response = null, + $error = null + ) { + if (isset($options['on_stats'])) { + $stats = new TransferStats( + $request, + $response, + \GuzzleHttp\_current_time() - $startTime, + $error, + [] + ); + call_user_func($options['on_stats'], $stats); + } + } + + private function createResponse( + RequestInterface $request, + array $options, + $stream, + $startTime + ) { + $hdrs = $this->lastHeaders; + $this->lastHeaders = []; + $parts = explode(' ', array_shift($hdrs), 3); + $ver = explode('/', $parts[0])[1]; + $status = $parts[1]; + $reason = isset($parts[2]) ? $parts[2] : null; + $headers = \GuzzleHttp\headers_from_lines($hdrs); + list($stream, $headers) = $this->checkDecode($options, $headers, $stream); + $stream = Psr7\stream_for($stream); + $sink = $stream; + + if (strcasecmp('HEAD', $request->getMethod())) { + $sink = $this->createSink($stream, $options); + } + + $response = new Psr7\Response($status, $headers, $sink, $ver, $reason); + + if (isset($options['on_headers'])) { + try { + $options['on_headers']($response); + } catch (\Exception $e) { + $msg = 'An error was encountered during the on_headers event'; + $ex = new RequestException($msg, $request, $response, $e); + return \GuzzleHttp\Promise\rejection_for($ex); + } + } + + // Do not drain when the request is a HEAD request because they have + // no body. + if ($sink !== $stream) { + $this->drain( + $stream, + $sink, + $response->getHeaderLine('Content-Length') + ); + } + + $this->invokeStats($options, $request, $startTime, $response, null); + + return new FulfilledPromise($response); + } + + private function createSink(StreamInterface $stream, array $options) + { + if (!empty($options['stream'])) { + return $stream; + } + + $sink = isset($options['sink']) + ? $options['sink'] + : fopen('php://temp', 'r+'); + + return is_string($sink) + ? new Psr7\LazyOpenStream($sink, 'w+') + : Psr7\stream_for($sink); + } + + private function checkDecode(array $options, array $headers, $stream) + { + // Automatically decode responses when instructed. + if (!empty($options['decode_content'])) { + $normalizedKeys = \GuzzleHttp\normalize_header_keys($headers); + if (isset($normalizedKeys['content-encoding'])) { + $encoding = $headers[$normalizedKeys['content-encoding']]; + if ($encoding[0] === 'gzip' || $encoding[0] === 'deflate') { + $stream = new Psr7\InflateStream( + Psr7\stream_for($stream) + ); + $headers['x-encoded-content-encoding'] + = $headers[$normalizedKeys['content-encoding']]; + // Remove content-encoding header + unset($headers[$normalizedKeys['content-encoding']]); + // Fix content-length header + if (isset($normalizedKeys['content-length'])) { + $headers['x-encoded-content-length'] + = $headers[$normalizedKeys['content-length']]; + + $length = (int) $stream->getSize(); + if ($length === 0) { + unset($headers[$normalizedKeys['content-length']]); + } else { + $headers[$normalizedKeys['content-length']] = [$length]; + } + } + } + } + } + + return [$stream, $headers]; + } + + /** + * Drains the source stream into the "sink" client option. + * + * @param StreamInterface $source + * @param StreamInterface $sink + * @param string $contentLength Header specifying the amount of + * data to read. + * + * @return StreamInterface + * @throws \RuntimeException when the sink option is invalid. + */ + private function drain( + StreamInterface $source, + StreamInterface $sink, + $contentLength + ) { + // If a content-length header is provided, then stop reading once + // that number of bytes has been read. This can prevent infinitely + // reading from a stream when dealing with servers that do not honor + // Connection: Close headers. + Psr7\copy_to_stream( + $source, + $sink, + (strlen($contentLength) > 0 && (int) $contentLength > 0) ? (int) $contentLength : -1 + ); + + $sink->seek(0); + $source->close(); + + return $sink; + } + + /** + * Create a resource and check to ensure it was created successfully + * + * @param callable $callback Callable that returns stream resource + * + * @return resource + * @throws \RuntimeException on error + */ + private function createResource(callable $callback) + { + $errors = null; + set_error_handler(function ($_, $msg, $file, $line) use (&$errors) { + $errors[] = [ + 'message' => $msg, + 'file' => $file, + 'line' => $line + ]; + return true; + }); + + $resource = $callback(); + restore_error_handler(); + + if (!$resource) { + $message = 'Error creating resource: '; + foreach ($errors as $err) { + foreach ($err as $key => $value) { + $message .= "[$key] $value" . PHP_EOL; + } + } + throw new \RuntimeException(trim($message)); + } + + return $resource; + } + + private function createStream(RequestInterface $request, array $options) + { + static $methods; + if (!$methods) { + $methods = array_flip(get_class_methods(__CLASS__)); + } + + // HTTP/1.1 streams using the PHP stream wrapper require a + // Connection: close header + if ($request->getProtocolVersion() == '1.1' + && !$request->hasHeader('Connection') + ) { + $request = $request->withHeader('Connection', 'close'); + } + + // Ensure SSL is verified by default + if (!isset($options['verify'])) { + $options['verify'] = true; + } + + $params = []; + $context = $this->getDefaultContext($request); + + if (isset($options['on_headers']) && !is_callable($options['on_headers'])) { + throw new \InvalidArgumentException('on_headers must be callable'); + } + + if (!empty($options)) { + foreach ($options as $key => $value) { + $method = "add_{$key}"; + if (isset($methods[$method])) { + $this->{$method}($request, $context, $value, $params); + } + } + } + + if (isset($options['stream_context'])) { + if (!is_array($options['stream_context'])) { + throw new \InvalidArgumentException('stream_context must be an array'); + } + $context = array_replace_recursive( + $context, + $options['stream_context'] + ); + } + + // Microsoft NTLM authentication only supported with curl handler + if (isset($options['auth']) + && is_array($options['auth']) + && isset($options['auth'][2]) + && 'ntlm' == $options['auth'][2] + ) { + throw new \InvalidArgumentException('Microsoft NTLM authentication only supported with curl handler'); + } + + $uri = $this->resolveHost($request, $options); + + $context = $this->createResource( + function () use ($context, $params) { + return stream_context_create($context, $params); + } + ); + + return $this->createResource( + function () use ($uri, &$http_response_header, $context, $options) { + $resource = fopen((string) $uri, 'r', null, $context); + $this->lastHeaders = $http_response_header; + + if (isset($options['read_timeout'])) { + $readTimeout = $options['read_timeout']; + $sec = (int) $readTimeout; + $usec = ($readTimeout - $sec) * 100000; + stream_set_timeout($resource, $sec, $usec); + } + + return $resource; + } + ); + } + + private function resolveHost(RequestInterface $request, array $options) + { + $uri = $request->getUri(); + + if (isset($options['force_ip_resolve']) && !filter_var($uri->getHost(), FILTER_VALIDATE_IP)) { + if ('v4' === $options['force_ip_resolve']) { + $records = dns_get_record($uri->getHost(), DNS_A); + if (!isset($records[0]['ip'])) { + throw new ConnectException( + sprintf( + "Could not resolve IPv4 address for host '%s'", + $uri->getHost() + ), + $request + ); + } + $uri = $uri->withHost($records[0]['ip']); + } elseif ('v6' === $options['force_ip_resolve']) { + $records = dns_get_record($uri->getHost(), DNS_AAAA); + if (!isset($records[0]['ipv6'])) { + throw new ConnectException( + sprintf( + "Could not resolve IPv6 address for host '%s'", + $uri->getHost() + ), + $request + ); + } + $uri = $uri->withHost('[' . $records[0]['ipv6'] . ']'); + } + } + + return $uri; + } + + private function getDefaultContext(RequestInterface $request) + { + $headers = ''; + foreach ($request->getHeaders() as $name => $value) { + foreach ($value as $val) { + $headers .= "$name: $val\r\n"; + } + } + + $context = [ + 'http' => [ + 'method' => $request->getMethod(), + 'header' => $headers, + 'protocol_version' => $request->getProtocolVersion(), + 'ignore_errors' => true, + 'follow_location' => 0, + ], + ]; + + $body = (string) $request->getBody(); + + if (!empty($body)) { + $context['http']['content'] = $body; + // Prevent the HTTP handler from adding a Content-Type header. + if (!$request->hasHeader('Content-Type')) { + $context['http']['header'] .= "Content-Type:\r\n"; + } + } + + $context['http']['header'] = rtrim($context['http']['header']); + + return $context; + } + + private function add_proxy(RequestInterface $request, &$options, $value, &$params) + { + if (!is_array($value)) { + $options['http']['proxy'] = $value; + } else { + $scheme = $request->getUri()->getScheme(); + if (isset($value[$scheme])) { + if (!isset($value['no']) + || !\GuzzleHttp\is_host_in_noproxy( + $request->getUri()->getHost(), + $value['no'] + ) + ) { + $options['http']['proxy'] = $value[$scheme]; + } + } + } + } + + private function add_timeout(RequestInterface $request, &$options, $value, &$params) + { + if ($value > 0) { + $options['http']['timeout'] = $value; + } + } + + private function add_verify(RequestInterface $request, &$options, $value, &$params) + { + if ($value === true) { + // PHP 5.6 or greater will find the system cert by default. When + // < 5.6, use the Guzzle bundled cacert. + if (PHP_VERSION_ID < 50600) { + $options['ssl']['cafile'] = \GuzzleHttp\default_ca_bundle(); + } + } elseif (is_string($value)) { + $options['ssl']['cafile'] = $value; + if (!file_exists($value)) { + throw new \RuntimeException("SSL CA bundle not found: $value"); + } + } elseif ($value === false) { + $options['ssl']['verify_peer'] = false; + $options['ssl']['verify_peer_name'] = false; + return; + } else { + throw new \InvalidArgumentException('Invalid verify request option'); + } + + $options['ssl']['verify_peer'] = true; + $options['ssl']['verify_peer_name'] = true; + $options['ssl']['allow_self_signed'] = false; + } + + private function add_cert(RequestInterface $request, &$options, $value, &$params) + { + if (is_array($value)) { + $options['ssl']['passphrase'] = $value[1]; + $value = $value[0]; + } + + if (!file_exists($value)) { + throw new \RuntimeException("SSL certificate not found: {$value}"); + } + + $options['ssl']['local_cert'] = $value; + } + + private function add_progress(RequestInterface $request, &$options, $value, &$params) + { + $this->addNotification( + $params, + function ($code, $a, $b, $c, $transferred, $total) use ($value) { + if ($code == STREAM_NOTIFY_PROGRESS) { + $value($total, $transferred, null, null); + } + } + ); + } + + private function add_debug(RequestInterface $request, &$options, $value, &$params) + { + if ($value === false) { + return; + } + + static $map = [ + STREAM_NOTIFY_CONNECT => 'CONNECT', + STREAM_NOTIFY_AUTH_REQUIRED => 'AUTH_REQUIRED', + STREAM_NOTIFY_AUTH_RESULT => 'AUTH_RESULT', + STREAM_NOTIFY_MIME_TYPE_IS => 'MIME_TYPE_IS', + STREAM_NOTIFY_FILE_SIZE_IS => 'FILE_SIZE_IS', + STREAM_NOTIFY_REDIRECTED => 'REDIRECTED', + STREAM_NOTIFY_PROGRESS => 'PROGRESS', + STREAM_NOTIFY_FAILURE => 'FAILURE', + STREAM_NOTIFY_COMPLETED => 'COMPLETED', + STREAM_NOTIFY_RESOLVE => 'RESOLVE', + ]; + static $args = ['severity', 'message', 'message_code', + 'bytes_transferred', 'bytes_max']; + + $value = \GuzzleHttp\debug_resource($value); + $ident = $request->getMethod() . ' ' . $request->getUri()->withFragment(''); + $this->addNotification( + $params, + function () use ($ident, $value, $map, $args) { + $passed = func_get_args(); + $code = array_shift($passed); + fprintf($value, '<%s> [%s] ', $ident, $map[$code]); + foreach (array_filter($passed) as $i => $v) { + fwrite($value, $args[$i] . ': "' . $v . '" '); + } + fwrite($value, "\n"); + } + ); + } + + private function addNotification(array &$params, callable $notify) + { + // Wrap the existing function if needed. + if (!isset($params['notification'])) { + $params['notification'] = $notify; + } else { + $params['notification'] = $this->callArray([ + $params['notification'], + $notify + ]); + } + } + + private function callArray(array $functions) + { + return function () use ($functions) { + $args = func_get_args(); + foreach ($functions as $fn) { + call_user_func_array($fn, $args); + } + }; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/HandlerStack.php b/base/vendor/guzzlehttp/guzzle/src/HandlerStack.php new file mode 100644 index 00000000..6a49cc06 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/HandlerStack.php @@ -0,0 +1,277 @@ +push(Middleware::httpErrors(), 'http_errors'); + $stack->push(Middleware::redirect(), 'allow_redirects'); + $stack->push(Middleware::cookies(), 'cookies'); + $stack->push(Middleware::prepareBody(), 'prepare_body'); + + return $stack; + } + + /** + * @param callable $handler Underlying HTTP handler. + */ + public function __construct(callable $handler = null) + { + $this->handler = $handler; + } + + /** + * Invokes the handler stack as a composed handler + * + * @param RequestInterface $request + * @param array $options + * + * @return ResponseInterface|PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + $handler = $this->resolve(); + + return $handler($request, $options); + } + + /** + * Dumps a string representation of the stack. + * + * @return string + */ + public function __toString() + { + $depth = 0; + $stack = []; + if ($this->handler) { + $stack[] = "0) Handler: " . $this->debugCallable($this->handler); + } + + $result = ''; + foreach (array_reverse($this->stack) as $tuple) { + $depth++; + $str = "{$depth}) Name: '{$tuple[1]}', "; + $str .= "Function: " . $this->debugCallable($tuple[0]); + $result = "> {$str}\n{$result}"; + $stack[] = $str; + } + + foreach (array_keys($stack) as $k) { + $result .= "< {$stack[$k]}\n"; + } + + return $result; + } + + /** + * Set the HTTP handler that actually returns a promise. + * + * @param callable $handler Accepts a request and array of options and + * returns a Promise. + */ + public function setHandler(callable $handler) + { + $this->handler = $handler; + $this->cached = null; + } + + /** + * Returns true if the builder has a handler. + * + * @return bool + */ + public function hasHandler() + { + return (bool) $this->handler; + } + + /** + * Unshift a middleware to the bottom of the stack. + * + * @param callable $middleware Middleware function + * @param string $name Name to register for this middleware. + */ + public function unshift(callable $middleware, $name = null) + { + array_unshift($this->stack, [$middleware, $name]); + $this->cached = null; + } + + /** + * Push a middleware to the top of the stack. + * + * @param callable $middleware Middleware function + * @param string $name Name to register for this middleware. + */ + public function push(callable $middleware, $name = '') + { + $this->stack[] = [$middleware, $name]; + $this->cached = null; + } + + /** + * Add a middleware before another middleware by name. + * + * @param string $findName Middleware to find + * @param callable $middleware Middleware function + * @param string $withName Name to register for this middleware. + */ + public function before($findName, callable $middleware, $withName = '') + { + $this->splice($findName, $withName, $middleware, true); + } + + /** + * Add a middleware after another middleware by name. + * + * @param string $findName Middleware to find + * @param callable $middleware Middleware function + * @param string $withName Name to register for this middleware. + */ + public function after($findName, callable $middleware, $withName = '') + { + $this->splice($findName, $withName, $middleware, false); + } + + /** + * Remove a middleware by instance or name from the stack. + * + * @param callable|string $remove Middleware to remove by instance or name. + */ + public function remove($remove) + { + $this->cached = null; + $idx = is_callable($remove) ? 0 : 1; + $this->stack = array_values(array_filter( + $this->stack, + function ($tuple) use ($idx, $remove) { + return $tuple[$idx] !== $remove; + } + )); + } + + /** + * Compose the middleware and handler into a single callable function. + * + * @return callable + */ + public function resolve() + { + if (!$this->cached) { + if (!($prev = $this->handler)) { + throw new \LogicException('No handler has been specified'); + } + + foreach (array_reverse($this->stack) as $fn) { + $prev = $fn[0]($prev); + } + + $this->cached = $prev; + } + + return $this->cached; + } + + /** + * @param string $name + * @return int + */ + private function findByName($name) + { + foreach ($this->stack as $k => $v) { + if ($v[1] === $name) { + return $k; + } + } + + throw new \InvalidArgumentException("Middleware not found: $name"); + } + + /** + * Splices a function into the middleware list at a specific position. + * + * @param string $findName + * @param string $withName + * @param callable $middleware + * @param bool $before + */ + private function splice($findName, $withName, callable $middleware, $before) + { + $this->cached = null; + $idx = $this->findByName($findName); + $tuple = [$middleware, $withName]; + + if ($before) { + if ($idx === 0) { + array_unshift($this->stack, $tuple); + } else { + $replacement = [$tuple, $this->stack[$idx]]; + array_splice($this->stack, $idx, 1, $replacement); + } + } elseif ($idx === count($this->stack) - 1) { + $this->stack[] = $tuple; + } else { + $replacement = [$this->stack[$idx], $tuple]; + array_splice($this->stack, $idx, 1, $replacement); + } + } + + /** + * Provides a debug string for a given callable. + * + * @param array|callable $fn Function to write as a string. + * + * @return string + */ + private function debugCallable($fn) + { + if (is_string($fn)) { + return "callable({$fn})"; + } + + if (is_array($fn)) { + return is_string($fn[0]) + ? "callable({$fn[0]}::{$fn[1]})" + : "callable(['" . get_class($fn[0]) . "', '{$fn[1]}'])"; + } + + return 'callable(' . spl_object_hash($fn) . ')'; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/MessageFormatter.php b/base/vendor/guzzlehttp/guzzle/src/MessageFormatter.php new file mode 100644 index 00000000..dc36bb52 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/MessageFormatter.php @@ -0,0 +1,185 @@ +>>>>>>>\n{request}\n<<<<<<<<\n{response}\n--------\n{error}"; + const SHORT = '[{ts}] "{method} {target} HTTP/{version}" {code}'; + + /** @var string Template used to format log messages */ + private $template; + + /** + * @param string $template Log message template + */ + public function __construct($template = self::CLF) + { + $this->template = $template ?: self::CLF; + } + + /** + * Returns a formatted message string. + * + * @param RequestInterface $request Request that was sent + * @param ResponseInterface $response Response that was received + * @param \Exception $error Exception that was received + * + * @return string + */ + public function format( + RequestInterface $request, + ResponseInterface $response = null, + \Exception $error = null + ) { + $cache = []; + + return preg_replace_callback( + '/{\s*([A-Za-z_\-\.0-9]+)\s*}/', + function (array $matches) use ($request, $response, $error, &$cache) { + if (isset($cache[$matches[1]])) { + return $cache[$matches[1]]; + } + + $result = ''; + switch ($matches[1]) { + case 'request': + $result = Psr7\str($request); + break; + case 'response': + $result = $response ? Psr7\str($response) : ''; + break; + case 'req_headers': + $result = trim($request->getMethod() + . ' ' . $request->getRequestTarget()) + . ' HTTP/' . $request->getProtocolVersion() . "\r\n" + . $this->headers($request); + break; + case 'res_headers': + $result = $response ? + sprintf( + 'HTTP/%s %d %s', + $response->getProtocolVersion(), + $response->getStatusCode(), + $response->getReasonPhrase() + ) . "\r\n" . $this->headers($response) + : 'NULL'; + break; + case 'req_body': + $result = $request->getBody(); + break; + case 'res_body': + $result = $response ? $response->getBody() : 'NULL'; + break; + case 'ts': + case 'date_iso_8601': + $result = gmdate('c'); + break; + case 'date_common_log': + $result = date('d/M/Y:H:i:s O'); + break; + case 'method': + $result = $request->getMethod(); + break; + case 'version': + $result = $request->getProtocolVersion(); + break; + case 'uri': + case 'url': + $result = $request->getUri(); + break; + case 'target': + $result = $request->getRequestTarget(); + break; + case 'req_version': + $result = $request->getProtocolVersion(); + break; + case 'res_version': + $result = $response + ? $response->getProtocolVersion() + : 'NULL'; + break; + case 'host': + $result = $request->getHeaderLine('Host'); + break; + case 'hostname': + $result = gethostname(); + break; + case 'code': + $result = $response ? $response->getStatusCode() : 'NULL'; + break; + case 'phrase': + $result = $response ? $response->getReasonPhrase() : 'NULL'; + break; + case 'error': + $result = $error ? $error->getMessage() : 'NULL'; + break; + default: + // handle prefixed dynamic headers + if (strpos($matches[1], 'req_header_') === 0) { + $result = $request->getHeaderLine(substr($matches[1], 11)); + } elseif (strpos($matches[1], 'res_header_') === 0) { + $result = $response + ? $response->getHeaderLine(substr($matches[1], 11)) + : 'NULL'; + } + } + + $cache[$matches[1]] = $result; + return $result; + }, + $this->template + ); + } + + /** + * Get headers from message as string + * + * @return string + */ + private function headers(MessageInterface $message) + { + $result = ''; + foreach ($message->getHeaders() as $name => $values) { + $result .= $name . ': ' . implode(', ', $values) . "\r\n"; + } + + return trim($result); + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Middleware.php b/base/vendor/guzzlehttp/guzzle/src/Middleware.php new file mode 100644 index 00000000..bffc1974 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Middleware.php @@ -0,0 +1,254 @@ +withCookieHeader($request); + return $handler($request, $options) + ->then( + function ($response) use ($cookieJar, $request) { + $cookieJar->extractCookies($request, $response); + return $response; + } + ); + }; + }; + } + + /** + * Middleware that throws exceptions for 4xx or 5xx responses when the + * "http_error" request option is set to true. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function httpErrors() + { + return function (callable $handler) { + return function ($request, array $options) use ($handler) { + if (empty($options['http_errors'])) { + return $handler($request, $options); + } + return $handler($request, $options)->then( + function (ResponseInterface $response) use ($request) { + $code = $response->getStatusCode(); + if ($code < 400) { + return $response; + } + throw RequestException::create($request, $response); + } + ); + }; + }; + } + + /** + * Middleware that pushes history data to an ArrayAccess container. + * + * @param array|\ArrayAccess $container Container to hold the history (by reference). + * + * @return callable Returns a function that accepts the next handler. + * @throws \InvalidArgumentException if container is not an array or ArrayAccess. + */ + public static function history(&$container) + { + if (!is_array($container) && !$container instanceof \ArrayAccess) { + throw new \InvalidArgumentException('history container must be an array or object implementing ArrayAccess'); + } + + return function (callable $handler) use (&$container) { + return function ($request, array $options) use ($handler, &$container) { + return $handler($request, $options)->then( + function ($value) use ($request, &$container, $options) { + $container[] = [ + 'request' => $request, + 'response' => $value, + 'error' => null, + 'options' => $options + ]; + return $value; + }, + function ($reason) use ($request, &$container, $options) { + $container[] = [ + 'request' => $request, + 'response' => null, + 'error' => $reason, + 'options' => $options + ]; + return \GuzzleHttp\Promise\rejection_for($reason); + } + ); + }; + }; + } + + /** + * Middleware that invokes a callback before and after sending a request. + * + * The provided listener cannot modify or alter the response. It simply + * "taps" into the chain to be notified before returning the promise. The + * before listener accepts a request and options array, and the after + * listener accepts a request, options array, and response promise. + * + * @param callable $before Function to invoke before forwarding the request. + * @param callable $after Function invoked after forwarding. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function tap(callable $before = null, callable $after = null) + { + return function (callable $handler) use ($before, $after) { + return function ($request, array $options) use ($handler, $before, $after) { + if ($before) { + $before($request, $options); + } + $response = $handler($request, $options); + if ($after) { + $after($request, $options, $response); + } + return $response; + }; + }; + } + + /** + * Middleware that handles request redirects. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function redirect() + { + return function (callable $handler) { + return new RedirectMiddleware($handler); + }; + } + + /** + * Middleware that retries requests based on the boolean result of + * invoking the provided "decider" function. + * + * If no delay function is provided, a simple implementation of exponential + * backoff will be utilized. + * + * @param callable $decider Function that accepts the number of retries, + * a request, [response], and [exception] and + * returns true if the request is to be retried. + * @param callable $delay Function that accepts the number of retries and + * returns the number of milliseconds to delay. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function retry(callable $decider, callable $delay = null) + { + return function (callable $handler) use ($decider, $delay) { + return new RetryMiddleware($decider, $handler, $delay); + }; + } + + /** + * Middleware that logs requests, responses, and errors using a message + * formatter. + * + * @param LoggerInterface $logger Logs messages. + * @param MessageFormatter $formatter Formatter used to create message strings. + * @param string $logLevel Level at which to log requests. + * + * @return callable Returns a function that accepts the next handler. + */ + public static function log(LoggerInterface $logger, MessageFormatter $formatter, $logLevel = 'info' /* \Psr\Log\LogLevel::INFO */) + { + return function (callable $handler) use ($logger, $formatter, $logLevel) { + return function ($request, array $options) use ($handler, $logger, $formatter, $logLevel) { + return $handler($request, $options)->then( + function ($response) use ($logger, $request, $formatter, $logLevel) { + $message = $formatter->format($request, $response); + $logger->log($logLevel, $message); + return $response; + }, + function ($reason) use ($logger, $request, $formatter) { + $response = $reason instanceof RequestException + ? $reason->getResponse() + : null; + $message = $formatter->format($request, $response, $reason); + $logger->notice($message); + return \GuzzleHttp\Promise\rejection_for($reason); + } + ); + }; + }; + } + + /** + * This middleware adds a default content-type if possible, a default + * content-length or transfer-encoding header, and the expect header. + * + * @return callable + */ + public static function prepareBody() + { + return function (callable $handler) { + return new PrepareBodyMiddleware($handler); + }; + } + + /** + * Middleware that applies a map function to the request before passing to + * the next handler. + * + * @param callable $fn Function that accepts a RequestInterface and returns + * a RequestInterface. + * @return callable + */ + public static function mapRequest(callable $fn) + { + return function (callable $handler) use ($fn) { + return function ($request, array $options) use ($handler, $fn) { + return $handler($fn($request), $options); + }; + }; + } + + /** + * Middleware that applies a map function to the resolved promise's + * response. + * + * @param callable $fn Function that accepts a ResponseInterface and + * returns a ResponseInterface. + * @return callable + */ + public static function mapResponse(callable $fn) + { + return function (callable $handler) use ($fn) { + return function ($request, array $options) use ($handler, $fn) { + return $handler($request, $options)->then($fn); + }; + }; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/Pool.php b/base/vendor/guzzlehttp/guzzle/src/Pool.php new file mode 100644 index 00000000..5838db4f --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/Pool.php @@ -0,0 +1,134 @@ + $rfn) { + if ($rfn instanceof RequestInterface) { + yield $key => $client->sendAsync($rfn, $opts); + } elseif (is_callable($rfn)) { + yield $key => $rfn($opts); + } else { + throw new \InvalidArgumentException('Each value yielded by ' + . 'the iterator must be a Psr7\Http\Message\RequestInterface ' + . 'or a callable that returns a promise that fulfills ' + . 'with a Psr7\Message\Http\ResponseInterface object.'); + } + } + }; + + $this->each = new EachPromise($requests(), $config); + } + + /** + * Get promise + * + * @return PromiseInterface + */ + public function promise() + { + return $this->each->promise(); + } + + /** + * Sends multiple requests concurrently and returns an array of responses + * and exceptions that uses the same ordering as the provided requests. + * + * IMPORTANT: This method keeps every request and response in memory, and + * as such, is NOT recommended when sending a large number or an + * indeterminate number of requests concurrently. + * + * @param ClientInterface $client Client used to send the requests + * @param array|\Iterator $requests Requests to send concurrently. + * @param array $options Passes through the options available in + * {@see GuzzleHttp\Pool::__construct} + * + * @return array Returns an array containing the response or an exception + * in the same order that the requests were sent. + * @throws \InvalidArgumentException if the event format is incorrect. + */ + public static function batch( + ClientInterface $client, + $requests, + array $options = [] + ) { + $res = []; + self::cmpCallback($options, 'fulfilled', $res); + self::cmpCallback($options, 'rejected', $res); + $pool = new static($client, $requests, $options); + $pool->promise()->wait(); + ksort($res); + + return $res; + } + + /** + * Execute callback(s) + * + * @return void + */ + private static function cmpCallback(array &$options, $name, array &$results) + { + if (!isset($options[$name])) { + $options[$name] = function ($v, $k) use (&$results) { + $results[$k] = $v; + }; + } else { + $currentFn = $options[$name]; + $options[$name] = function ($v, $k) use (&$results, $currentFn) { + $currentFn($v, $k); + $results[$k] = $v; + }; + } + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php b/base/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php new file mode 100644 index 00000000..568a1e90 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/PrepareBodyMiddleware.php @@ -0,0 +1,111 @@ +nextHandler = $nextHandler; + } + + /** + * @param RequestInterface $request + * @param array $options + * + * @return PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + $fn = $this->nextHandler; + + // Don't do anything if the request has no body. + if ($request->getBody()->getSize() === 0) { + return $fn($request, $options); + } + + $modify = []; + + // Add a default content-type if possible. + if (!$request->hasHeader('Content-Type')) { + if ($uri = $request->getBody()->getMetadata('uri')) { + if ($type = Psr7\mimetype_from_filename($uri)) { + $modify['set_headers']['Content-Type'] = $type; + } + } + } + + // Add a default content-length or transfer-encoding header. + if (!$request->hasHeader('Content-Length') + && !$request->hasHeader('Transfer-Encoding') + ) { + $size = $request->getBody()->getSize(); + if ($size !== null) { + $modify['set_headers']['Content-Length'] = $size; + } else { + $modify['set_headers']['Transfer-Encoding'] = 'chunked'; + } + } + + // Add the expect header if needed. + $this->addExpectHeader($request, $options, $modify); + + return $fn(Psr7\modify_request($request, $modify), $options); + } + + /** + * Add expect header + * + * @return void + */ + private function addExpectHeader( + RequestInterface $request, + array $options, + array &$modify + ) { + // Determine if the Expect header should be used + if ($request->hasHeader('Expect')) { + return; + } + + $expect = isset($options['expect']) ? $options['expect'] : null; + + // Return if disabled or if you're not using HTTP/1.1 or HTTP/2.0 + if ($expect === false || $request->getProtocolVersion() < 1.1) { + return; + } + + // The expect header is unconditionally enabled + if ($expect === true) { + $modify['set_headers']['Expect'] = '100-Continue'; + return; + } + + // By default, send the expect header when the payload is > 1mb + if ($expect === null) { + $expect = 1048576; + } + + // Always add if the body cannot be rewound, the size cannot be + // determined, or the size is greater than the cutoff threshold + $body = $request->getBody(); + $size = $body->getSize(); + + if ($size === null || $size >= (int) $expect || !$body->isSeekable()) { + $modify['set_headers']['Expect'] = '100-Continue'; + } + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php b/base/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php new file mode 100644 index 00000000..2f301261 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/RedirectMiddleware.php @@ -0,0 +1,255 @@ + 5, + 'protocols' => ['http', 'https'], + 'strict' => false, + 'referer' => false, + 'track_redirects' => false, + ]; + + /** @var callable */ + private $nextHandler; + + /** + * @param callable $nextHandler Next handler to invoke. + */ + public function __construct(callable $nextHandler) + { + $this->nextHandler = $nextHandler; + } + + /** + * @param RequestInterface $request + * @param array $options + * + * @return PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + $fn = $this->nextHandler; + + if (empty($options['allow_redirects'])) { + return $fn($request, $options); + } + + if ($options['allow_redirects'] === true) { + $options['allow_redirects'] = self::$defaultSettings; + } elseif (!is_array($options['allow_redirects'])) { + throw new \InvalidArgumentException('allow_redirects must be true, false, or array'); + } else { + // Merge the default settings with the provided settings + $options['allow_redirects'] += self::$defaultSettings; + } + + if (empty($options['allow_redirects']['max'])) { + return $fn($request, $options); + } + + return $fn($request, $options) + ->then(function (ResponseInterface $response) use ($request, $options) { + return $this->checkRedirect($request, $options, $response); + }); + } + + /** + * @param RequestInterface $request + * @param array $options + * @param ResponseInterface $response + * + * @return ResponseInterface|PromiseInterface + */ + public function checkRedirect( + RequestInterface $request, + array $options, + ResponseInterface $response + ) { + if (substr($response->getStatusCode(), 0, 1) != '3' + || !$response->hasHeader('Location') + ) { + return $response; + } + + $this->guardMax($request, $options); + $nextRequest = $this->modifyRequest($request, $options, $response); + + if (isset($options['allow_redirects']['on_redirect'])) { + call_user_func( + $options['allow_redirects']['on_redirect'], + $request, + $response, + $nextRequest->getUri() + ); + } + + /** @var PromiseInterface|ResponseInterface $promise */ + $promise = $this($nextRequest, $options); + + // Add headers to be able to track history of redirects. + if (!empty($options['allow_redirects']['track_redirects'])) { + return $this->withTracking( + $promise, + (string) $nextRequest->getUri(), + $response->getStatusCode() + ); + } + + return $promise; + } + + /** + * Enable tracking on promise. + * + * @return PromiseInterface + */ + private function withTracking(PromiseInterface $promise, $uri, $statusCode) + { + return $promise->then( + function (ResponseInterface $response) use ($uri, $statusCode) { + // Note that we are pushing to the front of the list as this + // would be an earlier response than what is currently present + // in the history header. + $historyHeader = $response->getHeader(self::HISTORY_HEADER); + $statusHeader = $response->getHeader(self::STATUS_HISTORY_HEADER); + array_unshift($historyHeader, $uri); + array_unshift($statusHeader, $statusCode); + return $response->withHeader(self::HISTORY_HEADER, $historyHeader) + ->withHeader(self::STATUS_HISTORY_HEADER, $statusHeader); + } + ); + } + + /** + * Check for too many redirects + * + * @return void + * + * @throws TooManyRedirectsException Too many redirects. + */ + private function guardMax(RequestInterface $request, array &$options) + { + $current = isset($options['__redirect_count']) + ? $options['__redirect_count'] + : 0; + $options['__redirect_count'] = $current + 1; + $max = $options['allow_redirects']['max']; + + if ($options['__redirect_count'] > $max) { + throw new TooManyRedirectsException( + "Will not follow more than {$max} redirects", + $request + ); + } + } + + /** + * @param RequestInterface $request + * @param array $options + * @param ResponseInterface $response + * + * @return RequestInterface + */ + public function modifyRequest( + RequestInterface $request, + array $options, + ResponseInterface $response + ) { + // Request modifications to apply. + $modify = []; + $protocols = $options['allow_redirects']['protocols']; + + // Use a GET request if this is an entity enclosing request and we are + // not forcing RFC compliance, but rather emulating what all browsers + // would do. + $statusCode = $response->getStatusCode(); + if ($statusCode == 303 || + ($statusCode <= 302 && !$options['allow_redirects']['strict']) + ) { + $modify['method'] = 'GET'; + $modify['body'] = ''; + } + + $uri = $this->redirectUri($request, $response, $protocols); + if (isset($options['idn_conversion']) && ($options['idn_conversion'] !== false)) { + $idnOptions = ($options['idn_conversion'] === true) ? IDNA_DEFAULT : $options['idn_conversion']; + $uri = _idn_uri_convert($uri, $idnOptions); + } + + $modify['uri'] = $uri; + Psr7\rewind_body($request); + + // Add the Referer header if it is told to do so and only + // add the header if we are not redirecting from https to http. + if ($options['allow_redirects']['referer'] + && $modify['uri']->getScheme() === $request->getUri()->getScheme() + ) { + $uri = $request->getUri()->withUserInfo(''); + $modify['set_headers']['Referer'] = (string) $uri; + } else { + $modify['remove_headers'][] = 'Referer'; + } + + // Remove Authorization header if host is different. + if ($request->getUri()->getHost() !== $modify['uri']->getHost()) { + $modify['remove_headers'][] = 'Authorization'; + } + + return Psr7\modify_request($request, $modify); + } + + /** + * Set the appropriate URL on the request based on the location header + * + * @param RequestInterface $request + * @param ResponseInterface $response + * @param array $protocols + * + * @return UriInterface + */ + private function redirectUri( + RequestInterface $request, + ResponseInterface $response, + array $protocols + ) { + $location = Psr7\UriResolver::resolve( + $request->getUri(), + new Psr7\Uri($response->getHeaderLine('Location')) + ); + + // Ensure that the redirect URI is allowed based on the protocols. + if (!in_array($location->getScheme(), $protocols)) { + throw new BadResponseException( + sprintf( + 'Redirect URI, %s, does not use one of the allowed redirect protocols: %s', + $location, + implode(', ', $protocols) + ), + $request, + $response + ); + } + + return $location; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/RequestOptions.php b/base/vendor/guzzlehttp/guzzle/src/RequestOptions.php new file mode 100644 index 00000000..355f658f --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/RequestOptions.php @@ -0,0 +1,263 @@ +decider = $decider; + $this->nextHandler = $nextHandler; + $this->delay = $delay ?: __CLASS__ . '::exponentialDelay'; + } + + /** + * Default exponential backoff delay function. + * + * @param int $retries + * + * @return int milliseconds. + */ + public static function exponentialDelay($retries) + { + return (int) pow(2, $retries - 1) * 1000; + } + + /** + * @param RequestInterface $request + * @param array $options + * + * @return PromiseInterface + */ + public function __invoke(RequestInterface $request, array $options) + { + if (!isset($options['retries'])) { + $options['retries'] = 0; + } + + $fn = $this->nextHandler; + return $fn($request, $options) + ->then( + $this->onFulfilled($request, $options), + $this->onRejected($request, $options) + ); + } + + /** + * Execute fulfilled closure + * + * @return mixed + */ + private function onFulfilled(RequestInterface $req, array $options) + { + return function ($value) use ($req, $options) { + if (!call_user_func( + $this->decider, + $options['retries'], + $req, + $value, + null + )) { + return $value; + } + return $this->doRetry($req, $options, $value); + }; + } + + /** + * Execute rejected closure + * + * @return callable + */ + private function onRejected(RequestInterface $req, array $options) + { + return function ($reason) use ($req, $options) { + if (!call_user_func( + $this->decider, + $options['retries'], + $req, + null, + $reason + )) { + return \GuzzleHttp\Promise\rejection_for($reason); + } + return $this->doRetry($req, $options); + }; + } + + /** + * @return self + */ + private function doRetry(RequestInterface $request, array $options, ResponseInterface $response = null) + { + $options['delay'] = call_user_func($this->delay, ++$options['retries'], $response); + + return $this($request, $options); + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/TransferStats.php b/base/vendor/guzzlehttp/guzzle/src/TransferStats.php new file mode 100644 index 00000000..87fb3c00 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/TransferStats.php @@ -0,0 +1,126 @@ +request = $request; + $this->response = $response; + $this->transferTime = $transferTime; + $this->handlerErrorData = $handlerErrorData; + $this->handlerStats = $handlerStats; + } + + /** + * @return RequestInterface + */ + public function getRequest() + { + return $this->request; + } + + /** + * Returns the response that was received (if any). + * + * @return ResponseInterface|null + */ + public function getResponse() + { + return $this->response; + } + + /** + * Returns true if a response was received. + * + * @return bool + */ + public function hasResponse() + { + return $this->response !== null; + } + + /** + * Gets handler specific error data. + * + * This might be an exception, a integer representing an error code, or + * anything else. Relying on this value assumes that you know what handler + * you are using. + * + * @return mixed + */ + public function getHandlerErrorData() + { + return $this->handlerErrorData; + } + + /** + * Get the effective URI the request was sent to. + * + * @return UriInterface + */ + public function getEffectiveUri() + { + return $this->request->getUri(); + } + + /** + * Get the estimated time the request was being transferred by the handler. + * + * @return float|null Time in seconds. + */ + public function getTransferTime() + { + return $this->transferTime; + } + + /** + * Gets an array of all of the handler specific transfer data. + * + * @return array + */ + public function getHandlerStats() + { + return $this->handlerStats; + } + + /** + * Get a specific handler statistic from the handler by name. + * + * @param string $stat Handler specific transfer stat to retrieve. + * + * @return mixed|null + */ + public function getHandlerStat($stat) + { + return isset($this->handlerStats[$stat]) + ? $this->handlerStats[$stat] + : null; + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/UriTemplate.php b/base/vendor/guzzlehttp/guzzle/src/UriTemplate.php new file mode 100644 index 00000000..96dcfd09 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/UriTemplate.php @@ -0,0 +1,237 @@ + ['prefix' => '', 'joiner' => ',', 'query' => false], + '+' => ['prefix' => '', 'joiner' => ',', 'query' => false], + '#' => ['prefix' => '#', 'joiner' => ',', 'query' => false], + '.' => ['prefix' => '.', 'joiner' => '.', 'query' => false], + '/' => ['prefix' => '/', 'joiner' => '/', 'query' => false], + ';' => ['prefix' => ';', 'joiner' => ';', 'query' => true], + '?' => ['prefix' => '?', 'joiner' => '&', 'query' => true], + '&' => ['prefix' => '&', 'joiner' => '&', 'query' => true] + ]; + + /** @var array Delimiters */ + private static $delims = [':', '/', '?', '#', '[', ']', '@', '!', '$', + '&', '\'', '(', ')', '*', '+', ',', ';', '=']; + + /** @var array Percent encoded delimiters */ + private static $delimsPct = ['%3A', '%2F', '%3F', '%23', '%5B', '%5D', + '%40', '%21', '%24', '%26', '%27', '%28', '%29', '%2A', '%2B', '%2C', + '%3B', '%3D']; + + public function expand($template, array $variables) + { + if (false === strpos($template, '{')) { + return $template; + } + + $this->template = $template; + $this->variables = $variables; + + return preg_replace_callback( + '/\{([^\}]+)\}/', + [$this, 'expandMatch'], + $this->template + ); + } + + /** + * Parse an expression into parts + * + * @param string $expression Expression to parse + * + * @return array Returns an associative array of parts + */ + private function parseExpression($expression) + { + $result = []; + + if (isset(self::$operatorHash[$expression[0]])) { + $result['operator'] = $expression[0]; + $expression = substr($expression, 1); + } else { + $result['operator'] = ''; + } + + foreach (explode(',', $expression) as $value) { + $value = trim($value); + $varspec = []; + if ($colonPos = strpos($value, ':')) { + $varspec['value'] = substr($value, 0, $colonPos); + $varspec['modifier'] = ':'; + $varspec['position'] = (int) substr($value, $colonPos + 1); + } elseif (substr($value, -1) === '*') { + $varspec['modifier'] = '*'; + $varspec['value'] = substr($value, 0, -1); + } else { + $varspec['value'] = (string) $value; + $varspec['modifier'] = ''; + } + $result['values'][] = $varspec; + } + + return $result; + } + + /** + * Process an expansion + * + * @param array $matches Matches met in the preg_replace_callback + * + * @return string Returns the replacement string + */ + private function expandMatch(array $matches) + { + static $rfc1738to3986 = ['+' => '%20', '%7e' => '~']; + + $replacements = []; + $parsed = self::parseExpression($matches[1]); + $prefix = self::$operatorHash[$parsed['operator']]['prefix']; + $joiner = self::$operatorHash[$parsed['operator']]['joiner']; + $useQuery = self::$operatorHash[$parsed['operator']]['query']; + + foreach ($parsed['values'] as $value) { + if (!isset($this->variables[$value['value']])) { + continue; + } + + $variable = $this->variables[$value['value']]; + $actuallyUseQuery = $useQuery; + $expanded = ''; + + if (is_array($variable)) { + $isAssoc = $this->isAssoc($variable); + $kvp = []; + foreach ($variable as $key => $var) { + if ($isAssoc) { + $key = rawurlencode($key); + $isNestedArray = is_array($var); + } else { + $isNestedArray = false; + } + + if (!$isNestedArray) { + $var = rawurlencode($var); + if ($parsed['operator'] === '+' || + $parsed['operator'] === '#' + ) { + $var = $this->decodeReserved($var); + } + } + + if ($value['modifier'] === '*') { + if ($isAssoc) { + if ($isNestedArray) { + // Nested arrays must allow for deeply nested + // structures. + $var = strtr( + http_build_query([$key => $var]), + $rfc1738to3986 + ); + } else { + $var = $key . '=' . $var; + } + } elseif ($key > 0 && $actuallyUseQuery) { + $var = $value['value'] . '=' . $var; + } + } + + $kvp[$key] = $var; + } + + if (empty($variable)) { + $actuallyUseQuery = false; + } elseif ($value['modifier'] === '*') { + $expanded = implode($joiner, $kvp); + if ($isAssoc) { + // Don't prepend the value name when using the explode + // modifier with an associative array. + $actuallyUseQuery = false; + } + } else { + if ($isAssoc) { + // When an associative array is encountered and the + // explode modifier is not set, then the result must be + // a comma separated list of keys followed by their + // respective values. + foreach ($kvp as $k => &$v) { + $v = $k . ',' . $v; + } + } + $expanded = implode(',', $kvp); + } + } else { + if ($value['modifier'] === ':') { + $variable = substr($variable, 0, $value['position']); + } + $expanded = rawurlencode($variable); + if ($parsed['operator'] === '+' || $parsed['operator'] === '#') { + $expanded = $this->decodeReserved($expanded); + } + } + + if ($actuallyUseQuery) { + if (!$expanded && $joiner !== '&') { + $expanded = $value['value']; + } else { + $expanded = $value['value'] . '=' . $expanded; + } + } + + $replacements[] = $expanded; + } + + $ret = implode($joiner, $replacements); + if ($ret && $prefix) { + return $prefix . $ret; + } + + return $ret; + } + + /** + * Determines if an array is associative. + * + * This makes the assumption that input arrays are sequences or hashes. + * This assumption is a tradeoff for accuracy in favor of speed, but it + * should work in almost every case where input is supplied for a URI + * template. + * + * @param array $array Array to check + * + * @return bool + */ + private function isAssoc(array $array) + { + return $array && array_keys($array)[0] !== 0; + } + + /** + * Removes percent encoding on reserved characters (used with + and # + * modifiers). + * + * @param string $string String to fix + * + * @return string + */ + private function decodeReserved($string) + { + return str_replace(self::$delimsPct, self::$delims, $string); + } +} diff --git a/base/vendor/guzzlehttp/guzzle/src/functions.php b/base/vendor/guzzlehttp/guzzle/src/functions.php new file mode 100644 index 00000000..5e806f63 --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/functions.php @@ -0,0 +1,394 @@ +expand($template, $variables); +} + +/** + * Debug function used to describe the provided value type and class. + * + * @param mixed $input + * + * @return string Returns a string containing the type of the variable and + * if a class is provided, the class name. + */ +function describe_type($input) +{ + switch (gettype($input)) { + case 'object': + return 'object(' . get_class($input) . ')'; + case 'array': + return 'array(' . count($input) . ')'; + default: + ob_start(); + var_dump($input); + // normalize float vs double + return str_replace('double(', 'float(', rtrim(ob_get_clean())); + } +} + +/** + * Parses an array of header lines into an associative array of headers. + * + * @param iterable $lines Header lines array of strings in the following + * format: "Name: Value" + * @return array + */ +function headers_from_lines($lines) +{ + $headers = []; + + foreach ($lines as $line) { + $parts = explode(':', $line, 2); + $headers[trim($parts[0])][] = isset($parts[1]) + ? trim($parts[1]) + : null; + } + + return $headers; +} + +/** + * Returns a debug stream based on the provided variable. + * + * @param mixed $value Optional value + * + * @return resource + */ +function debug_resource($value = null) +{ + if (is_resource($value)) { + return $value; + } elseif (defined('STDOUT')) { + return STDOUT; + } + + return fopen('php://output', 'w'); +} + +/** + * Chooses and creates a default handler to use based on the environment. + * + * The returned handler is not wrapped by any default middlewares. + * + * @throws \RuntimeException if no viable Handler is available. + * @return callable Returns the best handler for the given system. + */ +function choose_handler() +{ + $handler = null; + if (function_exists('curl_multi_exec') && function_exists('curl_exec')) { + $handler = Proxy::wrapSync(new CurlMultiHandler(), new CurlHandler()); + } elseif (function_exists('curl_exec')) { + $handler = new CurlHandler(); + } elseif (function_exists('curl_multi_exec')) { + $handler = new CurlMultiHandler(); + } + + if (ini_get('allow_url_fopen')) { + $handler = $handler + ? Proxy::wrapStreaming($handler, new StreamHandler()) + : new StreamHandler(); + } elseif (!$handler) { + throw new \RuntimeException('GuzzleHttp requires cURL, the ' + . 'allow_url_fopen ini setting, or a custom HTTP handler.'); + } + + return $handler; +} + +/** + * Get the default User-Agent string to use with Guzzle + * + * @return string + */ +function default_user_agent() +{ + static $defaultAgent = ''; + + if (!$defaultAgent) { + $defaultAgent = 'GuzzleHttp/' . Client::VERSION; + if (extension_loaded('curl') && function_exists('curl_version')) { + $defaultAgent .= ' curl/' . \curl_version()['version']; + } + $defaultAgent .= ' PHP/' . PHP_VERSION; + } + + return $defaultAgent; +} + +/** + * Returns the default cacert bundle for the current system. + * + * First, the openssl.cafile and curl.cainfo php.ini settings are checked. + * If those settings are not configured, then the common locations for + * bundles found on Red Hat, CentOS, Fedora, Ubuntu, Debian, FreeBSD, OS X + * and Windows are checked. If any of these file locations are found on + * disk, they will be utilized. + * + * Note: the result of this function is cached for subsequent calls. + * + * @return string + * @throws \RuntimeException if no bundle can be found. + */ +function default_ca_bundle() +{ + static $cached = null; + static $cafiles = [ + // Red Hat, CentOS, Fedora (provided by the ca-certificates package) + '/etc/pki/tls/certs/ca-bundle.crt', + // Ubuntu, Debian (provided by the ca-certificates package) + '/etc/ssl/certs/ca-certificates.crt', + // FreeBSD (provided by the ca_root_nss package) + '/usr/local/share/certs/ca-root-nss.crt', + // SLES 12 (provided by the ca-certificates package) + '/var/lib/ca-certificates/ca-bundle.pem', + // OS X provided by homebrew (using the default path) + '/usr/local/etc/openssl/cert.pem', + // Google app engine + '/etc/ca-certificates.crt', + // Windows? + 'C:\\windows\\system32\\curl-ca-bundle.crt', + 'C:\\windows\\curl-ca-bundle.crt', + ]; + + if ($cached) { + return $cached; + } + + if ($ca = ini_get('openssl.cafile')) { + return $cached = $ca; + } + + if ($ca = ini_get('curl.cainfo')) { + return $cached = $ca; + } + + foreach ($cafiles as $filename) { + if (file_exists($filename)) { + return $cached = $filename; + } + } + + throw new \RuntimeException( + <<< EOT +No system CA bundle could be found in any of the the common system locations. +PHP versions earlier than 5.6 are not properly configured to use the system's +CA bundle by default. In order to verify peer certificates, you will need to +supply the path on disk to a certificate bundle to the 'verify' request +option: http://docs.guzzlephp.org/en/latest/clients.html#verify. If you do not +need a specific certificate bundle, then Mozilla provides a commonly used CA +bundle which can be downloaded here (provided by the maintainer of cURL): +https://raw.githubusercontent.com/bagder/ca-bundle/master/ca-bundle.crt. Once +you have a CA bundle available on disk, you can set the 'openssl.cafile' PHP +ini setting to point to the path to the file, allowing you to omit the 'verify' +request option. See http://curl.haxx.se/docs/sslcerts.html for more +information. +EOT + ); +} + +/** + * Creates an associative array of lowercase header names to the actual + * header casing. + * + * @param array $headers + * + * @return array + */ +function normalize_header_keys(array $headers) +{ + $result = []; + foreach (array_keys($headers) as $key) { + $result[strtolower($key)] = $key; + } + + return $result; +} + +/** + * Returns true if the provided host matches any of the no proxy areas. + * + * This method will strip a port from the host if it is present. Each pattern + * can be matched with an exact match (e.g., "foo.com" == "foo.com") or a + * partial match: (e.g., "foo.com" == "baz.foo.com" and ".foo.com" == + * "baz.foo.com", but ".foo.com" != "foo.com"). + * + * Areas are matched in the following cases: + * 1. "*" (without quotes) always matches any hosts. + * 2. An exact match. + * 3. The area starts with "." and the area is the last part of the host. e.g. + * '.mit.edu' will match any host that ends with '.mit.edu'. + * + * @param string $host Host to check against the patterns. + * @param array $noProxyArray An array of host patterns. + * + * @return bool + */ +function is_host_in_noproxy($host, array $noProxyArray) +{ + if (strlen($host) === 0) { + throw new \InvalidArgumentException('Empty host provided'); + } + + // Strip port if present. + if (strpos($host, ':')) { + $host = explode($host, ':', 2)[0]; + } + + foreach ($noProxyArray as $area) { + // Always match on wildcards. + if ($area === '*') { + return true; + } elseif (empty($area)) { + // Don't match on empty values. + continue; + } elseif ($area === $host) { + // Exact matches. + return true; + } else { + // Special match if the area when prefixed with ".". Remove any + // existing leading "." and add a new leading ".". + $area = '.' . ltrim($area, '.'); + if (substr($host, -(strlen($area))) === $area) { + return true; + } + } + } + + return false; +} + +/** + * Wrapper for json_decode that throws when an error occurs. + * + * @param string $json JSON data to parse + * @param bool $assoc When true, returned objects will be converted + * into associative arrays. + * @param int $depth User specified recursion depth. + * @param int $options Bitmask of JSON decode options. + * + * @return mixed + * @throws Exception\InvalidArgumentException if the JSON cannot be decoded. + * @link http://www.php.net/manual/en/function.json-decode.php + */ +function json_decode($json, $assoc = false, $depth = 512, $options = 0) +{ + $data = \json_decode($json, $assoc, $depth, $options); + if (JSON_ERROR_NONE !== json_last_error()) { + throw new Exception\InvalidArgumentException( + 'json_decode error: ' . json_last_error_msg() + ); + } + + return $data; +} + +/** + * Wrapper for JSON encoding that throws when an error occurs. + * + * @param mixed $value The value being encoded + * @param int $options JSON encode option bitmask + * @param int $depth Set the maximum depth. Must be greater than zero. + * + * @return string + * @throws Exception\InvalidArgumentException if the JSON cannot be encoded. + * @link http://www.php.net/manual/en/function.json-encode.php + */ +function json_encode($value, $options = 0, $depth = 512) +{ + $json = \json_encode($value, $options, $depth); + if (JSON_ERROR_NONE !== json_last_error()) { + throw new Exception\InvalidArgumentException( + 'json_encode error: ' . json_last_error_msg() + ); + } + + return $json; +} + +/** + * Wrapper for the hrtime() or microtime() functions + * (depending on the PHP version, one of the two is used) + * + * @return float|mixed UNIX timestamp + * @internal + */ +function _current_time() +{ + return function_exists('hrtime') ? hrtime(true) / 1e9 : microtime(true); +} + + +/** + * @param int $options + * + * @return UriInterface + * + * @internal + */ +function _idn_uri_convert(UriInterface $uri, $options = 0) +{ + if ($uri->getHost()) { + $idnaVariant = defined('INTL_IDNA_VARIANT_UTS46') ? INTL_IDNA_VARIANT_UTS46 : 0; + $asciiHost = $idnaVariant === 0 + ? idn_to_ascii($uri->getHost(), $options) + : idn_to_ascii($uri->getHost(), $options, $idnaVariant, $info); + if ($asciiHost === false) { + $errorBitSet = isset($info['errors']) ? $info['errors'] : 0; + + $errorConstants = array_filter(array_keys(get_defined_constants()), function ($name) { + return substr($name, 0, 11) === 'IDNA_ERROR_'; + }); + + $errors = []; + foreach ($errorConstants as $errorConstant) { + if ($errorBitSet & constant($errorConstant)) { + $errors[] = $errorConstant; + } + } + + $errorMessage = 'IDN conversion failed'; + if ($errors) { + $errorMessage .= ' (errors: ' . implode(', ', $errors) . ')'; + } + + throw new InvalidArgumentException($errorMessage); + } else { + if ($uri->getHost() !== $asciiHost) { + // Replace URI only if the ASCII version is different + $uri = $uri->withHost($asciiHost); + } + } + } + + return $uri; +} diff --git a/base/vendor/guzzlehttp/guzzle/src/functions_include.php b/base/vendor/guzzlehttp/guzzle/src/functions_include.php new file mode 100644 index 00000000..a93393ac --- /dev/null +++ b/base/vendor/guzzlehttp/guzzle/src/functions_include.php @@ -0,0 +1,6 @@ + + +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/base/vendor/guzzlehttp/promises/Makefile b/base/vendor/guzzlehttp/promises/Makefile new file mode 100644 index 00000000..8d5b3ef9 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/Makefile @@ -0,0 +1,13 @@ +all: clean test + +test: + vendor/bin/phpunit + +coverage: + vendor/bin/phpunit --coverage-html=artifacts/coverage + +view-coverage: + open artifacts/coverage/index.html + +clean: + rm -rf artifacts/* diff --git a/base/vendor/guzzlehttp/promises/README.md b/base/vendor/guzzlehttp/promises/README.md new file mode 100644 index 00000000..7b607e28 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/README.md @@ -0,0 +1,504 @@ +# Guzzle Promises + +[Promises/A+](https://promisesaplus.com/) implementation that handles promise +chaining and resolution iteratively, allowing for "infinite" promise chaining +while keeping the stack size constant. Read [this blog post](https://blog.domenic.me/youre-missing-the-point-of-promises/) +for a general introduction to promises. + +- [Features](#features) +- [Quick start](#quick-start) +- [Synchronous wait](#synchronous-wait) +- [Cancellation](#cancellation) +- [API](#api) + - [Promise](#promise) + - [FulfilledPromise](#fulfilledpromise) + - [RejectedPromise](#rejectedpromise) +- [Promise interop](#promise-interop) +- [Implementation notes](#implementation-notes) + + +# Features + +- [Promises/A+](https://promisesaplus.com/) implementation. +- Promise resolution and chaining is handled iteratively, allowing for + "infinite" promise chaining. +- Promises have a synchronous `wait` method. +- Promises can be cancelled. +- Works with any object that has a `then` function. +- C# style async/await coroutine promises using + `GuzzleHttp\Promise\coroutine()`. + + +# Quick start + +A *promise* represents the eventual result of an asynchronous operation. The +primary way of interacting with a promise is through its `then` method, which +registers callbacks to receive either a promise's eventual value or the reason +why the promise cannot be fulfilled. + + +## Callbacks + +Callbacks are registered with the `then` method by providing an optional +`$onFulfilled` followed by an optional `$onRejected` function. + + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise->then( + // $onFulfilled + function ($value) { + echo 'The promise was fulfilled.'; + }, + // $onRejected + function ($reason) { + echo 'The promise was rejected.'; + } +); +``` + +*Resolving* a promise means that you either fulfill a promise with a *value* or +reject a promise with a *reason*. Resolving a promises triggers callbacks +registered with the promises's `then` method. These callbacks are triggered +only once and in the order in which they were added. + + +## Resolving a promise + +Promises are fulfilled using the `resolve($value)` method. Resolving a promise +with any value other than a `GuzzleHttp\Promise\RejectedPromise` will trigger +all of the onFulfilled callbacks (resolving a promise with a rejected promise +will reject the promise and trigger the `$onRejected` callbacks). + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise + ->then(function ($value) { + // Return a value and don't break the chain + return "Hello, " . $value; + }) + // This then is executed after the first then and receives the value + // returned from the first then. + ->then(function ($value) { + echo $value; + }); + +// Resolving the promise triggers the $onFulfilled callbacks and outputs +// "Hello, reader". +$promise->resolve('reader.'); +``` + + +## Promise forwarding + +Promises can be chained one after the other. Each then in the chain is a new +promise. The return value of a promise is what's forwarded to the next +promise in the chain. Returning a promise in a `then` callback will cause the +subsequent promises in the chain to only be fulfilled when the returned promise +has been fulfilled. The next promise in the chain will be invoked with the +resolved value of the promise. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$nextPromise = new Promise(); + +$promise + ->then(function ($value) use ($nextPromise) { + echo $value; + return $nextPromise; + }) + ->then(function ($value) { + echo $value; + }); + +// Triggers the first callback and outputs "A" +$promise->resolve('A'); +// Triggers the second callback and outputs "B" +$nextPromise->resolve('B'); +``` + +## Promise rejection + +When a promise is rejected, the `$onRejected` callbacks are invoked with the +rejection reason. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise->then(null, function ($reason) { + echo $reason; +}); + +$promise->reject('Error!'); +// Outputs "Error!" +``` + +## Rejection forwarding + +If an exception is thrown in an `$onRejected` callback, subsequent +`$onRejected` callbacks are invoked with the thrown exception as the reason. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise(); +$promise->then(null, function ($reason) { + throw new \Exception($reason); +})->then(null, function ($reason) { + assert($reason->getMessage() === 'Error!'); +}); + +$promise->reject('Error!'); +``` + +You can also forward a rejection down the promise chain by returning a +`GuzzleHttp\Promise\RejectedPromise` in either an `$onFulfilled` or +`$onRejected` callback. + +```php +use GuzzleHttp\Promise\Promise; +use GuzzleHttp\Promise\RejectedPromise; + +$promise = new Promise(); +$promise->then(null, function ($reason) { + return new RejectedPromise($reason); +})->then(null, function ($reason) { + assert($reason === 'Error!'); +}); + +$promise->reject('Error!'); +``` + +If an exception is not thrown in a `$onRejected` callback and the callback +does not return a rejected promise, downstream `$onFulfilled` callbacks are +invoked using the value returned from the `$onRejected` callback. + +```php +use GuzzleHttp\Promise\Promise; +use GuzzleHttp\Promise\RejectedPromise; + +$promise = new Promise(); +$promise + ->then(null, function ($reason) { + return "It's ok"; + }) + ->then(function ($value) { + assert($value === "It's ok"); + }); + +$promise->reject('Error!'); +``` + +# Synchronous wait + +You can synchronously force promises to complete using a promise's `wait` +method. When creating a promise, you can provide a wait function that is used +to synchronously force a promise to complete. When a wait function is invoked +it is expected to deliver a value to the promise or reject the promise. If the +wait function does not deliver a value, then an exception is thrown. The wait +function provided to a promise constructor is invoked when the `wait` function +of the promise is called. + +```php +$promise = new Promise(function () use (&$promise) { + $promise->resolve('foo'); +}); + +// Calling wait will return the value of the promise. +echo $promise->wait(); // outputs "foo" +``` + +If an exception is encountered while invoking the wait function of a promise, +the promise is rejected with the exception and the exception is thrown. + +```php +$promise = new Promise(function () use (&$promise) { + throw new \Exception('foo'); +}); + +$promise->wait(); // throws the exception. +``` + +Calling `wait` on a promise that has been fulfilled will not trigger the wait +function. It will simply return the previously resolved value. + +```php +$promise = new Promise(function () { die('this is not called!'); }); +$promise->resolve('foo'); +echo $promise->wait(); // outputs "foo" +``` + +Calling `wait` on a promise that has been rejected will throw an exception. If +the rejection reason is an instance of `\Exception` the reason is thrown. +Otherwise, a `GuzzleHttp\Promise\RejectionException` is thrown and the reason +can be obtained by calling the `getReason` method of the exception. + +```php +$promise = new Promise(); +$promise->reject('foo'); +$promise->wait(); +``` + +> PHP Fatal error: Uncaught exception 'GuzzleHttp\Promise\RejectionException' with message 'The promise was rejected with value: foo' + + +## Unwrapping a promise + +When synchronously waiting on a promise, you are joining the state of the +promise into the current state of execution (i.e., return the value of the +promise if it was fulfilled or throw an exception if it was rejected). This is +called "unwrapping" the promise. Waiting on a promise will by default unwrap +the promise state. + +You can force a promise to resolve and *not* unwrap the state of the promise +by passing `false` to the first argument of the `wait` function: + +```php +$promise = new Promise(); +$promise->reject('foo'); +// This will not throw an exception. It simply ensures the promise has +// been resolved. +$promise->wait(false); +``` + +When unwrapping a promise, the resolved value of the promise will be waited +upon until the unwrapped value is not a promise. This means that if you resolve +promise A with a promise B and unwrap promise A, the value returned by the +wait function will be the value delivered to promise B. + +**Note**: when you do not unwrap the promise, no value is returned. + + +# Cancellation + +You can cancel a promise that has not yet been fulfilled using the `cancel()` +method of a promise. When creating a promise you can provide an optional +cancel function that when invoked cancels the action of computing a resolution +of the promise. + + +# API + + +## Promise + +When creating a promise object, you can provide an optional `$waitFn` and +`$cancelFn`. `$waitFn` is a function that is invoked with no arguments and is +expected to resolve the promise. `$cancelFn` is a function with no arguments +that is expected to cancel the computation of a promise. It is invoked when the +`cancel()` method of a promise is called. + +```php +use GuzzleHttp\Promise\Promise; + +$promise = new Promise( + function () use (&$promise) { + $promise->resolve('waited'); + }, + function () { + // do something that will cancel the promise computation (e.g., close + // a socket, cancel a database query, etc...) + } +); + +assert('waited' === $promise->wait()); +``` + +A promise has the following methods: + +- `then(callable $onFulfilled, callable $onRejected) : PromiseInterface` + + Appends fulfillment and rejection handlers to the promise, and returns a new promise resolving to the return value of the called handler. + +- `otherwise(callable $onRejected) : PromiseInterface` + + Appends a rejection handler callback to the promise, and returns a new promise resolving to the return value of the callback if it is called, or to its original fulfillment value if the promise is instead fulfilled. + +- `wait($unwrap = true) : mixed` + + Synchronously waits on the promise to complete. + + `$unwrap` controls whether or not the value of the promise is returned for a + fulfilled promise or if an exception is thrown if the promise is rejected. + This is set to `true` by default. + +- `cancel()` + + Attempts to cancel the promise if possible. The promise being cancelled and + the parent most ancestor that has not yet been resolved will also be + cancelled. Any promises waiting on the cancelled promise to resolve will also + be cancelled. + +- `getState() : string` + + Returns the state of the promise. One of `pending`, `fulfilled`, or + `rejected`. + +- `resolve($value)` + + Fulfills the promise with the given `$value`. + +- `reject($reason)` + + Rejects the promise with the given `$reason`. + + +## FulfilledPromise + +A fulfilled promise can be created to represent a promise that has been +fulfilled. + +```php +use GuzzleHttp\Promise\FulfilledPromise; + +$promise = new FulfilledPromise('value'); + +// Fulfilled callbacks are immediately invoked. +$promise->then(function ($value) { + echo $value; +}); +``` + + +## RejectedPromise + +A rejected promise can be created to represent a promise that has been +rejected. + +```php +use GuzzleHttp\Promise\RejectedPromise; + +$promise = new RejectedPromise('Error'); + +// Rejected callbacks are immediately invoked. +$promise->then(null, function ($reason) { + echo $reason; +}); +``` + + +# Promise interop + +This library works with foreign promises that have a `then` method. This means +you can use Guzzle promises with [React promises](https://github.com/reactphp/promise) +for example. When a foreign promise is returned inside of a then method +callback, promise resolution will occur recursively. + +```php +// Create a React promise +$deferred = new React\Promise\Deferred(); +$reactPromise = $deferred->promise(); + +// Create a Guzzle promise that is fulfilled with a React promise. +$guzzlePromise = new \GuzzleHttp\Promise\Promise(); +$guzzlePromise->then(function ($value) use ($reactPromise) { + // Do something something with the value... + // Return the React promise + return $reactPromise; +}); +``` + +Please note that wait and cancel chaining is no longer possible when forwarding +a foreign promise. You will need to wrap a third-party promise with a Guzzle +promise in order to utilize wait and cancel functions with foreign promises. + + +## Event Loop Integration + +In order to keep the stack size constant, Guzzle promises are resolved +asynchronously using a task queue. When waiting on promises synchronously, the +task queue will be automatically run to ensure that the blocking promise and +any forwarded promises are resolved. When using promises asynchronously in an +event loop, you will need to run the task queue on each tick of the loop. If +you do not run the task queue, then promises will not be resolved. + +You can run the task queue using the `run()` method of the global task queue +instance. + +```php +// Get the global task queue +$queue = \GuzzleHttp\Promise\queue(); +$queue->run(); +``` + +For example, you could use Guzzle promises with React using a periodic timer: + +```php +$loop = React\EventLoop\Factory::create(); +$loop->addPeriodicTimer(0, [$queue, 'run']); +``` + +*TODO*: Perhaps adding a `futureTick()` on each tick would be faster? + + +# Implementation notes + + +## Promise resolution and chaining is handled iteratively + +By shuffling pending handlers from one owner to another, promises are +resolved iteratively, allowing for "infinite" then chaining. + +```php +then(function ($v) { + // The stack size remains constant (a good thing) + echo xdebug_get_stack_depth() . ', '; + return $v + 1; + }); +} + +$parent->resolve(0); +var_dump($p->wait()); // int(1000) + +``` + +When a promise is fulfilled or rejected with a non-promise value, the promise +then takes ownership of the handlers of each child promise and delivers values +down the chain without using recursion. + +When a promise is resolved with another promise, the original promise transfers +all of its pending handlers to the new promise. When the new promise is +eventually resolved, all of the pending handlers are delivered the forwarded +value. + + +## A promise is the deferred. + +Some promise libraries implement promises using a deferred object to represent +a computation and a promise object to represent the delivery of the result of +the computation. This is a nice separation of computation and delivery because +consumers of the promise cannot modify the value that will be eventually +delivered. + +One side effect of being able to implement promise resolution and chaining +iteratively is that you need to be able for one promise to reach into the state +of another promise to shuffle around ownership of handlers. In order to achieve +this without making the handlers of a promise publicly mutable, a promise is +also the deferred value, allowing promises of the same parent class to reach +into and modify the private properties of promises of the same type. While this +does allow consumers of the value to modify the resolution or rejection of the +deferred, it is a small price to pay for keeping the stack size constant. + +```php +$promise = new Promise(); +$promise->then(function ($value) { echo $value; }); +// The promise is the deferred value, so you can deliver a value to it. +$promise->resolve('foo'); +// prints "foo" +``` diff --git a/base/vendor/guzzlehttp/promises/composer.json b/base/vendor/guzzlehttp/promises/composer.json new file mode 100644 index 00000000..ec41a61e --- /dev/null +++ b/base/vendor/guzzlehttp/promises/composer.json @@ -0,0 +1,34 @@ +{ + "name": "guzzlehttp/promises", + "description": "Guzzle promises library", + "keywords": ["promise"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "require": { + "php": ">=5.5.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0" + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": ["src/functions_include.php"] + }, + "scripts": { + "test": "vendor/bin/phpunit", + "test-ci": "vendor/bin/phpunit --coverage-text" + }, + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + } +} diff --git a/base/vendor/guzzlehttp/promises/src/AggregateException.php b/base/vendor/guzzlehttp/promises/src/AggregateException.php new file mode 100644 index 00000000..6a5690c3 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/AggregateException.php @@ -0,0 +1,16 @@ +then(function ($v) { echo $v; }); + * + * @param callable $generatorFn Generator function to wrap into a promise. + * + * @return Promise + * @link https://github.com/petkaantonov/bluebird/blob/master/API.md#generators inspiration + */ +final class Coroutine implements PromiseInterface +{ + /** + * @var PromiseInterface|null + */ + private $currentPromise; + + /** + * @var Generator + */ + private $generator; + + /** + * @var Promise + */ + private $result; + + public function __construct(callable $generatorFn) + { + $this->generator = $generatorFn(); + $this->result = new Promise(function () { + while (isset($this->currentPromise)) { + $this->currentPromise->wait(); + } + }); + $this->nextCoroutine($this->generator->current()); + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + return $this->result->then($onFulfilled, $onRejected); + } + + public function otherwise(callable $onRejected) + { + return $this->result->otherwise($onRejected); + } + + public function wait($unwrap = true) + { + return $this->result->wait($unwrap); + } + + public function getState() + { + return $this->result->getState(); + } + + public function resolve($value) + { + $this->result->resolve($value); + } + + public function reject($reason) + { + $this->result->reject($reason); + } + + public function cancel() + { + $this->currentPromise->cancel(); + $this->result->cancel(); + } + + private function nextCoroutine($yielded) + { + $this->currentPromise = promise_for($yielded) + ->then([$this, '_handleSuccess'], [$this, '_handleFailure']); + } + + /** + * @internal + */ + public function _handleSuccess($value) + { + unset($this->currentPromise); + try { + $next = $this->generator->send($value); + if ($this->generator->valid()) { + $this->nextCoroutine($next); + } else { + $this->result->resolve($value); + } + } catch (Exception $exception) { + $this->result->reject($exception); + } catch (Throwable $throwable) { + $this->result->reject($throwable); + } + } + + /** + * @internal + */ + public function _handleFailure($reason) + { + unset($this->currentPromise); + try { + $nextYield = $this->generator->throw(exception_for($reason)); + // The throw was caught, so keep iterating on the coroutine + $this->nextCoroutine($nextYield); + } catch (Exception $exception) { + $this->result->reject($exception); + } catch (Throwable $throwable) { + $this->result->reject($throwable); + } + } +} diff --git a/base/vendor/guzzlehttp/promises/src/EachPromise.php b/base/vendor/guzzlehttp/promises/src/EachPromise.php new file mode 100644 index 00000000..d0ddf603 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/EachPromise.php @@ -0,0 +1,229 @@ +iterable = iter_for($iterable); + + if (isset($config['concurrency'])) { + $this->concurrency = $config['concurrency']; + } + + if (isset($config['fulfilled'])) { + $this->onFulfilled = $config['fulfilled']; + } + + if (isset($config['rejected'])) { + $this->onRejected = $config['rejected']; + } + } + + public function promise() + { + if ($this->aggregate) { + return $this->aggregate; + } + + try { + $this->createPromise(); + $this->iterable->rewind(); + $this->refillPending(); + } catch (\Throwable $e) { + $this->aggregate->reject($e); + } catch (\Exception $e) { + $this->aggregate->reject($e); + } + + return $this->aggregate; + } + + private function createPromise() + { + $this->mutex = false; + $this->aggregate = new Promise(function () { + reset($this->pending); + if (empty($this->pending) && !$this->iterable->valid()) { + $this->aggregate->resolve(null); + return; + } + + // Consume a potentially fluctuating list of promises while + // ensuring that indexes are maintained (precluding array_shift). + while ($promise = current($this->pending)) { + next($this->pending); + $promise->wait(); + if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + return; + } + } + }); + + // Clear the references when the promise is resolved. + $clearFn = function () { + $this->iterable = $this->concurrency = $this->pending = null; + $this->onFulfilled = $this->onRejected = null; + }; + + $this->aggregate->then($clearFn, $clearFn); + } + + private function refillPending() + { + if (!$this->concurrency) { + // Add all pending promises. + while ($this->addPending() && $this->advanceIterator()); + return; + } + + // Add only up to N pending promises. + $concurrency = is_callable($this->concurrency) + ? call_user_func($this->concurrency, count($this->pending)) + : $this->concurrency; + $concurrency = max($concurrency - count($this->pending), 0); + // Concurrency may be set to 0 to disallow new promises. + if (!$concurrency) { + return; + } + // Add the first pending promise. + $this->addPending(); + // Note this is special handling for concurrency=1 so that we do + // not advance the iterator after adding the first promise. This + // helps work around issues with generators that might not have the + // next value to yield until promise callbacks are called. + while (--$concurrency + && $this->advanceIterator() + && $this->addPending()); + } + + private function addPending() + { + if (!$this->iterable || !$this->iterable->valid()) { + return false; + } + + $promise = promise_for($this->iterable->current()); + $idx = $this->iterable->key(); + + $this->pending[$idx] = $promise->then( + function ($value) use ($idx) { + if ($this->onFulfilled) { + call_user_func( + $this->onFulfilled, $value, $idx, $this->aggregate + ); + } + $this->step($idx); + }, + function ($reason) use ($idx) { + if ($this->onRejected) { + call_user_func( + $this->onRejected, $reason, $idx, $this->aggregate + ); + } + $this->step($idx); + } + ); + + return true; + } + + private function advanceIterator() + { + // Place a lock on the iterator so that we ensure to not recurse, + // preventing fatal generator errors. + if ($this->mutex) { + return false; + } + + $this->mutex = true; + + try { + $this->iterable->next(); + $this->mutex = false; + return true; + } catch (\Throwable $e) { + $this->aggregate->reject($e); + $this->mutex = false; + return false; + } catch (\Exception $e) { + $this->aggregate->reject($e); + $this->mutex = false; + return false; + } + } + + private function step($idx) + { + // If the promise was already resolved, then ignore this step. + if ($this->aggregate->getState() !== PromiseInterface::PENDING) { + return; + } + + unset($this->pending[$idx]); + + // Only refill pending promises if we are not locked, preventing the + // EachPromise to recursively invoke the provided iterator, which + // cause a fatal error: "Cannot resume an already running generator" + if ($this->advanceIterator() && !$this->checkIfFinished()) { + // Add more pending promises if possible. + $this->refillPending(); + } + } + + private function checkIfFinished() + { + if (!$this->pending && !$this->iterable->valid()) { + // Resolve the promise if there's nothing left to do. + $this->aggregate->resolve(null); + return true; + } + + return false; + } +} diff --git a/base/vendor/guzzlehttp/promises/src/FulfilledPromise.php b/base/vendor/guzzlehttp/promises/src/FulfilledPromise.php new file mode 100644 index 00000000..dbbeeb9f --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/FulfilledPromise.php @@ -0,0 +1,82 @@ +value = $value; + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + // Return itself if there is no onFulfilled function. + if (!$onFulfilled) { + return $this; + } + + $queue = queue(); + $p = new Promise([$queue, 'run']); + $value = $this->value; + $queue->add(static function () use ($p, $value, $onFulfilled) { + if ($p->getState() === self::PENDING) { + try { + $p->resolve($onFulfilled($value)); + } catch (\Throwable $e) { + $p->reject($e); + } catch (\Exception $e) { + $p->reject($e); + } + } + }); + + return $p; + } + + public function otherwise(callable $onRejected) + { + return $this->then(null, $onRejected); + } + + public function wait($unwrap = true, $defaultDelivery = null) + { + return $unwrap ? $this->value : null; + } + + public function getState() + { + return self::FULFILLED; + } + + public function resolve($value) + { + if ($value !== $this->value) { + throw new \LogicException("Cannot resolve a fulfilled promise"); + } + } + + public function reject($reason) + { + throw new \LogicException("Cannot reject a fulfilled promise"); + } + + public function cancel() + { + // pass + } +} diff --git a/base/vendor/guzzlehttp/promises/src/Promise.php b/base/vendor/guzzlehttp/promises/src/Promise.php new file mode 100644 index 00000000..844ada07 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/Promise.php @@ -0,0 +1,280 @@ +waitFn = $waitFn; + $this->cancelFn = $cancelFn; + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + if ($this->state === self::PENDING) { + $p = new Promise(null, [$this, 'cancel']); + $this->handlers[] = [$p, $onFulfilled, $onRejected]; + $p->waitList = $this->waitList; + $p->waitList[] = $this; + return $p; + } + + // Return a fulfilled promise and immediately invoke any callbacks. + if ($this->state === self::FULFILLED) { + return $onFulfilled + ? promise_for($this->result)->then($onFulfilled) + : promise_for($this->result); + } + + // It's either cancelled or rejected, so return a rejected promise + // and immediately invoke any callbacks. + $rejection = rejection_for($this->result); + return $onRejected ? $rejection->then(null, $onRejected) : $rejection; + } + + public function otherwise(callable $onRejected) + { + return $this->then(null, $onRejected); + } + + public function wait($unwrap = true) + { + $this->waitIfPending(); + + $inner = $this->result instanceof PromiseInterface + ? $this->result->wait($unwrap) + : $this->result; + + if ($unwrap) { + if ($this->result instanceof PromiseInterface + || $this->state === self::FULFILLED + ) { + return $inner; + } else { + // It's rejected so "unwrap" and throw an exception. + throw exception_for($inner); + } + } + } + + public function getState() + { + return $this->state; + } + + public function cancel() + { + if ($this->state !== self::PENDING) { + return; + } + + $this->waitFn = $this->waitList = null; + + if ($this->cancelFn) { + $fn = $this->cancelFn; + $this->cancelFn = null; + try { + $fn(); + } catch (\Throwable $e) { + $this->reject($e); + } catch (\Exception $e) { + $this->reject($e); + } + } + + // Reject the promise only if it wasn't rejected in a then callback. + if ($this->state === self::PENDING) { + $this->reject(new CancellationException('Promise has been cancelled')); + } + } + + public function resolve($value) + { + $this->settle(self::FULFILLED, $value); + } + + public function reject($reason) + { + $this->settle(self::REJECTED, $reason); + } + + private function settle($state, $value) + { + if ($this->state !== self::PENDING) { + // Ignore calls with the same resolution. + if ($state === $this->state && $value === $this->result) { + return; + } + throw $this->state === $state + ? new \LogicException("The promise is already {$state}.") + : new \LogicException("Cannot change a {$this->state} promise to {$state}"); + } + + if ($value === $this) { + throw new \LogicException('Cannot fulfill or reject a promise with itself'); + } + + // Clear out the state of the promise but stash the handlers. + $this->state = $state; + $this->result = $value; + $handlers = $this->handlers; + $this->handlers = null; + $this->waitList = $this->waitFn = null; + $this->cancelFn = null; + + if (!$handlers) { + return; + } + + // If the value was not a settled promise or a thenable, then resolve + // it in the task queue using the correct ID. + if (!method_exists($value, 'then')) { + $id = $state === self::FULFILLED ? 1 : 2; + // It's a success, so resolve the handlers in the queue. + queue()->add(static function () use ($id, $value, $handlers) { + foreach ($handlers as $handler) { + self::callHandler($id, $value, $handler); + } + }); + } elseif ($value instanceof Promise + && $value->getState() === self::PENDING + ) { + // We can just merge our handlers onto the next promise. + $value->handlers = array_merge($value->handlers, $handlers); + } else { + // Resolve the handlers when the forwarded promise is resolved. + $value->then( + static function ($value) use ($handlers) { + foreach ($handlers as $handler) { + self::callHandler(1, $value, $handler); + } + }, + static function ($reason) use ($handlers) { + foreach ($handlers as $handler) { + self::callHandler(2, $reason, $handler); + } + } + ); + } + } + + /** + * Call a stack of handlers using a specific callback index and value. + * + * @param int $index 1 (resolve) or 2 (reject). + * @param mixed $value Value to pass to the callback. + * @param array $handler Array of handler data (promise and callbacks). + * + * @return array Returns the next group to resolve. + */ + private static function callHandler($index, $value, array $handler) + { + /** @var PromiseInterface $promise */ + $promise = $handler[0]; + + // The promise may have been cancelled or resolved before placing + // this thunk in the queue. + if ($promise->getState() !== self::PENDING) { + return; + } + + try { + if (isset($handler[$index])) { + $promise->resolve($handler[$index]($value)); + } elseif ($index === 1) { + // Forward resolution values as-is. + $promise->resolve($value); + } else { + // Forward rejections down the chain. + $promise->reject($value); + } + } catch (\Throwable $reason) { + $promise->reject($reason); + } catch (\Exception $reason) { + $promise->reject($reason); + } + } + + private function waitIfPending() + { + if ($this->state !== self::PENDING) { + return; + } elseif ($this->waitFn) { + $this->invokeWaitFn(); + } elseif ($this->waitList) { + $this->invokeWaitList(); + } else { + // If there's not wait function, then reject the promise. + $this->reject('Cannot wait on a promise that has ' + . 'no internal wait function. You must provide a wait ' + . 'function when constructing the promise to be able to ' + . 'wait on a promise.'); + } + + queue()->run(); + + if ($this->state === self::PENDING) { + $this->reject('Invoking the wait callback did not resolve the promise'); + } + } + + private function invokeWaitFn() + { + try { + $wfn = $this->waitFn; + $this->waitFn = null; + $wfn(true); + } catch (\Exception $reason) { + if ($this->state === self::PENDING) { + // The promise has not been resolved yet, so reject the promise + // with the exception. + $this->reject($reason); + } else { + // The promise was already resolved, so there's a problem in + // the application. + throw $reason; + } + } + } + + private function invokeWaitList() + { + $waitList = $this->waitList; + $this->waitList = null; + + foreach ($waitList as $result) { + while (true) { + $result->waitIfPending(); + + if ($result->result instanceof Promise) { + $result = $result->result; + } else { + if ($result->result instanceof PromiseInterface) { + $result->result->wait(false); + } + break; + } + } + } + } +} diff --git a/base/vendor/guzzlehttp/promises/src/PromiseInterface.php b/base/vendor/guzzlehttp/promises/src/PromiseInterface.php new file mode 100644 index 00000000..8f5f4b99 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/PromiseInterface.php @@ -0,0 +1,93 @@ +reason = $reason; + } + + public function then( + callable $onFulfilled = null, + callable $onRejected = null + ) { + // If there's no onRejected callback then just return self. + if (!$onRejected) { + return $this; + } + + $queue = queue(); + $reason = $this->reason; + $p = new Promise([$queue, 'run']); + $queue->add(static function () use ($p, $reason, $onRejected) { + if ($p->getState() === self::PENDING) { + try { + // Return a resolved promise if onRejected does not throw. + $p->resolve($onRejected($reason)); + } catch (\Throwable $e) { + // onRejected threw, so return a rejected promise. + $p->reject($e); + } catch (\Exception $e) { + // onRejected threw, so return a rejected promise. + $p->reject($e); + } + } + }); + + return $p; + } + + public function otherwise(callable $onRejected) + { + return $this->then(null, $onRejected); + } + + public function wait($unwrap = true, $defaultDelivery = null) + { + if ($unwrap) { + throw exception_for($this->reason); + } + } + + public function getState() + { + return self::REJECTED; + } + + public function resolve($value) + { + throw new \LogicException("Cannot resolve a rejected promise"); + } + + public function reject($reason) + { + if ($reason !== $this->reason) { + throw new \LogicException("Cannot reject a rejected promise"); + } + } + + public function cancel() + { + // pass + } +} diff --git a/base/vendor/guzzlehttp/promises/src/RejectionException.php b/base/vendor/guzzlehttp/promises/src/RejectionException.php new file mode 100644 index 00000000..07c1136d --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/RejectionException.php @@ -0,0 +1,47 @@ +reason = $reason; + + $message = 'The promise was rejected'; + + if ($description) { + $message .= ' with reason: ' . $description; + } elseif (is_string($reason) + || (is_object($reason) && method_exists($reason, '__toString')) + ) { + $message .= ' with reason: ' . $this->reason; + } elseif ($reason instanceof \JsonSerializable) { + $message .= ' with reason: ' + . json_encode($this->reason, JSON_PRETTY_PRINT); + } + + parent::__construct($message); + } + + /** + * Returns the rejection reason. + * + * @return mixed + */ + public function getReason() + { + return $this->reason; + } +} diff --git a/base/vendor/guzzlehttp/promises/src/TaskQueue.php b/base/vendor/guzzlehttp/promises/src/TaskQueue.php new file mode 100644 index 00000000..6e8a2a08 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/TaskQueue.php @@ -0,0 +1,66 @@ +run(); + */ +class TaskQueue implements TaskQueueInterface +{ + private $enableShutdown = true; + private $queue = []; + + public function __construct($withShutdown = true) + { + if ($withShutdown) { + register_shutdown_function(function () { + if ($this->enableShutdown) { + // Only run the tasks if an E_ERROR didn't occur. + $err = error_get_last(); + if (!$err || ($err['type'] ^ E_ERROR)) { + $this->run(); + } + } + }); + } + } + + public function isEmpty() + { + return !$this->queue; + } + + public function add(callable $task) + { + $this->queue[] = $task; + } + + public function run() + { + /** @var callable $task */ + while ($task = array_shift($this->queue)) { + $task(); + } + } + + /** + * The task queue will be run and exhausted by default when the process + * exits IFF the exit is not the result of a PHP E_ERROR error. + * + * You can disable running the automatic shutdown of the queue by calling + * this function. If you disable the task queue shutdown process, then you + * MUST either run the task queue (as a result of running your event loop + * or manually using the run() method) or wait on each outstanding promise. + * + * Note: This shutdown will occur before any destructors are triggered. + */ + public function disableShutdown() + { + $this->enableShutdown = false; + } +} diff --git a/base/vendor/guzzlehttp/promises/src/TaskQueueInterface.php b/base/vendor/guzzlehttp/promises/src/TaskQueueInterface.php new file mode 100644 index 00000000..ac8306e1 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/TaskQueueInterface.php @@ -0,0 +1,25 @@ + + * while ($eventLoop->isRunning()) { + * GuzzleHttp\Promise\queue()->run(); + * } + * + * + * @param TaskQueueInterface $assign Optionally specify a new queue instance. + * + * @return TaskQueueInterface + */ +function queue(TaskQueueInterface $assign = null) +{ + static $queue; + + if ($assign) { + $queue = $assign; + } elseif (!$queue) { + $queue = new TaskQueue(); + } + + return $queue; +} + +/** + * Adds a function to run in the task queue when it is next `run()` and returns + * a promise that is fulfilled or rejected with the result. + * + * @param callable $task Task function to run. + * + * @return PromiseInterface + */ +function task(callable $task) +{ + $queue = queue(); + $promise = new Promise([$queue, 'run']); + $queue->add(function () use ($task, $promise) { + try { + $promise->resolve($task()); + } catch (\Throwable $e) { + $promise->reject($e); + } catch (\Exception $e) { + $promise->reject($e); + } + }); + + return $promise; +} + +/** + * Creates a promise for a value if the value is not a promise. + * + * @param mixed $value Promise or value. + * + * @return PromiseInterface + */ +function promise_for($value) +{ + if ($value instanceof PromiseInterface) { + return $value; + } + + // Return a Guzzle promise that shadows the given promise. + if (method_exists($value, 'then')) { + $wfn = method_exists($value, 'wait') ? [$value, 'wait'] : null; + $cfn = method_exists($value, 'cancel') ? [$value, 'cancel'] : null; + $promise = new Promise($wfn, $cfn); + $value->then([$promise, 'resolve'], [$promise, 'reject']); + return $promise; + } + + return new FulfilledPromise($value); +} + +/** + * Creates a rejected promise for a reason if the reason is not a promise. If + * the provided reason is a promise, then it is returned as-is. + * + * @param mixed $reason Promise or reason. + * + * @return PromiseInterface + */ +function rejection_for($reason) +{ + if ($reason instanceof PromiseInterface) { + return $reason; + } + + return new RejectedPromise($reason); +} + +/** + * Create an exception for a rejected promise value. + * + * @param mixed $reason + * + * @return \Exception|\Throwable + */ +function exception_for($reason) +{ + return $reason instanceof \Exception || $reason instanceof \Throwable + ? $reason + : new RejectionException($reason); +} + +/** + * Returns an iterator for the given value. + * + * @param mixed $value + * + * @return \Iterator + */ +function iter_for($value) +{ + if ($value instanceof \Iterator) { + return $value; + } elseif (is_array($value)) { + return new \ArrayIterator($value); + } else { + return new \ArrayIterator([$value]); + } +} + +/** + * Synchronously waits on a promise to resolve and returns an inspection state + * array. + * + * Returns a state associative array containing a "state" key mapping to a + * valid promise state. If the state of the promise is "fulfilled", the array + * will contain a "value" key mapping to the fulfilled value of the promise. If + * the promise is rejected, the array will contain a "reason" key mapping to + * the rejection reason of the promise. + * + * @param PromiseInterface $promise Promise or value. + * + * @return array + */ +function inspect(PromiseInterface $promise) +{ + try { + return [ + 'state' => PromiseInterface::FULFILLED, + 'value' => $promise->wait() + ]; + } catch (RejectionException $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e->getReason()]; + } catch (\Throwable $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } catch (\Exception $e) { + return ['state' => PromiseInterface::REJECTED, 'reason' => $e]; + } +} + +/** + * Waits on all of the provided promises, but does not unwrap rejected promises + * as thrown exception. + * + * Returns an array of inspection state arrays. + * + * @param PromiseInterface[] $promises Traversable of promises to wait upon. + * + * @return array + * @see GuzzleHttp\Promise\inspect for the inspection state array format. + */ +function inspect_all($promises) +{ + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = inspect($promise); + } + + return $results; +} + +/** + * Waits on all of the provided promises and returns the fulfilled values. + * + * Returns an array that contains the value of each promise (in the same order + * the promises were provided). An exception is thrown if any of the promises + * are rejected. + * + * @param mixed $promises Iterable of PromiseInterface objects to wait on. + * + * @return array + * @throws \Exception on error + * @throws \Throwable on error in PHP >=7 + */ +function unwrap($promises) +{ + $results = []; + foreach ($promises as $key => $promise) { + $results[$key] = $promise->wait(); + } + + return $results; +} + +/** + * Given an array of promises, return a promise that is fulfilled when all the + * items in the array are fulfilled. + * + * The promise's fulfillment value is an array with fulfillment values at + * respective positions to the original array. If any promise in the array + * rejects, the returned promise is rejected with the rejection reason. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ +function all($promises) +{ + $results = []; + return each( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = $value; + }, + function ($reason, $idx, Promise $aggregate) { + $aggregate->reject($reason); + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); +} + +/** + * Initiate a competitive race between multiple promises or values (values will + * become immediately fulfilled promises). + * + * When count amount of promises have been fulfilled, the returned promise is + * fulfilled with an array that contains the fulfillment values of the winners + * in order of resolution. + * + * This prommise is rejected with a {@see GuzzleHttp\Promise\AggregateException} + * if the number of fulfilled promises is less than the desired $count. + * + * @param int $count Total number of promises. + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ +function some($count, $promises) +{ + $results = []; + $rejections = []; + + return each( + $promises, + function ($value, $idx, PromiseInterface $p) use (&$results, $count) { + if ($p->getState() !== PromiseInterface::PENDING) { + return; + } + $results[$idx] = $value; + if (count($results) >= $count) { + $p->resolve(null); + } + }, + function ($reason) use (&$rejections) { + $rejections[] = $reason; + } + )->then( + function () use (&$results, &$rejections, $count) { + if (count($results) !== $count) { + throw new AggregateException( + 'Not enough promises to fulfill count', + $rejections + ); + } + ksort($results); + return array_values($results); + } + ); +} + +/** + * Like some(), with 1 as count. However, if the promise fulfills, the + * fulfillment value is not an array of 1 but the value directly. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + */ +function any($promises) +{ + return some(1, $promises)->then(function ($values) { return $values[0]; }); +} + +/** + * Returns a promise that is fulfilled when all of the provided promises have + * been fulfilled or rejected. + * + * The returned promise is fulfilled with an array of inspection state arrays. + * + * @param mixed $promises Promises or values. + * + * @return PromiseInterface + * @see GuzzleHttp\Promise\inspect for the inspection state array format. + */ +function settle($promises) +{ + $results = []; + + return each( + $promises, + function ($value, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::FULFILLED, 'value' => $value]; + }, + function ($reason, $idx) use (&$results) { + $results[$idx] = ['state' => PromiseInterface::REJECTED, 'reason' => $reason]; + } + )->then(function () use (&$results) { + ksort($results); + return $results; + }); +} + +/** + * Given an iterator that yields promises or values, returns a promise that is + * fulfilled with a null value when the iterator has been consumed or the + * aggregate promise has been fulfilled or rejected. + * + * $onFulfilled is a function that accepts the fulfilled value, iterator + * index, and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate promise if needed. + * + * $onRejected is a function that accepts the rejection reason, iterator + * index, and the aggregate promise. The callback can invoke any necessary side + * effects and choose to resolve or reject the aggregate promise if needed. + * + * @param mixed $iterable Iterator or array to iterate over. + * @param callable $onFulfilled + * @param callable $onRejected + * + * @return PromiseInterface + */ +function each( + $iterable, + callable $onFulfilled = null, + callable $onRejected = null +) { + return (new EachPromise($iterable, [ + 'fulfilled' => $onFulfilled, + 'rejected' => $onRejected + ]))->promise(); +} + +/** + * Like each, but only allows a certain number of outstanding promises at any + * given time. + * + * $concurrency may be an integer or a function that accepts the number of + * pending promises and returns a numeric concurrency limit value to allow for + * dynamic a concurrency size. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * @param callable $onRejected + * + * @return PromiseInterface + */ +function each_limit( + $iterable, + $concurrency, + callable $onFulfilled = null, + callable $onRejected = null +) { + return (new EachPromise($iterable, [ + 'fulfilled' => $onFulfilled, + 'rejected' => $onRejected, + 'concurrency' => $concurrency + ]))->promise(); +} + +/** + * Like each_limit, but ensures that no promise in the given $iterable argument + * is rejected. If any promise is rejected, then the aggregate promise is + * rejected with the encountered rejection. + * + * @param mixed $iterable + * @param int|callable $concurrency + * @param callable $onFulfilled + * + * @return PromiseInterface + */ +function each_limit_all( + $iterable, + $concurrency, + callable $onFulfilled = null +) { + return each_limit( + $iterable, + $concurrency, + $onFulfilled, + function ($reason, $idx, PromiseInterface $aggregate) { + $aggregate->reject($reason); + } + ); +} + +/** + * Returns true if a promise is fulfilled. + * + * @param PromiseInterface $promise + * + * @return bool + */ +function is_fulfilled(PromiseInterface $promise) +{ + return $promise->getState() === PromiseInterface::FULFILLED; +} + +/** + * Returns true if a promise is rejected. + * + * @param PromiseInterface $promise + * + * @return bool + */ +function is_rejected(PromiseInterface $promise) +{ + return $promise->getState() === PromiseInterface::REJECTED; +} + +/** + * Returns true if a promise is fulfilled or rejected. + * + * @param PromiseInterface $promise + * + * @return bool + */ +function is_settled(PromiseInterface $promise) +{ + return $promise->getState() !== PromiseInterface::PENDING; +} + +/** + * @see Coroutine + * + * @param callable $generatorFn + * + * @return PromiseInterface + */ +function coroutine(callable $generatorFn) +{ + return new Coroutine($generatorFn); +} diff --git a/base/vendor/guzzlehttp/promises/src/functions_include.php b/base/vendor/guzzlehttp/promises/src/functions_include.php new file mode 100644 index 00000000..34cd1710 --- /dev/null +++ b/base/vendor/guzzlehttp/promises/src/functions_include.php @@ -0,0 +1,6 @@ +withPath('foo')->withHost('example.com')` will throw an exception + because the path of a URI with an authority must start with a slash "/" or be empty + - `(new Uri())->withScheme('http')` will return `'http://localhost'` + +### Deprecated + +- `Uri::resolve` in favor of `UriResolver::resolve` +- `Uri::removeDotSegments` in favor of `UriResolver::removeDotSegments` + +### Fixed + +- `Stream::read` when length parameter <= 0. +- `copy_to_stream` reads bytes in chunks instead of `maxLen` into memory. +- `ServerRequest::getUriFromGlobals` when `Host` header contains port. +- Compatibility of URIs with `file` scheme and empty host. + + +## [1.3.1] - 2016-06-25 + +### Fixed + +- `Uri::__toString` for network path references, e.g. `//example.org`. +- Missing lowercase normalization for host. +- Handling of URI components in case they are `'0'` in a lot of places, + e.g. as a user info password. +- `Uri::withAddedHeader` to correctly merge headers with different case. +- Trimming of header values in `Uri::withAddedHeader`. Header values may + be surrounded by whitespace which should be ignored according to RFC 7230 + Section 3.2.4. This does not apply to header names. +- `Uri::withAddedHeader` with an array of header values. +- `Uri::resolve` when base path has no slash and handling of fragment. +- Handling of encoding in `Uri::with(out)QueryValue` so one can pass the + key/value both in encoded as well as decoded form to those methods. This is + consistent with withPath, withQuery etc. +- `ServerRequest::withoutAttribute` when attribute value is null. + + +## [1.3.0] - 2016-04-13 + +### Added + +- Remaining interfaces needed for full PSR7 compatibility + (ServerRequestInterface, UploadedFileInterface, etc.). +- Support for stream_for from scalars. + +### Changed + +- Can now extend Uri. + +### Fixed +- A bug in validating request methods by making it more permissive. + + +## [1.2.3] - 2016-02-18 + +### Fixed + +- Support in `GuzzleHttp\Psr7\CachingStream` for seeking forward on remote + streams, which can sometimes return fewer bytes than requested with `fread`. +- Handling of gzipped responses with FNAME headers. + + +## [1.2.2] - 2016-01-22 + +### Added + +- Support for URIs without any authority. +- Support for HTTP 451 'Unavailable For Legal Reasons.' +- Support for using '0' as a filename. +- Support for including non-standard ports in Host headers. + + +## [1.2.1] - 2015-11-02 + +### Changes + +- Now supporting negative offsets when seeking to SEEK_END. + + +## [1.2.0] - 2015-08-15 + +### Changed + +- Body as `"0"` is now properly added to a response. +- Now allowing forward seeking in CachingStream. +- Now properly parsing HTTP requests that contain proxy targets in + `parse_request`. +- functions.php is now conditionally required. +- user-info is no longer dropped when resolving URIs. + + +## [1.1.0] - 2015-06-24 + +### Changed + +- URIs can now be relative. +- `multipart/form-data` headers are now overridden case-insensitively. +- URI paths no longer encode the following characters because they are allowed + in URIs: "(", ")", "*", "!", "'" +- A port is no longer added to a URI when the scheme is missing and no port is + present. + + +## 1.0.0 - 2015-05-19 + +Initial release. + +Currently unsupported: + +- `Psr\Http\Message\ServerRequestInterface` +- `Psr\Http\Message\UploadedFileInterface` + + + +[Unreleased]: https://github.com/guzzle/psr7/compare/1.6.0...HEAD +[1.6.0]: https://github.com/guzzle/psr7/compare/1.5.2...1.6.0 +[1.5.2]: https://github.com/guzzle/psr7/compare/1.5.1...1.5.2 +[1.5.1]: https://github.com/guzzle/psr7/compare/1.5.0...1.5.1 +[1.5.0]: https://github.com/guzzle/psr7/compare/1.4.2...1.5.0 +[1.4.2]: https://github.com/guzzle/psr7/compare/1.4.1...1.4.2 +[1.4.1]: https://github.com/guzzle/psr7/compare/1.4.0...1.4.1 +[1.4.0]: https://github.com/guzzle/psr7/compare/1.3.1...1.4.0 +[1.3.1]: https://github.com/guzzle/psr7/compare/1.3.0...1.3.1 +[1.3.0]: https://github.com/guzzle/psr7/compare/1.2.3...1.3.0 +[1.2.3]: https://github.com/guzzle/psr7/compare/1.2.2...1.2.3 +[1.2.2]: https://github.com/guzzle/psr7/compare/1.2.1...1.2.2 +[1.2.1]: https://github.com/guzzle/psr7/compare/1.2.0...1.2.1 +[1.2.0]: https://github.com/guzzle/psr7/compare/1.1.0...1.2.0 +[1.1.0]: https://github.com/guzzle/psr7/compare/1.0.0...1.1.0 diff --git a/base/vendor/guzzlehttp/psr7/LICENSE b/base/vendor/guzzlehttp/psr7/LICENSE new file mode 100644 index 00000000..581d95f9 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2015 Michael Dowling, https://github.com/mtdowling + +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/base/vendor/guzzlehttp/psr7/README.md b/base/vendor/guzzlehttp/psr7/README.md new file mode 100644 index 00000000..c60a6a38 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/README.md @@ -0,0 +1,745 @@ +# PSR-7 Message Implementation + +This repository contains a full [PSR-7](http://www.php-fig.org/psr/psr-7/) +message implementation, several stream decorators, and some helpful +functionality like query string parsing. + + +[![Build Status](https://travis-ci.org/guzzle/psr7.svg?branch=master)](https://travis-ci.org/guzzle/psr7) + + +# Stream implementation + +This package comes with a number of stream implementations and stream +decorators. + + +## AppendStream + +`GuzzleHttp\Psr7\AppendStream` + +Reads from multiple streams, one after the other. + +```php +use GuzzleHttp\Psr7; + +$a = Psr7\stream_for('abc, '); +$b = Psr7\stream_for('123.'); +$composed = new Psr7\AppendStream([$a, $b]); + +$composed->addStream(Psr7\stream_for(' Above all listen to me')); + +echo $composed; // abc, 123. Above all listen to me. +``` + + +## BufferStream + +`GuzzleHttp\Psr7\BufferStream` + +Provides a buffer stream that can be written to fill a buffer, and read +from to remove bytes from the buffer. + +This stream returns a "hwm" metadata value that tells upstream consumers +what the configured high water mark of the stream is, or the maximum +preferred size of the buffer. + +```php +use GuzzleHttp\Psr7; + +// When more than 1024 bytes are in the buffer, it will begin returning +// false to writes. This is an indication that writers should slow down. +$buffer = new Psr7\BufferStream(1024); +``` + + +## CachingStream + +The CachingStream is used to allow seeking over previously read bytes on +non-seekable streams. This can be useful when transferring a non-seekable +entity body fails due to needing to rewind the stream (for example, resulting +from a redirect). Data that is read from the remote stream will be buffered in +a PHP temp stream so that previously read bytes are cached first in memory, +then on disk. + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for(fopen('http://www.google.com', 'r')); +$stream = new Psr7\CachingStream($original); + +$stream->read(1024); +echo $stream->tell(); +// 1024 + +$stream->seek(0); +echo $stream->tell(); +// 0 +``` + + +## DroppingStream + +`GuzzleHttp\Psr7\DroppingStream` + +Stream decorator that begins dropping data once the size of the underlying +stream becomes too full. + +```php +use GuzzleHttp\Psr7; + +// Create an empty stream +$stream = Psr7\stream_for(); + +// Start dropping data when the stream has more than 10 bytes +$dropping = new Psr7\DroppingStream($stream, 10); + +$dropping->write('01234567890123456789'); +echo $stream; // 0123456789 +``` + + +## FnStream + +`GuzzleHttp\Psr7\FnStream` + +Compose stream implementations based on a hash of functions. + +Allows for easy testing and extension of a provided stream without needing +to create a concrete class for a simple extension point. + +```php + +use GuzzleHttp\Psr7; + +$stream = Psr7\stream_for('hi'); +$fnStream = Psr7\FnStream::decorate($stream, [ + 'rewind' => function () use ($stream) { + echo 'About to rewind - '; + $stream->rewind(); + echo 'rewound!'; + } +]); + +$fnStream->rewind(); +// Outputs: About to rewind - rewound! +``` + + +## InflateStream + +`GuzzleHttp\Psr7\InflateStream` + +Uses PHP's zlib.inflate filter to inflate deflate or gzipped content. + +This stream decorator skips the first 10 bytes of the given stream to remove +the gzip header, converts the provided stream to a PHP stream resource, +then appends the zlib.inflate filter. The stream is then converted back +to a Guzzle stream resource to be used as a Guzzle stream. + + +## LazyOpenStream + +`GuzzleHttp\Psr7\LazyOpenStream` + +Lazily reads or writes to a file that is opened only after an IO operation +take place on the stream. + +```php +use GuzzleHttp\Psr7; + +$stream = new Psr7\LazyOpenStream('/path/to/file', 'r'); +// The file has not yet been opened... + +echo $stream->read(10); +// The file is opened and read from only when needed. +``` + + +## LimitStream + +`GuzzleHttp\Psr7\LimitStream` + +LimitStream can be used to read a subset or slice of an existing stream object. +This can be useful for breaking a large file into smaller pieces to be sent in +chunks (e.g. Amazon S3's multipart upload API). + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+')); +echo $original->getSize(); +// >>> 1048576 + +// Limit the size of the body to 1024 bytes and start reading from byte 2048 +$stream = new Psr7\LimitStream($original, 1024, 2048); +echo $stream->getSize(); +// >>> 1024 +echo $stream->tell(); +// >>> 0 +``` + + +## MultipartStream + +`GuzzleHttp\Psr7\MultipartStream` + +Stream that when read returns bytes for a streaming multipart or +multipart/form-data stream. + + +## NoSeekStream + +`GuzzleHttp\Psr7\NoSeekStream` + +NoSeekStream wraps a stream and does not allow seeking. + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for('foo'); +$noSeek = new Psr7\NoSeekStream($original); + +echo $noSeek->read(3); +// foo +var_export($noSeek->isSeekable()); +// false +$noSeek->seek(0); +var_export($noSeek->read(3)); +// NULL +``` + + +## PumpStream + +`GuzzleHttp\Psr7\PumpStream` + +Provides a read only stream that pumps data from a PHP callable. + +When invoking the provided callable, the PumpStream will pass the amount of +data requested to read to the callable. The callable can choose to ignore +this value and return fewer or more bytes than requested. Any extra data +returned by the provided callable is buffered internally until drained using +the read() function of the PumpStream. The provided callable MUST return +false when there is no more data to read. + + +## Implementing stream decorators + +Creating a stream decorator is very easy thanks to the +`GuzzleHttp\Psr7\StreamDecoratorTrait`. This trait provides methods that +implement `Psr\Http\Message\StreamInterface` by proxying to an underlying +stream. Just `use` the `StreamDecoratorTrait` and implement your custom +methods. + +For example, let's say we wanted to call a specific function each time the last +byte is read from a stream. This could be implemented by overriding the +`read()` method. + +```php +use Psr\Http\Message\StreamInterface; +use GuzzleHttp\Psr7\StreamDecoratorTrait; + +class EofCallbackStream implements StreamInterface +{ + use StreamDecoratorTrait; + + private $callback; + + public function __construct(StreamInterface $stream, callable $cb) + { + $this->stream = $stream; + $this->callback = $cb; + } + + public function read($length) + { + $result = $this->stream->read($length); + + // Invoke the callback when EOF is hit. + if ($this->eof()) { + call_user_func($this->callback); + } + + return $result; + } +} +``` + +This decorator could be added to any existing stream and used like so: + +```php +use GuzzleHttp\Psr7; + +$original = Psr7\stream_for('foo'); + +$eofStream = new EofCallbackStream($original, function () { + echo 'EOF!'; +}); + +$eofStream->read(2); +$eofStream->read(1); +// echoes "EOF!" +$eofStream->seek(0); +$eofStream->read(3); +// echoes "EOF!" +``` + + +## PHP StreamWrapper + +You can use the `GuzzleHttp\Psr7\StreamWrapper` class if you need to use a +PSR-7 stream as a PHP stream resource. + +Use the `GuzzleHttp\Psr7\StreamWrapper::getResource()` method to create a PHP +stream from a PSR-7 stream. + +```php +use GuzzleHttp\Psr7\StreamWrapper; + +$stream = GuzzleHttp\Psr7\stream_for('hello!'); +$resource = StreamWrapper::getResource($stream); +echo fread($resource, 6); // outputs hello! +``` + + +# Function API + +There are various functions available under the `GuzzleHttp\Psr7` namespace. + + +## `function str` + +`function str(MessageInterface $message)` + +Returns the string representation of an HTTP message. + +```php +$request = new GuzzleHttp\Psr7\Request('GET', 'http://example.com'); +echo GuzzleHttp\Psr7\str($request); +``` + + +## `function uri_for` + +`function uri_for($uri)` + +This function accepts a string or `Psr\Http\Message\UriInterface` and returns a +UriInterface for the given value. If the value is already a `UriInterface`, it +is returned as-is. + +```php +$uri = GuzzleHttp\Psr7\uri_for('http://example.com'); +assert($uri === GuzzleHttp\Psr7\uri_for($uri)); +``` + + +## `function stream_for` + +`function stream_for($resource = '', array $options = [])` + +Create a new stream based on the input type. + +Options is an associative array that can contain the following keys: + +* - metadata: Array of custom metadata. +* - size: Size of the stream. + +This method accepts the following `$resource` types: + +- `Psr\Http\Message\StreamInterface`: Returns the value as-is. +- `string`: Creates a stream object that uses the given string as the contents. +- `resource`: Creates a stream object that wraps the given PHP stream resource. +- `Iterator`: If the provided value implements `Iterator`, then a read-only + stream object will be created that wraps the given iterable. Each time the + stream is read from, data from the iterator will fill a buffer and will be + continuously called until the buffer is equal to the requested read size. + Subsequent read calls will first read from the buffer and then call `next` + on the underlying iterator until it is exhausted. +- `object` with `__toString()`: If the object has the `__toString()` method, + the object will be cast to a string and then a stream will be returned that + uses the string value. +- `NULL`: When `null` is passed, an empty stream object is returned. +- `callable` When a callable is passed, a read-only stream object will be + created that invokes the given callable. The callable is invoked with the + number of suggested bytes to read. The callable can return any number of + bytes, but MUST return `false` when there is no more data to return. The + stream object that wraps the callable will invoke the callable until the + number of requested bytes are available. Any additional bytes will be + buffered and used in subsequent reads. + +```php +$stream = GuzzleHttp\Psr7\stream_for('foo'); +$stream = GuzzleHttp\Psr7\stream_for(fopen('/path/to/file', 'r')); + +$generator = function ($bytes) { + for ($i = 0; $i < $bytes; $i++) { + yield ' '; + } +} + +$stream = GuzzleHttp\Psr7\stream_for($generator(100)); +``` + + +## `function parse_header` + +`function parse_header($header)` + +Parse an array of header values containing ";" separated data into an array of +associative arrays representing the header key value pair data of the header. +When a parameter does not contain a value, but just contains a key, this +function will inject a key with a '' string value. + + +## `function normalize_header` + +`function normalize_header($header)` + +Converts an array of header values that may contain comma separated headers +into an array of headers with no comma separated values. + + +## `function modify_request` + +`function modify_request(RequestInterface $request, array $changes)` + +Clone and modify a request with the given changes. This method is useful for +reducing the number of clones needed to mutate a message. + +The changes can be one of: + +- method: (string) Changes the HTTP method. +- set_headers: (array) Sets the given headers. +- remove_headers: (array) Remove the given headers. +- body: (mixed) Sets the given body. +- uri: (UriInterface) Set the URI. +- query: (string) Set the query string value of the URI. +- version: (string) Set the protocol version. + + +## `function rewind_body` + +`function rewind_body(MessageInterface $message)` + +Attempts to rewind a message body and throws an exception on failure. The body +of the message will only be rewound if a call to `tell()` returns a value other +than `0`. + + +## `function try_fopen` + +`function try_fopen($filename, $mode)` + +Safely opens a PHP stream resource using a filename. + +When fopen fails, PHP normally raises a warning. This function adds an error +handler that checks for errors and throws an exception instead. + + +## `function copy_to_string` + +`function copy_to_string(StreamInterface $stream, $maxLen = -1)` + +Copy the contents of a stream into a string until the given number of bytes +have been read. + + +## `function copy_to_stream` + +`function copy_to_stream(StreamInterface $source, StreamInterface $dest, $maxLen = -1)` + +Copy the contents of a stream into another stream until the given number of +bytes have been read. + + +## `function hash` + +`function hash(StreamInterface $stream, $algo, $rawOutput = false)` + +Calculate a hash of a Stream. This method reads the entire stream to calculate +a rolling hash (based on PHP's hash_init functions). + + +## `function readline` + +`function readline(StreamInterface $stream, $maxLength = null)` + +Read a line from the stream up to the maximum allowed buffer length. + + +## `function parse_request` + +`function parse_request($message)` + +Parses a request message string into a request object. + + +## `function parse_response` + +`function parse_response($message)` + +Parses a response message string into a response object. + + +## `function parse_query` + +`function parse_query($str, $urlEncoding = true)` + +Parse a query string into an associative array. + +If multiple values are found for the same key, the value of that key value pair +will become an array. This function does not parse nested PHP style arrays into +an associative array (e.g., `foo[a]=1&foo[b]=2` will be parsed into +`['foo[a]' => '1', 'foo[b]' => '2']`). + + +## `function build_query` + +`function build_query(array $params, $encoding = PHP_QUERY_RFC3986)` + +Build a query string from an array of key value pairs. + +This function can use the return value of parse_query() to build a query string. +This function does not modify the provided keys when an array is encountered +(like http_build_query would). + + +## `function mimetype_from_filename` + +`function mimetype_from_filename($filename)` + +Determines the mimetype of a file by looking at its extension. + + +## `function mimetype_from_extension` + +`function mimetype_from_extension($extension)` + +Maps a file extensions to a mimetype. + + +# Additional URI Methods + +Aside from the standard `Psr\Http\Message\UriInterface` implementation in form of the `GuzzleHttp\Psr7\Uri` class, +this library also provides additional functionality when working with URIs as static methods. + +## URI Types + +An instance of `Psr\Http\Message\UriInterface` can either be an absolute URI or a relative reference. +An absolute URI has a scheme. A relative reference is used to express a URI relative to another URI, +the base URI. Relative references can be divided into several forms according to +[RFC 3986 Section 4.2](https://tools.ietf.org/html/rfc3986#section-4.2): + +- network-path references, e.g. `//example.com/path` +- absolute-path references, e.g. `/path` +- relative-path references, e.g. `subpath` + +The following methods can be used to identify the type of the URI. + +### `GuzzleHttp\Psr7\Uri::isAbsolute` + +`public static function isAbsolute(UriInterface $uri): bool` + +Whether the URI is absolute, i.e. it has a scheme. + +### `GuzzleHttp\Psr7\Uri::isNetworkPathReference` + +`public static function isNetworkPathReference(UriInterface $uri): bool` + +Whether the URI is a network-path reference. A relative reference that begins with two slash characters is +termed an network-path reference. + +### `GuzzleHttp\Psr7\Uri::isAbsolutePathReference` + +`public static function isAbsolutePathReference(UriInterface $uri): bool` + +Whether the URI is a absolute-path reference. A relative reference that begins with a single slash character is +termed an absolute-path reference. + +### `GuzzleHttp\Psr7\Uri::isRelativePathReference` + +`public static function isRelativePathReference(UriInterface $uri): bool` + +Whether the URI is a relative-path reference. A relative reference that does not begin with a slash character is +termed a relative-path reference. + +### `GuzzleHttp\Psr7\Uri::isSameDocumentReference` + +`public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null): bool` + +Whether the URI is a same-document reference. A same-document reference refers to a URI that is, aside from its +fragment component, identical to the base URI. When no base URI is given, only an empty URI reference +(apart from its fragment) is considered a same-document reference. + +## URI Components + +Additional methods to work with URI components. + +### `GuzzleHttp\Psr7\Uri::isDefaultPort` + +`public static function isDefaultPort(UriInterface $uri): bool` + +Whether the URI has the default port of the current scheme. `Psr\Http\Message\UriInterface::getPort` may return null +or the standard port. This method can be used independently of the implementation. + +### `GuzzleHttp\Psr7\Uri::composeComponents` + +`public static function composeComponents($scheme, $authority, $path, $query, $fragment): string` + +Composes a URI reference string from its various components according to +[RFC 3986 Section 5.3](https://tools.ietf.org/html/rfc3986#section-5.3). Usually this method does not need to be called +manually but instead is used indirectly via `Psr\Http\Message\UriInterface::__toString`. + +### `GuzzleHttp\Psr7\Uri::fromParts` + +`public static function fromParts(array $parts): UriInterface` + +Creates a URI from a hash of [`parse_url`](http://php.net/manual/en/function.parse-url.php) components. + + +### `GuzzleHttp\Psr7\Uri::withQueryValue` + +`public static function withQueryValue(UriInterface $uri, $key, $value): UriInterface` + +Creates a new URI with a specific query string value. Any existing query string values that exactly match the +provided key are removed and replaced with the given key value pair. A value of null will set the query string +key without a value, e.g. "key" instead of "key=value". + +### `GuzzleHttp\Psr7\Uri::withQueryValues` + +`public static function withQueryValues(UriInterface $uri, array $keyValueArray): UriInterface` + +Creates a new URI with multiple query string values. It has the same behavior as `withQueryValue()` but for an +associative array of key => value. + +### `GuzzleHttp\Psr7\Uri::withoutQueryValue` + +`public static function withoutQueryValue(UriInterface $uri, $key): UriInterface` + +Creates a new URI with a specific query string value removed. Any existing query string values that exactly match the +provided key are removed. + +## Reference Resolution + +`GuzzleHttp\Psr7\UriResolver` provides methods to resolve a URI reference in the context of a base URI according +to [RFC 3986 Section 5](https://tools.ietf.org/html/rfc3986#section-5). This is for example also what web browsers +do when resolving a link in a website based on the current request URI. + +### `GuzzleHttp\Psr7\UriResolver::resolve` + +`public static function resolve(UriInterface $base, UriInterface $rel): UriInterface` + +Converts the relative URI into a new URI that is resolved against the base URI. + +### `GuzzleHttp\Psr7\UriResolver::removeDotSegments` + +`public static function removeDotSegments(string $path): string` + +Removes dot segments from a path and returns the new path according to +[RFC 3986 Section 5.2.4](https://tools.ietf.org/html/rfc3986#section-5.2.4). + +### `GuzzleHttp\Psr7\UriResolver::relativize` + +`public static function relativize(UriInterface $base, UriInterface $target): UriInterface` + +Returns the target URI as a relative reference from the base URI. This method is the counterpart to resolve(): + +```php +(string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target)) +``` + +One use-case is to use the current request URI as base URI and then generate relative links in your documents +to reduce the document size or offer self-contained downloadable document archives. + +```php +$base = new Uri('http://example.com/a/b/'); +echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'. +echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'. +echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'. +echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'. +``` + +## Normalization and Comparison + +`GuzzleHttp\Psr7\UriNormalizer` provides methods to normalize and compare URIs according to +[RFC 3986 Section 6](https://tools.ietf.org/html/rfc3986#section-6). + +### `GuzzleHttp\Psr7\UriNormalizer::normalize` + +`public static function normalize(UriInterface $uri, $flags = self::PRESERVING_NORMALIZATIONS): UriInterface` + +Returns a normalized URI. The scheme and host component are already normalized to lowercase per PSR-7 UriInterface. +This methods adds additional normalizations that can be configured with the `$flags` parameter which is a bitmask +of normalizations to apply. The following normalizations are available: + +- `UriNormalizer::PRESERVING_NORMALIZATIONS` + + Default normalizations which only include the ones that preserve semantics. + +- `UriNormalizer::CAPITALIZE_PERCENT_ENCODING` + + All letters within a percent-encoding triplet (e.g., "%3A") are case-insensitive, and should be capitalized. + + Example: `http://example.org/a%c2%b1b` → `http://example.org/a%C2%B1b` + +- `UriNormalizer::DECODE_UNRESERVED_CHARACTERS` + + Decodes percent-encoded octets of unreserved characters. For consistency, percent-encoded octets in the ranges of + ALPHA (%41–%5A and %61–%7A), DIGIT (%30–%39), hyphen (%2D), period (%2E), underscore (%5F), or tilde (%7E) should + not be created by URI producers and, when found in a URI, should be decoded to their corresponding unreserved + characters by URI normalizers. + + Example: `http://example.org/%7Eusern%61me/` → `http://example.org/~username/` + +- `UriNormalizer::CONVERT_EMPTY_PATH` + + Converts the empty path to "/" for http and https URIs. + + Example: `http://example.org` → `http://example.org/` + +- `UriNormalizer::REMOVE_DEFAULT_HOST` + + Removes the default host of the given URI scheme from the URI. Only the "file" scheme defines the default host + "localhost". All of `file:/myfile`, `file:///myfile`, and `file://localhost/myfile` are equivalent according to + RFC 3986. + + Example: `file://localhost/myfile` → `file:///myfile` + +- `UriNormalizer::REMOVE_DEFAULT_PORT` + + Removes the default port of the given URI scheme from the URI. + + Example: `http://example.org:80/` → `http://example.org/` + +- `UriNormalizer::REMOVE_DOT_SEGMENTS` + + Removes unnecessary dot-segments. Dot-segments in relative-path references are not removed as it would + change the semantics of the URI reference. + + Example: `http://example.org/../a/b/../c/./d.html` → `http://example.org/a/c/d.html` + +- `UriNormalizer::REMOVE_DUPLICATE_SLASHES` + + Paths which include two or more adjacent slashes are converted to one. Webservers usually ignore duplicate slashes + and treat those URIs equivalent. But in theory those URIs do not need to be equivalent. So this normalization + may change the semantics. Encoded slashes (%2F) are not removed. + + Example: `http://example.org//foo///bar.html` → `http://example.org/foo/bar.html` + +- `UriNormalizer::SORT_QUERY_PARAMETERS` + + Sort query parameters with their values in alphabetical order. However, the order of parameters in a URI may be + significant (this is not defined by the standard). So this normalization is not safe and may change the semantics + of the URI. + + Example: `?lang=en&article=fred` → `?article=fred&lang=en` + +### `GuzzleHttp\Psr7\UriNormalizer::isEquivalent` + +`public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS): bool` + +Whether two URIs can be considered equivalent. Both URIs are normalized automatically before comparison with the given +`$normalizations` bitmask. The method also accepts relative URI references and returns true when they are equivalent. +This of course assumes they will be resolved against the same base URI. If this is not the case, determination of +equivalence or difference of relative references does not mean anything. diff --git a/base/vendor/guzzlehttp/psr7/composer.json b/base/vendor/guzzlehttp/psr7/composer.json new file mode 100644 index 00000000..168a055b --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/composer.json @@ -0,0 +1,49 @@ +{ + "name": "guzzlehttp/psr7", + "type": "library", + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": ["request", "response", "message", "stream", "http", "uri", "url", "psr-7"], + "license": "MIT", + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + } + ], + "require": { + "php": ">=5.4.0", + "psr/http-message": "~1.0", + "ralouphie/getallheaders": "^2.0.5 || ^3.0.0" + }, + "require-dev": { + "phpunit/phpunit": "~4.8.36 || ^5.7.27 || ^6.5.8", + "ext-zlib": "*" + }, + "provide": { + "psr/http-message-implementation": "1.0" + }, + "suggest": { + "zendframework/zend-httphandlerrunner": "Emit PSR-7 responses" + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + }, + "files": ["src/functions_include.php"] + }, + "autoload-dev": { + "psr-4": { + "GuzzleHttp\\Tests\\Psr7\\": "tests/" + } + }, + "extra": { + "branch-alias": { + "dev-master": "1.6-dev" + } + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/AppendStream.php b/base/vendor/guzzlehttp/psr7/src/AppendStream.php new file mode 100644 index 00000000..472a0d61 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/AppendStream.php @@ -0,0 +1,241 @@ +addStream($stream); + } + } + + public function __toString() + { + try { + $this->rewind(); + return $this->getContents(); + } catch (\Exception $e) { + return ''; + } + } + + /** + * Add a stream to the AppendStream + * + * @param StreamInterface $stream Stream to append. Must be readable. + * + * @throws \InvalidArgumentException if the stream is not readable + */ + public function addStream(StreamInterface $stream) + { + if (!$stream->isReadable()) { + throw new \InvalidArgumentException('Each stream must be readable'); + } + + // The stream is only seekable if all streams are seekable + if (!$stream->isSeekable()) { + $this->seekable = false; + } + + $this->streams[] = $stream; + } + + public function getContents() + { + return copy_to_string($this); + } + + /** + * Closes each attached stream. + * + * {@inheritdoc} + */ + public function close() + { + $this->pos = $this->current = 0; + $this->seekable = true; + + foreach ($this->streams as $stream) { + $stream->close(); + } + + $this->streams = []; + } + + /** + * Detaches each attached stream. + * + * Returns null as it's not clear which underlying stream resource to return. + * + * {@inheritdoc} + */ + public function detach() + { + $this->pos = $this->current = 0; + $this->seekable = true; + + foreach ($this->streams as $stream) { + $stream->detach(); + } + + $this->streams = []; + } + + public function tell() + { + return $this->pos; + } + + /** + * Tries to calculate the size by adding the size of each stream. + * + * If any of the streams do not return a valid number, then the size of the + * append stream cannot be determined and null is returned. + * + * {@inheritdoc} + */ + public function getSize() + { + $size = 0; + + foreach ($this->streams as $stream) { + $s = $stream->getSize(); + if ($s === null) { + return null; + } + $size += $s; + } + + return $size; + } + + public function eof() + { + return !$this->streams || + ($this->current >= count($this->streams) - 1 && + $this->streams[$this->current]->eof()); + } + + public function rewind() + { + $this->seek(0); + } + + /** + * Attempts to seek to the given position. Only supports SEEK_SET. + * + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET) + { + if (!$this->seekable) { + throw new \RuntimeException('This AppendStream is not seekable'); + } elseif ($whence !== SEEK_SET) { + throw new \RuntimeException('The AppendStream can only seek with SEEK_SET'); + } + + $this->pos = $this->current = 0; + + // Rewind each stream + foreach ($this->streams as $i => $stream) { + try { + $stream->rewind(); + } catch (\Exception $e) { + throw new \RuntimeException('Unable to seek stream ' + . $i . ' of the AppendStream', 0, $e); + } + } + + // Seek to the actual position by reading from each stream + while ($this->pos < $offset && !$this->eof()) { + $result = $this->read(min(8096, $offset - $this->pos)); + if ($result === '') { + break; + } + } + } + + /** + * Reads from all of the appended streams until the length is met or EOF. + * + * {@inheritdoc} + */ + public function read($length) + { + $buffer = ''; + $total = count($this->streams) - 1; + $remaining = $length; + $progressToNext = false; + + while ($remaining > 0) { + + // Progress to the next stream if needed. + if ($progressToNext || $this->streams[$this->current]->eof()) { + $progressToNext = false; + if ($this->current === $total) { + break; + } + $this->current++; + } + + $result = $this->streams[$this->current]->read($remaining); + + // Using a loose comparison here to match on '', false, and null + if ($result == null) { + $progressToNext = true; + continue; + } + + $buffer .= $result; + $remaining = $length - strlen($buffer); + } + + $this->pos += strlen($buffer); + + return $buffer; + } + + public function isReadable() + { + return true; + } + + public function isWritable() + { + return false; + } + + public function isSeekable() + { + return $this->seekable; + } + + public function write($string) + { + throw new \RuntimeException('Cannot write to an AppendStream'); + } + + public function getMetadata($key = null) + { + return $key ? null : []; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/BufferStream.php b/base/vendor/guzzlehttp/psr7/src/BufferStream.php new file mode 100644 index 00000000..af4d4c22 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/BufferStream.php @@ -0,0 +1,137 @@ +hwm = $hwm; + } + + public function __toString() + { + return $this->getContents(); + } + + public function getContents() + { + $buffer = $this->buffer; + $this->buffer = ''; + + return $buffer; + } + + public function close() + { + $this->buffer = ''; + } + + public function detach() + { + $this->close(); + } + + public function getSize() + { + return strlen($this->buffer); + } + + public function isReadable() + { + return true; + } + + public function isWritable() + { + return true; + } + + public function isSeekable() + { + return false; + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + throw new \RuntimeException('Cannot seek a BufferStream'); + } + + public function eof() + { + return strlen($this->buffer) === 0; + } + + public function tell() + { + throw new \RuntimeException('Cannot determine the position of a BufferStream'); + } + + /** + * Reads data from the buffer. + */ + public function read($length) + { + $currentLength = strlen($this->buffer); + + if ($length >= $currentLength) { + // No need to slice the buffer because we don't have enough data. + $result = $this->buffer; + $this->buffer = ''; + } else { + // Slice up the result to provide a subset of the buffer. + $result = substr($this->buffer, 0, $length); + $this->buffer = substr($this->buffer, $length); + } + + return $result; + } + + /** + * Writes data to the buffer. + */ + public function write($string) + { + $this->buffer .= $string; + + // TODO: What should happen here? + if (strlen($this->buffer) >= $this->hwm) { + return false; + } + + return strlen($string); + } + + public function getMetadata($key = null) + { + if ($key == 'hwm') { + return $this->hwm; + } + + return $key ? null : []; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/CachingStream.php b/base/vendor/guzzlehttp/psr7/src/CachingStream.php new file mode 100644 index 00000000..ed68f086 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/CachingStream.php @@ -0,0 +1,138 @@ +remoteStream = $stream; + $this->stream = $target ?: new Stream(fopen('php://temp', 'r+')); + } + + public function getSize() + { + return max($this->stream->getSize(), $this->remoteStream->getSize()); + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + if ($whence == SEEK_SET) { + $byte = $offset; + } elseif ($whence == SEEK_CUR) { + $byte = $offset + $this->tell(); + } elseif ($whence == SEEK_END) { + $size = $this->remoteStream->getSize(); + if ($size === null) { + $size = $this->cacheEntireStream(); + } + $byte = $size + $offset; + } else { + throw new \InvalidArgumentException('Invalid whence'); + } + + $diff = $byte - $this->stream->getSize(); + + if ($diff > 0) { + // Read the remoteStream until we have read in at least the amount + // of bytes requested, or we reach the end of the file. + while ($diff > 0 && !$this->remoteStream->eof()) { + $this->read($diff); + $diff = $byte - $this->stream->getSize(); + } + } else { + // We can just do a normal seek since we've already seen this byte. + $this->stream->seek($byte); + } + } + + public function read($length) + { + // Perform a regular read on any previously read data from the buffer + $data = $this->stream->read($length); + $remaining = $length - strlen($data); + + // More data was requested so read from the remote stream + if ($remaining) { + // If data was written to the buffer in a position that would have + // been filled from the remote stream, then we must skip bytes on + // the remote stream to emulate overwriting bytes from that + // position. This mimics the behavior of other PHP stream wrappers. + $remoteData = $this->remoteStream->read( + $remaining + $this->skipReadBytes + ); + + if ($this->skipReadBytes) { + $len = strlen($remoteData); + $remoteData = substr($remoteData, $this->skipReadBytes); + $this->skipReadBytes = max(0, $this->skipReadBytes - $len); + } + + $data .= $remoteData; + $this->stream->write($remoteData); + } + + return $data; + } + + public function write($string) + { + // When appending to the end of the currently read stream, you'll want + // to skip bytes from being read from the remote stream to emulate + // other stream wrappers. Basically replacing bytes of data of a fixed + // length. + $overflow = (strlen($string) + $this->tell()) - $this->remoteStream->tell(); + if ($overflow > 0) { + $this->skipReadBytes += $overflow; + } + + return $this->stream->write($string); + } + + public function eof() + { + return $this->stream->eof() && $this->remoteStream->eof(); + } + + /** + * Close both the remote stream and buffer stream + */ + public function close() + { + $this->remoteStream->close() && $this->stream->close(); + } + + private function cacheEntireStream() + { + $target = new FnStream(['write' => 'strlen']); + copy_to_stream($this, $target); + + return $this->tell(); + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/DroppingStream.php b/base/vendor/guzzlehttp/psr7/src/DroppingStream.php new file mode 100644 index 00000000..8935c80d --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/DroppingStream.php @@ -0,0 +1,42 @@ +stream = $stream; + $this->maxLength = $maxLength; + } + + public function write($string) + { + $diff = $this->maxLength - $this->stream->getSize(); + + // Begin returning 0 when the underlying stream is too large. + if ($diff <= 0) { + return 0; + } + + // Write the stream or a subset of the stream if needed. + if (strlen($string) < $diff) { + return $this->stream->write($string); + } + + return $this->stream->write(substr($string, 0, $diff)); + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/FnStream.php b/base/vendor/guzzlehttp/psr7/src/FnStream.php new file mode 100644 index 00000000..73daea6f --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/FnStream.php @@ -0,0 +1,158 @@ +methods = $methods; + + // Create the functions on the class + foreach ($methods as $name => $fn) { + $this->{'_fn_' . $name} = $fn; + } + } + + /** + * Lazily determine which methods are not implemented. + * @throws \BadMethodCallException + */ + public function __get($name) + { + throw new \BadMethodCallException(str_replace('_fn_', '', $name) + . '() is not implemented in the FnStream'); + } + + /** + * The close method is called on the underlying stream only if possible. + */ + public function __destruct() + { + if (isset($this->_fn_close)) { + call_user_func($this->_fn_close); + } + } + + /** + * An unserialize would allow the __destruct to run when the unserialized value goes out of scope. + * @throws \LogicException + */ + public function __wakeup() + { + throw new \LogicException('FnStream should never be unserialized'); + } + + /** + * Adds custom functionality to an underlying stream by intercepting + * specific method calls. + * + * @param StreamInterface $stream Stream to decorate + * @param array $methods Hash of method name to a closure + * + * @return FnStream + */ + public static function decorate(StreamInterface $stream, array $methods) + { + // If any of the required methods were not provided, then simply + // proxy to the decorated stream. + foreach (array_diff(self::$slots, array_keys($methods)) as $diff) { + $methods[$diff] = [$stream, $diff]; + } + + return new self($methods); + } + + public function __toString() + { + return call_user_func($this->_fn___toString); + } + + public function close() + { + return call_user_func($this->_fn_close); + } + + public function detach() + { + return call_user_func($this->_fn_detach); + } + + public function getSize() + { + return call_user_func($this->_fn_getSize); + } + + public function tell() + { + return call_user_func($this->_fn_tell); + } + + public function eof() + { + return call_user_func($this->_fn_eof); + } + + public function isSeekable() + { + return call_user_func($this->_fn_isSeekable); + } + + public function rewind() + { + call_user_func($this->_fn_rewind); + } + + public function seek($offset, $whence = SEEK_SET) + { + call_user_func($this->_fn_seek, $offset, $whence); + } + + public function isWritable() + { + return call_user_func($this->_fn_isWritable); + } + + public function write($string) + { + return call_user_func($this->_fn_write, $string); + } + + public function isReadable() + { + return call_user_func($this->_fn_isReadable); + } + + public function read($length) + { + return call_user_func($this->_fn_read, $length); + } + + public function getContents() + { + return call_user_func($this->_fn_getContents); + } + + public function getMetadata($key = null) + { + return call_user_func($this->_fn_getMetadata, $key); + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/InflateStream.php b/base/vendor/guzzlehttp/psr7/src/InflateStream.php new file mode 100644 index 00000000..5e4f6028 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/InflateStream.php @@ -0,0 +1,52 @@ +read(10); + $filenameHeaderLength = $this->getLengthOfPossibleFilenameHeader($stream, $header); + // Skip the header, that is 10 + length of filename + 1 (nil) bytes + $stream = new LimitStream($stream, -1, 10 + $filenameHeaderLength); + $resource = StreamWrapper::getResource($stream); + stream_filter_append($resource, 'zlib.inflate', STREAM_FILTER_READ); + $this->stream = $stream->isSeekable() ? new Stream($resource) : new NoSeekStream(new Stream($resource)); + } + + /** + * @param StreamInterface $stream + * @param $header + * @return int + */ + private function getLengthOfPossibleFilenameHeader(StreamInterface $stream, $header) + { + $filename_header_length = 0; + + if (substr(bin2hex($header), 6, 2) === '08') { + // we have a filename, read until nil + $filename_header_length = 1; + while ($stream->read(1) !== chr(0)) { + $filename_header_length++; + } + } + + return $filename_header_length; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/LazyOpenStream.php b/base/vendor/guzzlehttp/psr7/src/LazyOpenStream.php new file mode 100644 index 00000000..02cec3af --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/LazyOpenStream.php @@ -0,0 +1,39 @@ +filename = $filename; + $this->mode = $mode; + } + + /** + * Creates the underlying stream lazily when required. + * + * @return StreamInterface + */ + protected function createStream() + { + return stream_for(try_fopen($this->filename, $this->mode)); + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/LimitStream.php b/base/vendor/guzzlehttp/psr7/src/LimitStream.php new file mode 100644 index 00000000..e4f239e3 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/LimitStream.php @@ -0,0 +1,155 @@ +stream = $stream; + $this->setLimit($limit); + $this->setOffset($offset); + } + + public function eof() + { + // Always return true if the underlying stream is EOF + if ($this->stream->eof()) { + return true; + } + + // No limit and the underlying stream is not at EOF + if ($this->limit == -1) { + return false; + } + + return $this->stream->tell() >= $this->offset + $this->limit; + } + + /** + * Returns the size of the limited subset of data + * {@inheritdoc} + */ + public function getSize() + { + if (null === ($length = $this->stream->getSize())) { + return null; + } elseif ($this->limit == -1) { + return $length - $this->offset; + } else { + return min($this->limit, $length - $this->offset); + } + } + + /** + * Allow for a bounded seek on the read limited stream + * {@inheritdoc} + */ + public function seek($offset, $whence = SEEK_SET) + { + if ($whence !== SEEK_SET || $offset < 0) { + throw new \RuntimeException(sprintf( + 'Cannot seek to offset %s with whence %s', + $offset, + $whence + )); + } + + $offset += $this->offset; + + if ($this->limit !== -1) { + if ($offset > $this->offset + $this->limit) { + $offset = $this->offset + $this->limit; + } + } + + $this->stream->seek($offset); + } + + /** + * Give a relative tell() + * {@inheritdoc} + */ + public function tell() + { + return $this->stream->tell() - $this->offset; + } + + /** + * Set the offset to start limiting from + * + * @param int $offset Offset to seek to and begin byte limiting from + * + * @throws \RuntimeException if the stream cannot be seeked. + */ + public function setOffset($offset) + { + $current = $this->stream->tell(); + + if ($current !== $offset) { + // If the stream cannot seek to the offset position, then read to it + if ($this->stream->isSeekable()) { + $this->stream->seek($offset); + } elseif ($current > $offset) { + throw new \RuntimeException("Could not seek to stream offset $offset"); + } else { + $this->stream->read($offset - $current); + } + } + + $this->offset = $offset; + } + + /** + * Set the limit of bytes that the decorator allows to be read from the + * stream. + * + * @param int $limit Number of bytes to allow to be read from the stream. + * Use -1 for no limit. + */ + public function setLimit($limit) + { + $this->limit = $limit; + } + + public function read($length) + { + if ($this->limit == -1) { + return $this->stream->read($length); + } + + // Check if the current position is less than the total allowed + // bytes + original offset + $remaining = ($this->offset + $this->limit) - $this->stream->tell(); + if ($remaining > 0) { + // Only return the amount of requested data, ensuring that the byte + // limit is not exceeded + return $this->stream->read(min($remaining, $length)); + } + + return ''; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/MessageTrait.php b/base/vendor/guzzlehttp/psr7/src/MessageTrait.php new file mode 100644 index 00000000..a7966d10 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/MessageTrait.php @@ -0,0 +1,213 @@ + array of values */ + private $headers = []; + + /** @var array Map of lowercase header name => original name at registration */ + private $headerNames = []; + + /** @var string */ + private $protocol = '1.1'; + + /** @var StreamInterface */ + private $stream; + + public function getProtocolVersion() + { + return $this->protocol; + } + + public function withProtocolVersion($version) + { + if ($this->protocol === $version) { + return $this; + } + + $new = clone $this; + $new->protocol = $version; + return $new; + } + + public function getHeaders() + { + return $this->headers; + } + + public function hasHeader($header) + { + return isset($this->headerNames[strtolower($header)]); + } + + public function getHeader($header) + { + $header = strtolower($header); + + if (!isset($this->headerNames[$header])) { + return []; + } + + $header = $this->headerNames[$header]; + + return $this->headers[$header]; + } + + public function getHeaderLine($header) + { + return implode(', ', $this->getHeader($header)); + } + + public function withHeader($header, $value) + { + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); + $normalized = strtolower($header); + + $new = clone $this; + if (isset($new->headerNames[$normalized])) { + unset($new->headers[$new->headerNames[$normalized]]); + } + $new->headerNames[$normalized] = $header; + $new->headers[$header] = $value; + + return $new; + } + + public function withAddedHeader($header, $value) + { + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); + $normalized = strtolower($header); + + $new = clone $this; + if (isset($new->headerNames[$normalized])) { + $header = $this->headerNames[$normalized]; + $new->headers[$header] = array_merge($this->headers[$header], $value); + } else { + $new->headerNames[$normalized] = $header; + $new->headers[$header] = $value; + } + + return $new; + } + + public function withoutHeader($header) + { + $normalized = strtolower($header); + + if (!isset($this->headerNames[$normalized])) { + return $this; + } + + $header = $this->headerNames[$normalized]; + + $new = clone $this; + unset($new->headers[$header], $new->headerNames[$normalized]); + + return $new; + } + + public function getBody() + { + if (!$this->stream) { + $this->stream = stream_for(''); + } + + return $this->stream; + } + + public function withBody(StreamInterface $body) + { + if ($body === $this->stream) { + return $this; + } + + $new = clone $this; + $new->stream = $body; + return $new; + } + + private function setHeaders(array $headers) + { + $this->headerNames = $this->headers = []; + foreach ($headers as $header => $value) { + if (is_int($header)) { + // Numeric array keys are converted to int by PHP but having a header name '123' is not forbidden by the spec + // and also allowed in withHeader(). So we need to cast it to string again for the following assertion to pass. + $header = (string) $header; + } + $this->assertHeader($header); + $value = $this->normalizeHeaderValue($value); + $normalized = strtolower($header); + if (isset($this->headerNames[$normalized])) { + $header = $this->headerNames[$normalized]; + $this->headers[$header] = array_merge($this->headers[$header], $value); + } else { + $this->headerNames[$normalized] = $header; + $this->headers[$header] = $value; + } + } + } + + private function normalizeHeaderValue($value) + { + if (!is_array($value)) { + return $this->trimHeaderValues([$value]); + } + + if (count($value) === 0) { + throw new \InvalidArgumentException('Header value can not be an empty array.'); + } + + return $this->trimHeaderValues($value); + } + + /** + * Trims whitespace from the header values. + * + * Spaces and tabs ought to be excluded by parsers when extracting the field value from a header field. + * + * header-field = field-name ":" OWS field-value OWS + * OWS = *( SP / HTAB ) + * + * @param string[] $values Header values + * + * @return string[] Trimmed header values + * + * @see https://tools.ietf.org/html/rfc7230#section-3.2.4 + */ + private function trimHeaderValues(array $values) + { + return array_map(function ($value) { + if (!is_scalar($value) && null !== $value) { + throw new \InvalidArgumentException(sprintf( + 'Header value must be scalar or null but %s provided.', + is_object($value) ? get_class($value) : gettype($value) + )); + } + + return trim((string) $value, " \t"); + }, $values); + } + + private function assertHeader($header) + { + if (!is_string($header)) { + throw new \InvalidArgumentException(sprintf( + 'Header name must be a string but %s provided.', + is_object($header) ? get_class($header) : gettype($header) + )); + } + + if ($header === '') { + throw new \InvalidArgumentException('Header name can not be empty.'); + } + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/MultipartStream.php b/base/vendor/guzzlehttp/psr7/src/MultipartStream.php new file mode 100644 index 00000000..c0fd584f --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/MultipartStream.php @@ -0,0 +1,153 @@ +boundary = $boundary ?: sha1(uniqid('', true)); + $this->stream = $this->createStream($elements); + } + + /** + * Get the boundary + * + * @return string + */ + public function getBoundary() + { + return $this->boundary; + } + + public function isWritable() + { + return false; + } + + /** + * Get the headers needed before transferring the content of a POST file + */ + private function getHeaders(array $headers) + { + $str = ''; + foreach ($headers as $key => $value) { + $str .= "{$key}: {$value}\r\n"; + } + + return "--{$this->boundary}\r\n" . trim($str) . "\r\n\r\n"; + } + + /** + * Create the aggregate stream that will be used to upload the POST data + */ + protected function createStream(array $elements) + { + $stream = new AppendStream(); + + foreach ($elements as $element) { + $this->addElement($stream, $element); + } + + // Add the trailing boundary with CRLF + $stream->addStream(stream_for("--{$this->boundary}--\r\n")); + + return $stream; + } + + private function addElement(AppendStream $stream, array $element) + { + foreach (['contents', 'name'] as $key) { + if (!array_key_exists($key, $element)) { + throw new \InvalidArgumentException("A '{$key}' key is required"); + } + } + + $element['contents'] = stream_for($element['contents']); + + if (empty($element['filename'])) { + $uri = $element['contents']->getMetadata('uri'); + if (substr($uri, 0, 6) !== 'php://') { + $element['filename'] = $uri; + } + } + + list($body, $headers) = $this->createElement( + $element['name'], + $element['contents'], + isset($element['filename']) ? $element['filename'] : null, + isset($element['headers']) ? $element['headers'] : [] + ); + + $stream->addStream(stream_for($this->getHeaders($headers))); + $stream->addStream($body); + $stream->addStream(stream_for("\r\n")); + } + + /** + * @return array + */ + private function createElement($name, StreamInterface $stream, $filename, array $headers) + { + // Set a default content-disposition header if one was no provided + $disposition = $this->getHeader($headers, 'content-disposition'); + if (!$disposition) { + $headers['Content-Disposition'] = ($filename === '0' || $filename) + ? sprintf('form-data; name="%s"; filename="%s"', + $name, + basename($filename)) + : "form-data; name=\"{$name}\""; + } + + // Set a default content-length header if one was no provided + $length = $this->getHeader($headers, 'content-length'); + if (!$length) { + if ($length = $stream->getSize()) { + $headers['Content-Length'] = (string) $length; + } + } + + // Set a default Content-Type if one was not supplied + $type = $this->getHeader($headers, 'content-type'); + if (!$type && ($filename === '0' || $filename)) { + if ($type = mimetype_from_filename($filename)) { + $headers['Content-Type'] = $type; + } + } + + return [$stream, $headers]; + } + + private function getHeader(array $headers, $key) + { + $lowercaseHeader = strtolower($key); + foreach ($headers as $k => $v) { + if (strtolower($k) === $lowercaseHeader) { + return $v; + } + } + + return null; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/NoSeekStream.php b/base/vendor/guzzlehttp/psr7/src/NoSeekStream.php new file mode 100644 index 00000000..23322180 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/NoSeekStream.php @@ -0,0 +1,22 @@ +source = $source; + $this->size = isset($options['size']) ? $options['size'] : null; + $this->metadata = isset($options['metadata']) ? $options['metadata'] : []; + $this->buffer = new BufferStream(); + } + + public function __toString() + { + try { + return copy_to_string($this); + } catch (\Exception $e) { + return ''; + } + } + + public function close() + { + $this->detach(); + } + + public function detach() + { + $this->tellPos = false; + $this->source = null; + } + + public function getSize() + { + return $this->size; + } + + public function tell() + { + return $this->tellPos; + } + + public function eof() + { + return !$this->source; + } + + public function isSeekable() + { + return false; + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + throw new \RuntimeException('Cannot seek a PumpStream'); + } + + public function isWritable() + { + return false; + } + + public function write($string) + { + throw new \RuntimeException('Cannot write to a PumpStream'); + } + + public function isReadable() + { + return true; + } + + public function read($length) + { + $data = $this->buffer->read($length); + $readLen = strlen($data); + $this->tellPos += $readLen; + $remaining = $length - $readLen; + + if ($remaining) { + $this->pump($remaining); + $data .= $this->buffer->read($remaining); + $this->tellPos += strlen($data) - $readLen; + } + + return $data; + } + + public function getContents() + { + $result = ''; + while (!$this->eof()) { + $result .= $this->read(1000000); + } + + return $result; + } + + public function getMetadata($key = null) + { + if (!$key) { + return $this->metadata; + } + + return isset($this->metadata[$key]) ? $this->metadata[$key] : null; + } + + private function pump($length) + { + if ($this->source) { + do { + $data = call_user_func($this->source, $length); + if ($data === false || $data === null) { + $this->source = null; + return; + } + $this->buffer->write($data); + $length -= strlen($data); + } while ($length > 0); + } + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/Request.php b/base/vendor/guzzlehttp/psr7/src/Request.php new file mode 100644 index 00000000..59f337db --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/Request.php @@ -0,0 +1,151 @@ +assertMethod($method); + if (!($uri instanceof UriInterface)) { + $uri = new Uri($uri); + } + + $this->method = strtoupper($method); + $this->uri = $uri; + $this->setHeaders($headers); + $this->protocol = $version; + + if (!isset($this->headerNames['host'])) { + $this->updateHostFromUri(); + } + + if ($body !== '' && $body !== null) { + $this->stream = stream_for($body); + } + } + + public function getRequestTarget() + { + if ($this->requestTarget !== null) { + return $this->requestTarget; + } + + $target = $this->uri->getPath(); + if ($target == '') { + $target = '/'; + } + if ($this->uri->getQuery() != '') { + $target .= '?' . $this->uri->getQuery(); + } + + return $target; + } + + public function withRequestTarget($requestTarget) + { + if (preg_match('#\s#', $requestTarget)) { + throw new InvalidArgumentException( + 'Invalid request target provided; cannot contain whitespace' + ); + } + + $new = clone $this; + $new->requestTarget = $requestTarget; + return $new; + } + + public function getMethod() + { + return $this->method; + } + + public function withMethod($method) + { + $this->assertMethod($method); + $new = clone $this; + $new->method = strtoupper($method); + return $new; + } + + public function getUri() + { + return $this->uri; + } + + public function withUri(UriInterface $uri, $preserveHost = false) + { + if ($uri === $this->uri) { + return $this; + } + + $new = clone $this; + $new->uri = $uri; + + if (!$preserveHost || !isset($this->headerNames['host'])) { + $new->updateHostFromUri(); + } + + return $new; + } + + private function updateHostFromUri() + { + $host = $this->uri->getHost(); + + if ($host == '') { + return; + } + + if (($port = $this->uri->getPort()) !== null) { + $host .= ':' . $port; + } + + if (isset($this->headerNames['host'])) { + $header = $this->headerNames['host']; + } else { + $header = 'Host'; + $this->headerNames['host'] = 'Host'; + } + // Ensure Host is the first header. + // See: http://tools.ietf.org/html/rfc7230#section-5.4 + $this->headers = [$header => [$host]] + $this->headers; + } + + private function assertMethod($method) + { + if (!is_string($method) || $method === '') { + throw new \InvalidArgumentException('Method must be a non-empty string.'); + } + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/Response.php b/base/vendor/guzzlehttp/psr7/src/Response.php new file mode 100644 index 00000000..e7e04d86 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/Response.php @@ -0,0 +1,154 @@ + 'Continue', + 101 => 'Switching Protocols', + 102 => 'Processing', + 200 => 'OK', + 201 => 'Created', + 202 => 'Accepted', + 203 => 'Non-Authoritative Information', + 204 => 'No Content', + 205 => 'Reset Content', + 206 => 'Partial Content', + 207 => 'Multi-status', + 208 => 'Already Reported', + 300 => 'Multiple Choices', + 301 => 'Moved Permanently', + 302 => 'Found', + 303 => 'See Other', + 304 => 'Not Modified', + 305 => 'Use Proxy', + 306 => 'Switch Proxy', + 307 => 'Temporary Redirect', + 400 => 'Bad Request', + 401 => 'Unauthorized', + 402 => 'Payment Required', + 403 => 'Forbidden', + 404 => 'Not Found', + 405 => 'Method Not Allowed', + 406 => 'Not Acceptable', + 407 => 'Proxy Authentication Required', + 408 => 'Request Time-out', + 409 => 'Conflict', + 410 => 'Gone', + 411 => 'Length Required', + 412 => 'Precondition Failed', + 413 => 'Request Entity Too Large', + 414 => 'Request-URI Too Large', + 415 => 'Unsupported Media Type', + 416 => 'Requested range not satisfiable', + 417 => 'Expectation Failed', + 418 => 'I\'m a teapot', + 422 => 'Unprocessable Entity', + 423 => 'Locked', + 424 => 'Failed Dependency', + 425 => 'Unordered Collection', + 426 => 'Upgrade Required', + 428 => 'Precondition Required', + 429 => 'Too Many Requests', + 431 => 'Request Header Fields Too Large', + 451 => 'Unavailable For Legal Reasons', + 500 => 'Internal Server Error', + 501 => 'Not Implemented', + 502 => 'Bad Gateway', + 503 => 'Service Unavailable', + 504 => 'Gateway Time-out', + 505 => 'HTTP Version not supported', + 506 => 'Variant Also Negotiates', + 507 => 'Insufficient Storage', + 508 => 'Loop Detected', + 511 => 'Network Authentication Required', + ]; + + /** @var string */ + private $reasonPhrase = ''; + + /** @var int */ + private $statusCode = 200; + + /** + * @param int $status Status code + * @param array $headers Response headers + * @param string|null|resource|StreamInterface $body Response body + * @param string $version Protocol version + * @param string|null $reason Reason phrase (when empty a default will be used based on the status code) + */ + public function __construct( + $status = 200, + array $headers = [], + $body = null, + $version = '1.1', + $reason = null + ) { + $this->assertStatusCodeIsInteger($status); + $status = (int) $status; + $this->assertStatusCodeRange($status); + + $this->statusCode = $status; + + if ($body !== '' && $body !== null) { + $this->stream = stream_for($body); + } + + $this->setHeaders($headers); + if ($reason == '' && isset(self::$phrases[$this->statusCode])) { + $this->reasonPhrase = self::$phrases[$this->statusCode]; + } else { + $this->reasonPhrase = (string) $reason; + } + + $this->protocol = $version; + } + + public function getStatusCode() + { + return $this->statusCode; + } + + public function getReasonPhrase() + { + return $this->reasonPhrase; + } + + public function withStatus($code, $reasonPhrase = '') + { + $this->assertStatusCodeIsInteger($code); + $code = (int) $code; + $this->assertStatusCodeRange($code); + + $new = clone $this; + $new->statusCode = $code; + if ($reasonPhrase == '' && isset(self::$phrases[$new->statusCode])) { + $reasonPhrase = self::$phrases[$new->statusCode]; + } + $new->reasonPhrase = $reasonPhrase; + return $new; + } + + private function assertStatusCodeIsInteger($statusCode) + { + if (filter_var($statusCode, FILTER_VALIDATE_INT) === false) { + throw new \InvalidArgumentException('Status code must be an integer value.'); + } + } + + private function assertStatusCodeRange($statusCode) + { + if ($statusCode < 100 || $statusCode >= 600) { + throw new \InvalidArgumentException('Status code must be an integer value between 1xx and 5xx.'); + } + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/Rfc7230.php b/base/vendor/guzzlehttp/psr7/src/Rfc7230.php new file mode 100644 index 00000000..505e4742 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/Rfc7230.php @@ -0,0 +1,18 @@ +@,;:\\\"/[\]?={}\x01-\x20\x7F]++):[ \t]*+((?:[ \t]*+[\x21-\x7E\x80-\xFF]++)*+)[ \t]*+\r?\n)m"; + const HEADER_FOLD_REGEX = "(\r?\n[ \t]++)"; +} diff --git a/base/vendor/guzzlehttp/psr7/src/ServerRequest.php b/base/vendor/guzzlehttp/psr7/src/ServerRequest.php new file mode 100644 index 00000000..1a09a6c8 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/ServerRequest.php @@ -0,0 +1,376 @@ +serverParams = $serverParams; + + parent::__construct($method, $uri, $headers, $body, $version); + } + + /** + * Return an UploadedFile instance array. + * + * @param array $files A array which respect $_FILES structure + * @throws InvalidArgumentException for unrecognized values + * @return array + */ + public static function normalizeFiles(array $files) + { + $normalized = []; + + foreach ($files as $key => $value) { + if ($value instanceof UploadedFileInterface) { + $normalized[$key] = $value; + } elseif (is_array($value) && isset($value['tmp_name'])) { + $normalized[$key] = self::createUploadedFileFromSpec($value); + } elseif (is_array($value)) { + $normalized[$key] = self::normalizeFiles($value); + continue; + } else { + throw new InvalidArgumentException('Invalid value in files specification'); + } + } + + return $normalized; + } + + /** + * Create and return an UploadedFile instance from a $_FILES specification. + * + * If the specification represents an array of values, this method will + * delegate to normalizeNestedFileSpec() and return that return value. + * + * @param array $value $_FILES struct + * @return array|UploadedFileInterface + */ + private static function createUploadedFileFromSpec(array $value) + { + if (is_array($value['tmp_name'])) { + return self::normalizeNestedFileSpec($value); + } + + return new UploadedFile( + $value['tmp_name'], + (int) $value['size'], + (int) $value['error'], + $value['name'], + $value['type'] + ); + } + + /** + * Normalize an array of file specifications. + * + * Loops through all nested files and returns a normalized array of + * UploadedFileInterface instances. + * + * @param array $files + * @return UploadedFileInterface[] + */ + private static function normalizeNestedFileSpec(array $files = []) + { + $normalizedFiles = []; + + foreach (array_keys($files['tmp_name']) as $key) { + $spec = [ + 'tmp_name' => $files['tmp_name'][$key], + 'size' => $files['size'][$key], + 'error' => $files['error'][$key], + 'name' => $files['name'][$key], + 'type' => $files['type'][$key], + ]; + $normalizedFiles[$key] = self::createUploadedFileFromSpec($spec); + } + + return $normalizedFiles; + } + + /** + * Return a ServerRequest populated with superglobals: + * $_GET + * $_POST + * $_COOKIE + * $_FILES + * $_SERVER + * + * @return ServerRequestInterface + */ + public static function fromGlobals() + { + $method = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : 'GET'; + $headers = getallheaders(); + $uri = self::getUriFromGlobals(); + $body = new CachingStream(new LazyOpenStream('php://input', 'r+')); + $protocol = isset($_SERVER['SERVER_PROTOCOL']) ? str_replace('HTTP/', '', $_SERVER['SERVER_PROTOCOL']) : '1.1'; + + $serverRequest = new ServerRequest($method, $uri, $headers, $body, $protocol, $_SERVER); + + return $serverRequest + ->withCookieParams($_COOKIE) + ->withQueryParams($_GET) + ->withParsedBody($_POST) + ->withUploadedFiles(self::normalizeFiles($_FILES)); + } + + private static function extractHostAndPortFromAuthority($authority) + { + $uri = 'http://'.$authority; + $parts = parse_url($uri); + if (false === $parts) { + return [null, null]; + } + + $host = isset($parts['host']) ? $parts['host'] : null; + $port = isset($parts['port']) ? $parts['port'] : null; + + return [$host, $port]; + } + + /** + * Get a Uri populated with values from $_SERVER. + * + * @return UriInterface + */ + public static function getUriFromGlobals() + { + $uri = new Uri(''); + + $uri = $uri->withScheme(!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off' ? 'https' : 'http'); + + $hasPort = false; + if (isset($_SERVER['HTTP_HOST'])) { + list($host, $port) = self::extractHostAndPortFromAuthority($_SERVER['HTTP_HOST']); + if ($host !== null) { + $uri = $uri->withHost($host); + } + + if ($port !== null) { + $hasPort = true; + $uri = $uri->withPort($port); + } + } elseif (isset($_SERVER['SERVER_NAME'])) { + $uri = $uri->withHost($_SERVER['SERVER_NAME']); + } elseif (isset($_SERVER['SERVER_ADDR'])) { + $uri = $uri->withHost($_SERVER['SERVER_ADDR']); + } + + if (!$hasPort && isset($_SERVER['SERVER_PORT'])) { + $uri = $uri->withPort($_SERVER['SERVER_PORT']); + } + + $hasQuery = false; + if (isset($_SERVER['REQUEST_URI'])) { + $requestUriParts = explode('?', $_SERVER['REQUEST_URI'], 2); + $uri = $uri->withPath($requestUriParts[0]); + if (isset($requestUriParts[1])) { + $hasQuery = true; + $uri = $uri->withQuery($requestUriParts[1]); + } + } + + if (!$hasQuery && isset($_SERVER['QUERY_STRING'])) { + $uri = $uri->withQuery($_SERVER['QUERY_STRING']); + } + + return $uri; + } + + + /** + * {@inheritdoc} + */ + public function getServerParams() + { + return $this->serverParams; + } + + /** + * {@inheritdoc} + */ + public function getUploadedFiles() + { + return $this->uploadedFiles; + } + + /** + * {@inheritdoc} + */ + public function withUploadedFiles(array $uploadedFiles) + { + $new = clone $this; + $new->uploadedFiles = $uploadedFiles; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getCookieParams() + { + return $this->cookieParams; + } + + /** + * {@inheritdoc} + */ + public function withCookieParams(array $cookies) + { + $new = clone $this; + $new->cookieParams = $cookies; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getQueryParams() + { + return $this->queryParams; + } + + /** + * {@inheritdoc} + */ + public function withQueryParams(array $query) + { + $new = clone $this; + $new->queryParams = $query; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getParsedBody() + { + return $this->parsedBody; + } + + /** + * {@inheritdoc} + */ + public function withParsedBody($data) + { + $new = clone $this; + $new->parsedBody = $data; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function getAttributes() + { + return $this->attributes; + } + + /** + * {@inheritdoc} + */ + public function getAttribute($attribute, $default = null) + { + if (false === array_key_exists($attribute, $this->attributes)) { + return $default; + } + + return $this->attributes[$attribute]; + } + + /** + * {@inheritdoc} + */ + public function withAttribute($attribute, $value) + { + $new = clone $this; + $new->attributes[$attribute] = $value; + + return $new; + } + + /** + * {@inheritdoc} + */ + public function withoutAttribute($attribute) + { + if (false === array_key_exists($attribute, $this->attributes)) { + return $this; + } + + $new = clone $this; + unset($new->attributes[$attribute]); + + return $new; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/Stream.php b/base/vendor/guzzlehttp/psr7/src/Stream.php new file mode 100644 index 00000000..d9e7409c --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/Stream.php @@ -0,0 +1,267 @@ +size = $options['size']; + } + + $this->customMetadata = isset($options['metadata']) + ? $options['metadata'] + : []; + + $this->stream = $stream; + $meta = stream_get_meta_data($this->stream); + $this->seekable = $meta['seekable']; + $this->readable = (bool)preg_match(self::READABLE_MODES, $meta['mode']); + $this->writable = (bool)preg_match(self::WRITABLE_MODES, $meta['mode']); + $this->uri = $this->getMetadata('uri'); + } + + /** + * Closes the stream when the destructed + */ + public function __destruct() + { + $this->close(); + } + + public function __toString() + { + try { + $this->seek(0); + return (string) stream_get_contents($this->stream); + } catch (\Exception $e) { + return ''; + } + } + + public function getContents() + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + + $contents = stream_get_contents($this->stream); + + if ($contents === false) { + throw new \RuntimeException('Unable to read stream contents'); + } + + return $contents; + } + + public function close() + { + if (isset($this->stream)) { + if (is_resource($this->stream)) { + fclose($this->stream); + } + $this->detach(); + } + } + + public function detach() + { + if (!isset($this->stream)) { + return null; + } + + $result = $this->stream; + unset($this->stream); + $this->size = $this->uri = null; + $this->readable = $this->writable = $this->seekable = false; + + return $result; + } + + public function getSize() + { + if ($this->size !== null) { + return $this->size; + } + + if (!isset($this->stream)) { + return null; + } + + // Clear the stat cache if the stream has a URI + if ($this->uri) { + clearstatcache(true, $this->uri); + } + + $stats = fstat($this->stream); + if (isset($stats['size'])) { + $this->size = $stats['size']; + return $this->size; + } + + return null; + } + + public function isReadable() + { + return $this->readable; + } + + public function isWritable() + { + return $this->writable; + } + + public function isSeekable() + { + return $this->seekable; + } + + public function eof() + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + + return feof($this->stream); + } + + public function tell() + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + + $result = ftell($this->stream); + + if ($result === false) { + throw new \RuntimeException('Unable to determine stream position'); + } + + return $result; + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + $whence = (int) $whence; + + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + if (!$this->seekable) { + throw new \RuntimeException('Stream is not seekable'); + } + if (fseek($this->stream, $offset, $whence) === -1) { + throw new \RuntimeException('Unable to seek to stream position ' + . $offset . ' with whence ' . var_export($whence, true)); + } + } + + public function read($length) + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + if (!$this->readable) { + throw new \RuntimeException('Cannot read from non-readable stream'); + } + if ($length < 0) { + throw new \RuntimeException('Length parameter cannot be negative'); + } + + if (0 === $length) { + return ''; + } + + $string = fread($this->stream, $length); + if (false === $string) { + throw new \RuntimeException('Unable to read from stream'); + } + + return $string; + } + + public function write($string) + { + if (!isset($this->stream)) { + throw new \RuntimeException('Stream is detached'); + } + if (!$this->writable) { + throw new \RuntimeException('Cannot write to a non-writable stream'); + } + + // We can't know the size after writing anything + $this->size = null; + $result = fwrite($this->stream, $string); + + if ($result === false) { + throw new \RuntimeException('Unable to write to stream'); + } + + return $result; + } + + public function getMetadata($key = null) + { + if (!isset($this->stream)) { + return $key ? null : []; + } elseif (!$key) { + return $this->customMetadata + stream_get_meta_data($this->stream); + } elseif (isset($this->customMetadata[$key])) { + return $this->customMetadata[$key]; + } + + $meta = stream_get_meta_data($this->stream); + + return isset($meta[$key]) ? $meta[$key] : null; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php b/base/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php new file mode 100644 index 00000000..daec6f52 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/StreamDecoratorTrait.php @@ -0,0 +1,149 @@ +stream = $stream; + } + + /** + * Magic method used to create a new stream if streams are not added in + * the constructor of a decorator (e.g., LazyOpenStream). + * + * @param string $name Name of the property (allows "stream" only). + * + * @return StreamInterface + */ + public function __get($name) + { + if ($name == 'stream') { + $this->stream = $this->createStream(); + return $this->stream; + } + + throw new \UnexpectedValueException("$name not found on class"); + } + + public function __toString() + { + try { + if ($this->isSeekable()) { + $this->seek(0); + } + return $this->getContents(); + } catch (\Exception $e) { + // Really, PHP? https://bugs.php.net/bug.php?id=53648 + trigger_error('StreamDecorator::__toString exception: ' + . (string) $e, E_USER_ERROR); + return ''; + } + } + + public function getContents() + { + return copy_to_string($this); + } + + /** + * Allow decorators to implement custom methods + * + * @param string $method Missing method name + * @param array $args Method arguments + * + * @return mixed + */ + public function __call($method, array $args) + { + $result = call_user_func_array([$this->stream, $method], $args); + + // Always return the wrapped object if the result is a return $this + return $result === $this->stream ? $this : $result; + } + + public function close() + { + $this->stream->close(); + } + + public function getMetadata($key = null) + { + return $this->stream->getMetadata($key); + } + + public function detach() + { + return $this->stream->detach(); + } + + public function getSize() + { + return $this->stream->getSize(); + } + + public function eof() + { + return $this->stream->eof(); + } + + public function tell() + { + return $this->stream->tell(); + } + + public function isReadable() + { + return $this->stream->isReadable(); + } + + public function isWritable() + { + return $this->stream->isWritable(); + } + + public function isSeekable() + { + return $this->stream->isSeekable(); + } + + public function rewind() + { + $this->seek(0); + } + + public function seek($offset, $whence = SEEK_SET) + { + $this->stream->seek($offset, $whence); + } + + public function read($length) + { + return $this->stream->read($length); + } + + public function write($string) + { + return $this->stream->write($string); + } + + /** + * Implement in subclasses to dynamically create streams when requested. + * + * @return StreamInterface + * @throws \BadMethodCallException + */ + protected function createStream() + { + throw new \BadMethodCallException('Not implemented'); + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/StreamWrapper.php b/base/vendor/guzzlehttp/psr7/src/StreamWrapper.php new file mode 100644 index 00000000..0f3a2856 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/StreamWrapper.php @@ -0,0 +1,161 @@ +isReadable()) { + $mode = $stream->isWritable() ? 'r+' : 'r'; + } elseif ($stream->isWritable()) { + $mode = 'w'; + } else { + throw new \InvalidArgumentException('The stream must be readable, ' + . 'writable, or both.'); + } + + return fopen('guzzle://stream', $mode, null, self::createStreamContext($stream)); + } + + /** + * Creates a stream context that can be used to open a stream as a php stream resource. + * + * @param StreamInterface $stream + * + * @return resource + */ + public static function createStreamContext(StreamInterface $stream) + { + return stream_context_create([ + 'guzzle' => ['stream' => $stream] + ]); + } + + /** + * Registers the stream wrapper if needed + */ + public static function register() + { + if (!in_array('guzzle', stream_get_wrappers())) { + stream_wrapper_register('guzzle', __CLASS__); + } + } + + public function stream_open($path, $mode, $options, &$opened_path) + { + $options = stream_context_get_options($this->context); + + if (!isset($options['guzzle']['stream'])) { + return false; + } + + $this->mode = $mode; + $this->stream = $options['guzzle']['stream']; + + return true; + } + + public function stream_read($count) + { + return $this->stream->read($count); + } + + public function stream_write($data) + { + return (int) $this->stream->write($data); + } + + public function stream_tell() + { + return $this->stream->tell(); + } + + public function stream_eof() + { + return $this->stream->eof(); + } + + public function stream_seek($offset, $whence) + { + $this->stream->seek($offset, $whence); + + return true; + } + + public function stream_cast($cast_as) + { + $stream = clone($this->stream); + + return $stream->detach(); + } + + public function stream_stat() + { + static $modeMap = [ + 'r' => 33060, + 'rb' => 33060, + 'r+' => 33206, + 'w' => 33188, + 'wb' => 33188 + ]; + + return [ + 'dev' => 0, + 'ino' => 0, + 'mode' => $modeMap[$this->mode], + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => $this->stream->getSize() ?: 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, + 'blksize' => 0, + 'blocks' => 0 + ]; + } + + public function url_stat($path, $flags) + { + return [ + 'dev' => 0, + 'ino' => 0, + 'mode' => 0, + 'nlink' => 0, + 'uid' => 0, + 'gid' => 0, + 'rdev' => 0, + 'size' => 0, + 'atime' => 0, + 'mtime' => 0, + 'ctime' => 0, + 'blksize' => 0, + 'blocks' => 0 + ]; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/UploadedFile.php b/base/vendor/guzzlehttp/psr7/src/UploadedFile.php new file mode 100644 index 00000000..e62bd5c8 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/UploadedFile.php @@ -0,0 +1,316 @@ +setError($errorStatus); + $this->setSize($size); + $this->setClientFilename($clientFilename); + $this->setClientMediaType($clientMediaType); + + if ($this->isOk()) { + $this->setStreamOrFile($streamOrFile); + } + } + + /** + * Depending on the value set file or stream variable + * + * @param mixed $streamOrFile + * @throws InvalidArgumentException + */ + private function setStreamOrFile($streamOrFile) + { + if (is_string($streamOrFile)) { + $this->file = $streamOrFile; + } elseif (is_resource($streamOrFile)) { + $this->stream = new Stream($streamOrFile); + } elseif ($streamOrFile instanceof StreamInterface) { + $this->stream = $streamOrFile; + } else { + throw new InvalidArgumentException( + 'Invalid stream or file provided for UploadedFile' + ); + } + } + + /** + * @param int $error + * @throws InvalidArgumentException + */ + private function setError($error) + { + if (false === is_int($error)) { + throw new InvalidArgumentException( + 'Upload file error status must be an integer' + ); + } + + if (false === in_array($error, UploadedFile::$errors)) { + throw new InvalidArgumentException( + 'Invalid error status for UploadedFile' + ); + } + + $this->error = $error; + } + + /** + * @param int $size + * @throws InvalidArgumentException + */ + private function setSize($size) + { + if (false === is_int($size)) { + throw new InvalidArgumentException( + 'Upload file size must be an integer' + ); + } + + $this->size = $size; + } + + /** + * @param mixed $param + * @return boolean + */ + private function isStringOrNull($param) + { + return in_array(gettype($param), ['string', 'NULL']); + } + + /** + * @param mixed $param + * @return boolean + */ + private function isStringNotEmpty($param) + { + return is_string($param) && false === empty($param); + } + + /** + * @param string|null $clientFilename + * @throws InvalidArgumentException + */ + private function setClientFilename($clientFilename) + { + if (false === $this->isStringOrNull($clientFilename)) { + throw new InvalidArgumentException( + 'Upload file client filename must be a string or null' + ); + } + + $this->clientFilename = $clientFilename; + } + + /** + * @param string|null $clientMediaType + * @throws InvalidArgumentException + */ + private function setClientMediaType($clientMediaType) + { + if (false === $this->isStringOrNull($clientMediaType)) { + throw new InvalidArgumentException( + 'Upload file client media type must be a string or null' + ); + } + + $this->clientMediaType = $clientMediaType; + } + + /** + * Return true if there is no upload error + * + * @return boolean + */ + private function isOk() + { + return $this->error === UPLOAD_ERR_OK; + } + + /** + * @return boolean + */ + public function isMoved() + { + return $this->moved; + } + + /** + * @throws RuntimeException if is moved or not ok + */ + private function validateActive() + { + if (false === $this->isOk()) { + throw new RuntimeException('Cannot retrieve stream due to upload error'); + } + + if ($this->isMoved()) { + throw new RuntimeException('Cannot retrieve stream after it has already been moved'); + } + } + + /** + * {@inheritdoc} + * @throws RuntimeException if the upload was not successful. + */ + public function getStream() + { + $this->validateActive(); + + if ($this->stream instanceof StreamInterface) { + return $this->stream; + } + + return new LazyOpenStream($this->file, 'r+'); + } + + /** + * {@inheritdoc} + * + * @see http://php.net/is_uploaded_file + * @see http://php.net/move_uploaded_file + * @param string $targetPath Path to which to move the uploaded file. + * @throws RuntimeException if the upload was not successful. + * @throws InvalidArgumentException if the $path specified is invalid. + * @throws RuntimeException on any error during the move operation, or on + * the second or subsequent call to the method. + */ + public function moveTo($targetPath) + { + $this->validateActive(); + + if (false === $this->isStringNotEmpty($targetPath)) { + throw new InvalidArgumentException( + 'Invalid path provided for move operation; must be a non-empty string' + ); + } + + if ($this->file) { + $this->moved = php_sapi_name() == 'cli' + ? rename($this->file, $targetPath) + : move_uploaded_file($this->file, $targetPath); + } else { + copy_to_stream( + $this->getStream(), + new LazyOpenStream($targetPath, 'w') + ); + + $this->moved = true; + } + + if (false === $this->moved) { + throw new RuntimeException( + sprintf('Uploaded file could not be moved to %s', $targetPath) + ); + } + } + + /** + * {@inheritdoc} + * + * @return int|null The file size in bytes or null if unknown. + */ + public function getSize() + { + return $this->size; + } + + /** + * {@inheritdoc} + * + * @see http://php.net/manual/en/features.file-upload.errors.php + * @return int One of PHP's UPLOAD_ERR_XXX constants. + */ + public function getError() + { + return $this->error; + } + + /** + * {@inheritdoc} + * + * @return string|null The filename sent by the client or null if none + * was provided. + */ + public function getClientFilename() + { + return $this->clientFilename; + } + + /** + * {@inheritdoc} + */ + public function getClientMediaType() + { + return $this->clientMediaType; + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/Uri.php b/base/vendor/guzzlehttp/psr7/src/Uri.php new file mode 100644 index 00000000..825a25ee --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/Uri.php @@ -0,0 +1,760 @@ + 80, + 'https' => 443, + 'ftp' => 21, + 'gopher' => 70, + 'nntp' => 119, + 'news' => 119, + 'telnet' => 23, + 'tn3270' => 23, + 'imap' => 143, + 'pop' => 110, + 'ldap' => 389, + ]; + + private static $charUnreserved = 'a-zA-Z0-9_\-\.~'; + private static $charSubDelims = '!\$&\'\(\)\*\+,;='; + private static $replaceQuery = ['=' => '%3D', '&' => '%26']; + + /** @var string Uri scheme. */ + private $scheme = ''; + + /** @var string Uri user info. */ + private $userInfo = ''; + + /** @var string Uri host. */ + private $host = ''; + + /** @var int|null Uri port. */ + private $port; + + /** @var string Uri path. */ + private $path = ''; + + /** @var string Uri query string. */ + private $query = ''; + + /** @var string Uri fragment. */ + private $fragment = ''; + + /** + * @param string $uri URI to parse + */ + public function __construct($uri = '') + { + // weak type check to also accept null until we can add scalar type hints + if ($uri != '') { + $parts = parse_url($uri); + if ($parts === false) { + throw new \InvalidArgumentException("Unable to parse URI: $uri"); + } + $this->applyParts($parts); + } + } + + public function __toString() + { + return self::composeComponents( + $this->scheme, + $this->getAuthority(), + $this->path, + $this->query, + $this->fragment + ); + } + + /** + * Composes a URI reference string from its various components. + * + * Usually this method does not need to be called manually but instead is used indirectly via + * `Psr\Http\Message\UriInterface::__toString`. + * + * PSR-7 UriInterface treats an empty component the same as a missing component as + * getQuery(), getFragment() etc. always return a string. This explains the slight + * difference to RFC 3986 Section 5.3. + * + * Another adjustment is that the authority separator is added even when the authority is missing/empty + * for the "file" scheme. This is because PHP stream functions like `file_get_contents` only work with + * `file:///myfile` but not with `file:/myfile` although they are equivalent according to RFC 3986. But + * `file:///` is the more common syntax for the file scheme anyway (Chrome for example redirects to + * that format). + * + * @param string $scheme + * @param string $authority + * @param string $path + * @param string $query + * @param string $fragment + * + * @return string + * + * @link https://tools.ietf.org/html/rfc3986#section-5.3 + */ + public static function composeComponents($scheme, $authority, $path, $query, $fragment) + { + $uri = ''; + + // weak type checks to also accept null until we can add scalar type hints + if ($scheme != '') { + $uri .= $scheme . ':'; + } + + if ($authority != ''|| $scheme === 'file') { + $uri .= '//' . $authority; + } + + $uri .= $path; + + if ($query != '') { + $uri .= '?' . $query; + } + + if ($fragment != '') { + $uri .= '#' . $fragment; + } + + return $uri; + } + + /** + * Whether the URI has the default port of the current scheme. + * + * `Psr\Http\Message\UriInterface::getPort` may return null or the standard port. This method can be used + * independently of the implementation. + * + * @param UriInterface $uri + * + * @return bool + */ + public static function isDefaultPort(UriInterface $uri) + { + return $uri->getPort() === null + || (isset(self::$defaultPorts[$uri->getScheme()]) && $uri->getPort() === self::$defaultPorts[$uri->getScheme()]); + } + + /** + * Whether the URI is absolute, i.e. it has a scheme. + * + * An instance of UriInterface can either be an absolute URI or a relative reference. This method returns true + * if it is the former. An absolute URI has a scheme. A relative reference is used to express a URI relative + * to another URI, the base URI. Relative references can be divided into several forms: + * - network-path references, e.g. '//example.com/path' + * - absolute-path references, e.g. '/path' + * - relative-path references, e.g. 'subpath' + * + * @param UriInterface $uri + * + * @return bool + * @see Uri::isNetworkPathReference + * @see Uri::isAbsolutePathReference + * @see Uri::isRelativePathReference + * @link https://tools.ietf.org/html/rfc3986#section-4 + */ + public static function isAbsolute(UriInterface $uri) + { + return $uri->getScheme() !== ''; + } + + /** + * Whether the URI is a network-path reference. + * + * A relative reference that begins with two slash characters is termed an network-path reference. + * + * @param UriInterface $uri + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.2 + */ + public static function isNetworkPathReference(UriInterface $uri) + { + return $uri->getScheme() === '' && $uri->getAuthority() !== ''; + } + + /** + * Whether the URI is a absolute-path reference. + * + * A relative reference that begins with a single slash character is termed an absolute-path reference. + * + * @param UriInterface $uri + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.2 + */ + public static function isAbsolutePathReference(UriInterface $uri) + { + return $uri->getScheme() === '' + && $uri->getAuthority() === '' + && isset($uri->getPath()[0]) + && $uri->getPath()[0] === '/'; + } + + /** + * Whether the URI is a relative-path reference. + * + * A relative reference that does not begin with a slash character is termed a relative-path reference. + * + * @param UriInterface $uri + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.2 + */ + public static function isRelativePathReference(UriInterface $uri) + { + return $uri->getScheme() === '' + && $uri->getAuthority() === '' + && (!isset($uri->getPath()[0]) || $uri->getPath()[0] !== '/'); + } + + /** + * Whether the URI is a same-document reference. + * + * A same-document reference refers to a URI that is, aside from its fragment + * component, identical to the base URI. When no base URI is given, only an empty + * URI reference (apart from its fragment) is considered a same-document reference. + * + * @param UriInterface $uri The URI to check + * @param UriInterface|null $base An optional base URI to compare against + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-4.4 + */ + public static function isSameDocumentReference(UriInterface $uri, UriInterface $base = null) + { + if ($base !== null) { + $uri = UriResolver::resolve($base, $uri); + + return ($uri->getScheme() === $base->getScheme()) + && ($uri->getAuthority() === $base->getAuthority()) + && ($uri->getPath() === $base->getPath()) + && ($uri->getQuery() === $base->getQuery()); + } + + return $uri->getScheme() === '' && $uri->getAuthority() === '' && $uri->getPath() === '' && $uri->getQuery() === ''; + } + + /** + * Removes dot segments from a path and returns the new path. + * + * @param string $path + * + * @return string + * + * @deprecated since version 1.4. Use UriResolver::removeDotSegments instead. + * @see UriResolver::removeDotSegments + */ + public static function removeDotSegments($path) + { + return UriResolver::removeDotSegments($path); + } + + /** + * Converts the relative URI into a new URI that is resolved against the base URI. + * + * @param UriInterface $base Base URI + * @param string|UriInterface $rel Relative URI + * + * @return UriInterface + * + * @deprecated since version 1.4. Use UriResolver::resolve instead. + * @see UriResolver::resolve + */ + public static function resolve(UriInterface $base, $rel) + { + if (!($rel instanceof UriInterface)) { + $rel = new self($rel); + } + + return UriResolver::resolve($base, $rel); + } + + /** + * Creates a new URI with a specific query string value removed. + * + * Any existing query string values that exactly match the provided key are + * removed. + * + * @param UriInterface $uri URI to use as a base. + * @param string $key Query string key to remove. + * + * @return UriInterface + */ + public static function withoutQueryValue(UriInterface $uri, $key) + { + $result = self::getFilteredQueryString($uri, [$key]); + + return $uri->withQuery(implode('&', $result)); + } + + /** + * Creates a new URI with a specific query string value. + * + * Any existing query string values that exactly match the provided key are + * removed and replaced with the given key value pair. + * + * A value of null will set the query string key without a value, e.g. "key" + * instead of "key=value". + * + * @param UriInterface $uri URI to use as a base. + * @param string $key Key to set. + * @param string|null $value Value to set + * + * @return UriInterface + */ + public static function withQueryValue(UriInterface $uri, $key, $value) + { + $result = self::getFilteredQueryString($uri, [$key]); + + $result[] = self::generateQueryString($key, $value); + + return $uri->withQuery(implode('&', $result)); + } + + /** + * Creates a new URI with multiple specific query string values. + * + * It has the same behavior as withQueryValue() but for an associative array of key => value. + * + * @param UriInterface $uri URI to use as a base. + * @param array $keyValueArray Associative array of key and values + * + * @return UriInterface + */ + public static function withQueryValues(UriInterface $uri, array $keyValueArray) + { + $result = self::getFilteredQueryString($uri, array_keys($keyValueArray)); + + foreach ($keyValueArray as $key => $value) { + $result[] = self::generateQueryString($key, $value); + } + + return $uri->withQuery(implode('&', $result)); + } + + /** + * Creates a URI from a hash of `parse_url` components. + * + * @param array $parts + * + * @return UriInterface + * @link http://php.net/manual/en/function.parse-url.php + * + * @throws \InvalidArgumentException If the components do not form a valid URI. + */ + public static function fromParts(array $parts) + { + $uri = new self(); + $uri->applyParts($parts); + $uri->validateState(); + + return $uri; + } + + public function getScheme() + { + return $this->scheme; + } + + public function getAuthority() + { + $authority = $this->host; + if ($this->userInfo !== '') { + $authority = $this->userInfo . '@' . $authority; + } + + if ($this->port !== null) { + $authority .= ':' . $this->port; + } + + return $authority; + } + + public function getUserInfo() + { + return $this->userInfo; + } + + public function getHost() + { + return $this->host; + } + + public function getPort() + { + return $this->port; + } + + public function getPath() + { + return $this->path; + } + + public function getQuery() + { + return $this->query; + } + + public function getFragment() + { + return $this->fragment; + } + + public function withScheme($scheme) + { + $scheme = $this->filterScheme($scheme); + + if ($this->scheme === $scheme) { + return $this; + } + + $new = clone $this; + $new->scheme = $scheme; + $new->removeDefaultPort(); + $new->validateState(); + + return $new; + } + + public function withUserInfo($user, $password = null) + { + $info = $this->filterUserInfoComponent($user); + if ($password !== null) { + $info .= ':' . $this->filterUserInfoComponent($password); + } + + if ($this->userInfo === $info) { + return $this; + } + + $new = clone $this; + $new->userInfo = $info; + $new->validateState(); + + return $new; + } + + public function withHost($host) + { + $host = $this->filterHost($host); + + if ($this->host === $host) { + return $this; + } + + $new = clone $this; + $new->host = $host; + $new->validateState(); + + return $new; + } + + public function withPort($port) + { + $port = $this->filterPort($port); + + if ($this->port === $port) { + return $this; + } + + $new = clone $this; + $new->port = $port; + $new->removeDefaultPort(); + $new->validateState(); + + return $new; + } + + public function withPath($path) + { + $path = $this->filterPath($path); + + if ($this->path === $path) { + return $this; + } + + $new = clone $this; + $new->path = $path; + $new->validateState(); + + return $new; + } + + public function withQuery($query) + { + $query = $this->filterQueryAndFragment($query); + + if ($this->query === $query) { + return $this; + } + + $new = clone $this; + $new->query = $query; + + return $new; + } + + public function withFragment($fragment) + { + $fragment = $this->filterQueryAndFragment($fragment); + + if ($this->fragment === $fragment) { + return $this; + } + + $new = clone $this; + $new->fragment = $fragment; + + return $new; + } + + /** + * Apply parse_url parts to a URI. + * + * @param array $parts Array of parse_url parts to apply. + */ + private function applyParts(array $parts) + { + $this->scheme = isset($parts['scheme']) + ? $this->filterScheme($parts['scheme']) + : ''; + $this->userInfo = isset($parts['user']) + ? $this->filterUserInfoComponent($parts['user']) + : ''; + $this->host = isset($parts['host']) + ? $this->filterHost($parts['host']) + : ''; + $this->port = isset($parts['port']) + ? $this->filterPort($parts['port']) + : null; + $this->path = isset($parts['path']) + ? $this->filterPath($parts['path']) + : ''; + $this->query = isset($parts['query']) + ? $this->filterQueryAndFragment($parts['query']) + : ''; + $this->fragment = isset($parts['fragment']) + ? $this->filterQueryAndFragment($parts['fragment']) + : ''; + if (isset($parts['pass'])) { + $this->userInfo .= ':' . $this->filterUserInfoComponent($parts['pass']); + } + + $this->removeDefaultPort(); + } + + /** + * @param string $scheme + * + * @return string + * + * @throws \InvalidArgumentException If the scheme is invalid. + */ + private function filterScheme($scheme) + { + if (!is_string($scheme)) { + throw new \InvalidArgumentException('Scheme must be a string'); + } + + return strtolower($scheme); + } + + /** + * @param string $component + * + * @return string + * + * @throws \InvalidArgumentException If the user info is invalid. + */ + private function filterUserInfoComponent($component) + { + if (!is_string($component)) { + throw new \InvalidArgumentException('User info must be a string'); + } + + return preg_replace_callback( + '/(?:[^%' . self::$charUnreserved . self::$charSubDelims . ']+|%(?![A-Fa-f0-9]{2}))/', + [$this, 'rawurlencodeMatchZero'], + $component + ); + } + + /** + * @param string $host + * + * @return string + * + * @throws \InvalidArgumentException If the host is invalid. + */ + private function filterHost($host) + { + if (!is_string($host)) { + throw new \InvalidArgumentException('Host must be a string'); + } + + return strtolower($host); + } + + /** + * @param int|null $port + * + * @return int|null + * + * @throws \InvalidArgumentException If the port is invalid. + */ + private function filterPort($port) + { + if ($port === null) { + return null; + } + + $port = (int) $port; + if (0 > $port || 0xffff < $port) { + throw new \InvalidArgumentException( + sprintf('Invalid port: %d. Must be between 0 and 65535', $port) + ); + } + + return $port; + } + + /** + * @param UriInterface $uri + * @param array $keys + * + * @return array + */ + private static function getFilteredQueryString(UriInterface $uri, array $keys) + { + $current = $uri->getQuery(); + + if ($current === '') { + return []; + } + + $decodedKeys = array_map('rawurldecode', $keys); + + return array_filter(explode('&', $current), function ($part) use ($decodedKeys) { + return !in_array(rawurldecode(explode('=', $part)[0]), $decodedKeys, true); + }); + } + + /** + * @param string $key + * @param string|null $value + * + * @return string + */ + private static function generateQueryString($key, $value) + { + // Query string separators ("=", "&") within the key or value need to be encoded + // (while preventing double-encoding) before setting the query string. All other + // chars that need percent-encoding will be encoded by withQuery(). + $queryString = strtr($key, self::$replaceQuery); + + if ($value !== null) { + $queryString .= '=' . strtr($value, self::$replaceQuery); + } + + return $queryString; + } + + private function removeDefaultPort() + { + if ($this->port !== null && self::isDefaultPort($this)) { + $this->port = null; + } + } + + /** + * Filters the path of a URI + * + * @param string $path + * + * @return string + * + * @throws \InvalidArgumentException If the path is invalid. + */ + private function filterPath($path) + { + if (!is_string($path)) { + throw new \InvalidArgumentException('Path must be a string'); + } + + return preg_replace_callback( + '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/]++|%(?![A-Fa-f0-9]{2}))/', + [$this, 'rawurlencodeMatchZero'], + $path + ); + } + + /** + * Filters the query string or fragment of a URI. + * + * @param string $str + * + * @return string + * + * @throws \InvalidArgumentException If the query or fragment is invalid. + */ + private function filterQueryAndFragment($str) + { + if (!is_string($str)) { + throw new \InvalidArgumentException('Query and fragment must be a string'); + } + + return preg_replace_callback( + '/(?:[^' . self::$charUnreserved . self::$charSubDelims . '%:@\/\?]++|%(?![A-Fa-f0-9]{2}))/', + [$this, 'rawurlencodeMatchZero'], + $str + ); + } + + private function rawurlencodeMatchZero(array $match) + { + return rawurlencode($match[0]); + } + + private function validateState() + { + if ($this->host === '' && ($this->scheme === 'http' || $this->scheme === 'https')) { + $this->host = self::HTTP_DEFAULT_HOST; + } + + if ($this->getAuthority() === '') { + if (0 === strpos($this->path, '//')) { + throw new \InvalidArgumentException('The path of a URI without an authority must not start with two slashes "//"'); + } + if ($this->scheme === '' && false !== strpos(explode('/', $this->path, 2)[0], ':')) { + throw new \InvalidArgumentException('A relative URI must not have a path beginning with a segment containing a colon'); + } + } elseif (isset($this->path[0]) && $this->path[0] !== '/') { + @trigger_error( + 'The path of a URI with an authority must start with a slash "/" or be empty. Automagically fixing the URI ' . + 'by adding a leading slash to the path is deprecated since version 1.4 and will throw an exception instead.', + E_USER_DEPRECATED + ); + $this->path = '/'. $this->path; + //throw new \InvalidArgumentException('The path of a URI with an authority must start with a slash "/" or be empty'); + } + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/UriNormalizer.php b/base/vendor/guzzlehttp/psr7/src/UriNormalizer.php new file mode 100644 index 00000000..384c29e5 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/UriNormalizer.php @@ -0,0 +1,216 @@ +getPath() === '' && + ($uri->getScheme() === 'http' || $uri->getScheme() === 'https') + ) { + $uri = $uri->withPath('/'); + } + + if ($flags & self::REMOVE_DEFAULT_HOST && $uri->getScheme() === 'file' && $uri->getHost() === 'localhost') { + $uri = $uri->withHost(''); + } + + if ($flags & self::REMOVE_DEFAULT_PORT && $uri->getPort() !== null && Uri::isDefaultPort($uri)) { + $uri = $uri->withPort(null); + } + + if ($flags & self::REMOVE_DOT_SEGMENTS && !Uri::isRelativePathReference($uri)) { + $uri = $uri->withPath(UriResolver::removeDotSegments($uri->getPath())); + } + + if ($flags & self::REMOVE_DUPLICATE_SLASHES) { + $uri = $uri->withPath(preg_replace('#//++#', '/', $uri->getPath())); + } + + if ($flags & self::SORT_QUERY_PARAMETERS && $uri->getQuery() !== '') { + $queryKeyValues = explode('&', $uri->getQuery()); + sort($queryKeyValues); + $uri = $uri->withQuery(implode('&', $queryKeyValues)); + } + + return $uri; + } + + /** + * Whether two URIs can be considered equivalent. + * + * Both URIs are normalized automatically before comparison with the given $normalizations bitmask. The method also + * accepts relative URI references and returns true when they are equivalent. This of course assumes they will be + * resolved against the same base URI. If this is not the case, determination of equivalence or difference of + * relative references does not mean anything. + * + * @param UriInterface $uri1 An URI to compare + * @param UriInterface $uri2 An URI to compare + * @param int $normalizations A bitmask of normalizations to apply, see constants + * + * @return bool + * @link https://tools.ietf.org/html/rfc3986#section-6.1 + */ + public static function isEquivalent(UriInterface $uri1, UriInterface $uri2, $normalizations = self::PRESERVING_NORMALIZATIONS) + { + return (string) self::normalize($uri1, $normalizations) === (string) self::normalize($uri2, $normalizations); + } + + private static function capitalizePercentEncoding(UriInterface $uri) + { + $regex = '/(?:%[A-Fa-f0-9]{2})++/'; + + $callback = function (array $match) { + return strtoupper($match[0]); + }; + + return + $uri->withPath( + preg_replace_callback($regex, $callback, $uri->getPath()) + )->withQuery( + preg_replace_callback($regex, $callback, $uri->getQuery()) + ); + } + + private static function decodeUnreservedCharacters(UriInterface $uri) + { + $regex = '/%(?:2D|2E|5F|7E|3[0-9]|[46][1-9A-F]|[57][0-9A])/i'; + + $callback = function (array $match) { + return rawurldecode($match[0]); + }; + + return + $uri->withPath( + preg_replace_callback($regex, $callback, $uri->getPath()) + )->withQuery( + preg_replace_callback($regex, $callback, $uri->getQuery()) + ); + } + + private function __construct() + { + // cannot be instantiated + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/UriResolver.php b/base/vendor/guzzlehttp/psr7/src/UriResolver.php new file mode 100644 index 00000000..c1cb8a27 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/UriResolver.php @@ -0,0 +1,219 @@ +getScheme() != '') { + return $rel->withPath(self::removeDotSegments($rel->getPath())); + } + + if ($rel->getAuthority() != '') { + $targetAuthority = $rel->getAuthority(); + $targetPath = self::removeDotSegments($rel->getPath()); + $targetQuery = $rel->getQuery(); + } else { + $targetAuthority = $base->getAuthority(); + if ($rel->getPath() === '') { + $targetPath = $base->getPath(); + $targetQuery = $rel->getQuery() != '' ? $rel->getQuery() : $base->getQuery(); + } else { + if ($rel->getPath()[0] === '/') { + $targetPath = $rel->getPath(); + } else { + if ($targetAuthority != '' && $base->getPath() === '') { + $targetPath = '/' . $rel->getPath(); + } else { + $lastSlashPos = strrpos($base->getPath(), '/'); + if ($lastSlashPos === false) { + $targetPath = $rel->getPath(); + } else { + $targetPath = substr($base->getPath(), 0, $lastSlashPos + 1) . $rel->getPath(); + } + } + } + $targetPath = self::removeDotSegments($targetPath); + $targetQuery = $rel->getQuery(); + } + } + + return new Uri(Uri::composeComponents( + $base->getScheme(), + $targetAuthority, + $targetPath, + $targetQuery, + $rel->getFragment() + )); + } + + /** + * Returns the target URI as a relative reference from the base URI. + * + * This method is the counterpart to resolve(): + * + * (string) $target === (string) UriResolver::resolve($base, UriResolver::relativize($base, $target)) + * + * One use-case is to use the current request URI as base URI and then generate relative links in your documents + * to reduce the document size or offer self-contained downloadable document archives. + * + * $base = new Uri('http://example.com/a/b/'); + * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/c')); // prints 'c'. + * echo UriResolver::relativize($base, new Uri('http://example.com/a/x/y')); // prints '../x/y'. + * echo UriResolver::relativize($base, new Uri('http://example.com/a/b/?q')); // prints '?q'. + * echo UriResolver::relativize($base, new Uri('http://example.org/a/b/')); // prints '//example.org/a/b/'. + * + * This method also accepts a target that is already relative and will try to relativize it further. Only a + * relative-path reference will be returned as-is. + * + * echo UriResolver::relativize($base, new Uri('/a/b/c')); // prints 'c' as well + * + * @param UriInterface $base Base URI + * @param UriInterface $target Target URI + * + * @return UriInterface The relative URI reference + */ + public static function relativize(UriInterface $base, UriInterface $target) + { + if ($target->getScheme() !== '' && + ($base->getScheme() !== $target->getScheme() || $target->getAuthority() === '' && $base->getAuthority() !== '') + ) { + return $target; + } + + if (Uri::isRelativePathReference($target)) { + // As the target is already highly relative we return it as-is. It would be possible to resolve + // the target with `$target = self::resolve($base, $target);` and then try make it more relative + // by removing a duplicate query. But let's not do that automatically. + return $target; + } + + if ($target->getAuthority() !== '' && $base->getAuthority() !== $target->getAuthority()) { + return $target->withScheme(''); + } + + // We must remove the path before removing the authority because if the path starts with two slashes, the URI + // would turn invalid. And we also cannot set a relative path before removing the authority, as that is also + // invalid. + $emptyPathUri = $target->withScheme('')->withPath('')->withUserInfo('')->withPort(null)->withHost(''); + + if ($base->getPath() !== $target->getPath()) { + return $emptyPathUri->withPath(self::getRelativePath($base, $target)); + } + + if ($base->getQuery() === $target->getQuery()) { + // Only the target fragment is left. And it must be returned even if base and target fragment are the same. + return $emptyPathUri->withQuery(''); + } + + // If the base URI has a query but the target has none, we cannot return an empty path reference as it would + // inherit the base query component when resolving. + if ($target->getQuery() === '') { + $segments = explode('/', $target->getPath()); + $lastSegment = end($segments); + + return $emptyPathUri->withPath($lastSegment === '' ? './' : $lastSegment); + } + + return $emptyPathUri; + } + + private static function getRelativePath(UriInterface $base, UriInterface $target) + { + $sourceSegments = explode('/', $base->getPath()); + $targetSegments = explode('/', $target->getPath()); + array_pop($sourceSegments); + $targetLastSegment = array_pop($targetSegments); + foreach ($sourceSegments as $i => $segment) { + if (isset($targetSegments[$i]) && $segment === $targetSegments[$i]) { + unset($sourceSegments[$i], $targetSegments[$i]); + } else { + break; + } + } + $targetSegments[] = $targetLastSegment; + $relativePath = str_repeat('../', count($sourceSegments)) . implode('/', $targetSegments); + + // A reference to am empty last segment or an empty first sub-segment must be prefixed with "./". + // This also applies to a segment with a colon character (e.g., "file:colon") that cannot be used + // as the first segment of a relative-path reference, as it would be mistaken for a scheme name. + if ('' === $relativePath || false !== strpos(explode('/', $relativePath, 2)[0], ':')) { + $relativePath = "./$relativePath"; + } elseif ('/' === $relativePath[0]) { + if ($base->getAuthority() != '' && $base->getPath() === '') { + // In this case an extra slash is added by resolve() automatically. So we must not add one here. + $relativePath = ".$relativePath"; + } else { + $relativePath = "./$relativePath"; + } + } + + return $relativePath; + } + + private function __construct() + { + // cannot be instantiated + } +} diff --git a/base/vendor/guzzlehttp/psr7/src/functions.php b/base/vendor/guzzlehttp/psr7/src/functions.php new file mode 100644 index 00000000..8e6dafe6 --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/functions.php @@ -0,0 +1,899 @@ +getMethod() . ' ' + . $message->getRequestTarget()) + . ' HTTP/' . $message->getProtocolVersion(); + if (!$message->hasHeader('host')) { + $msg .= "\r\nHost: " . $message->getUri()->getHost(); + } + } elseif ($message instanceof ResponseInterface) { + $msg = 'HTTP/' . $message->getProtocolVersion() . ' ' + . $message->getStatusCode() . ' ' + . $message->getReasonPhrase(); + } else { + throw new \InvalidArgumentException('Unknown message type'); + } + + foreach ($message->getHeaders() as $name => $values) { + $msg .= "\r\n{$name}: " . implode(', ', $values); + } + + return "{$msg}\r\n\r\n" . $message->getBody(); +} + +/** + * Returns a UriInterface for the given value. + * + * This function accepts a string or {@see Psr\Http\Message\UriInterface} and + * returns a UriInterface for the given value. If the value is already a + * `UriInterface`, it is returned as-is. + * + * @param string|UriInterface $uri + * + * @return UriInterface + * @throws \InvalidArgumentException + */ +function uri_for($uri) +{ + if ($uri instanceof UriInterface) { + return $uri; + } elseif (is_string($uri)) { + return new Uri($uri); + } + + throw new \InvalidArgumentException('URI must be a string or UriInterface'); +} + +/** + * Create a new stream based on the input type. + * + * Options is an associative array that can contain the following keys: + * - metadata: Array of custom metadata. + * - size: Size of the stream. + * + * @param resource|string|null|int|float|bool|StreamInterface|callable|\Iterator $resource Entity body data + * @param array $options Additional options + * + * @return StreamInterface + * @throws \InvalidArgumentException if the $resource arg is not valid. + */ +function stream_for($resource = '', array $options = []) +{ + if (is_scalar($resource)) { + $stream = fopen('php://temp', 'r+'); + if ($resource !== '') { + fwrite($stream, $resource); + fseek($stream, 0); + } + return new Stream($stream, $options); + } + + switch (gettype($resource)) { + case 'resource': + return new Stream($resource, $options); + case 'object': + if ($resource instanceof StreamInterface) { + return $resource; + } elseif ($resource instanceof \Iterator) { + return new PumpStream(function () use ($resource) { + if (!$resource->valid()) { + return false; + } + $result = $resource->current(); + $resource->next(); + return $result; + }, $options); + } elseif (method_exists($resource, '__toString')) { + return stream_for((string) $resource, $options); + } + break; + case 'NULL': + return new Stream(fopen('php://temp', 'r+'), $options); + } + + if (is_callable($resource)) { + return new PumpStream($resource, $options); + } + + throw new \InvalidArgumentException('Invalid resource type: ' . gettype($resource)); +} + +/** + * Parse an array of header values containing ";" separated data into an + * array of associative arrays representing the header key value pair + * data of the header. When a parameter does not contain a value, but just + * contains a key, this function will inject a key with a '' string value. + * + * @param string|array $header Header to parse into components. + * + * @return array Returns the parsed header values. + */ +function parse_header($header) +{ + static $trimmed = "\"' \n\t\r"; + $params = $matches = []; + + foreach (normalize_header($header) as $val) { + $part = []; + foreach (preg_split('/;(?=([^"]*"[^"]*")*[^"]*$)/', $val) as $kvp) { + if (preg_match_all('/<[^>]+>|[^=]+/', $kvp, $matches)) { + $m = $matches[0]; + if (isset($m[1])) { + $part[trim($m[0], $trimmed)] = trim($m[1], $trimmed); + } else { + $part[] = trim($m[0], $trimmed); + } + } + } + if ($part) { + $params[] = $part; + } + } + + return $params; +} + +/** + * Converts an array of header values that may contain comma separated + * headers into an array of headers with no comma separated values. + * + * @param string|array $header Header to normalize. + * + * @return array Returns the normalized header field values. + */ +function normalize_header($header) +{ + if (!is_array($header)) { + return array_map('trim', explode(',', $header)); + } + + $result = []; + foreach ($header as $value) { + foreach ((array) $value as $v) { + if (strpos($v, ',') === false) { + $result[] = $v; + continue; + } + foreach (preg_split('/,(?=([^"]*"[^"]*")*[^"]*$)/', $v) as $vv) { + $result[] = trim($vv); + } + } + } + + return $result; +} + +/** + * Clone and modify a request with the given changes. + * + * The changes can be one of: + * - method: (string) Changes the HTTP method. + * - set_headers: (array) Sets the given headers. + * - remove_headers: (array) Remove the given headers. + * - body: (mixed) Sets the given body. + * - uri: (UriInterface) Set the URI. + * - query: (string) Set the query string value of the URI. + * - version: (string) Set the protocol version. + * + * @param RequestInterface $request Request to clone and modify. + * @param array $changes Changes to apply. + * + * @return RequestInterface + */ +function modify_request(RequestInterface $request, array $changes) +{ + if (!$changes) { + return $request; + } + + $headers = $request->getHeaders(); + + if (!isset($changes['uri'])) { + $uri = $request->getUri(); + } else { + // Remove the host header if one is on the URI + if ($host = $changes['uri']->getHost()) { + $changes['set_headers']['Host'] = $host; + + if ($port = $changes['uri']->getPort()) { + $standardPorts = ['http' => 80, 'https' => 443]; + $scheme = $changes['uri']->getScheme(); + if (isset($standardPorts[$scheme]) && $port != $standardPorts[$scheme]) { + $changes['set_headers']['Host'] .= ':'.$port; + } + } + } + $uri = $changes['uri']; + } + + if (!empty($changes['remove_headers'])) { + $headers = _caseless_remove($changes['remove_headers'], $headers); + } + + if (!empty($changes['set_headers'])) { + $headers = _caseless_remove(array_keys($changes['set_headers']), $headers); + $headers = $changes['set_headers'] + $headers; + } + + if (isset($changes['query'])) { + $uri = $uri->withQuery($changes['query']); + } + + if ($request instanceof ServerRequestInterface) { + return (new ServerRequest( + isset($changes['method']) ? $changes['method'] : $request->getMethod(), + $uri, + $headers, + isset($changes['body']) ? $changes['body'] : $request->getBody(), + isset($changes['version']) + ? $changes['version'] + : $request->getProtocolVersion(), + $request->getServerParams() + )) + ->withParsedBody($request->getParsedBody()) + ->withQueryParams($request->getQueryParams()) + ->withCookieParams($request->getCookieParams()) + ->withUploadedFiles($request->getUploadedFiles()); + } + + return new Request( + isset($changes['method']) ? $changes['method'] : $request->getMethod(), + $uri, + $headers, + isset($changes['body']) ? $changes['body'] : $request->getBody(), + isset($changes['version']) + ? $changes['version'] + : $request->getProtocolVersion() + ); +} + +/** + * Attempts to rewind a message body and throws an exception on failure. + * + * The body of the message will only be rewound if a call to `tell()` returns a + * value other than `0`. + * + * @param MessageInterface $message Message to rewind + * + * @throws \RuntimeException + */ +function rewind_body(MessageInterface $message) +{ + $body = $message->getBody(); + + if ($body->tell()) { + $body->rewind(); + } +} + +/** + * Safely opens a PHP stream resource using a filename. + * + * When fopen fails, PHP normally raises a warning. This function adds an + * error handler that checks for errors and throws an exception instead. + * + * @param string $filename File to open + * @param string $mode Mode used to open the file + * + * @return resource + * @throws \RuntimeException if the file cannot be opened + */ +function try_fopen($filename, $mode) +{ + $ex = null; + set_error_handler(function () use ($filename, $mode, &$ex) { + $ex = new \RuntimeException(sprintf( + 'Unable to open %s using mode %s: %s', + $filename, + $mode, + func_get_args()[1] + )); + }); + + $handle = fopen($filename, $mode); + restore_error_handler(); + + if ($ex) { + /** @var $ex \RuntimeException */ + throw $ex; + } + + return $handle; +} + +/** + * Copy the contents of a stream into a string until the given number of + * bytes have been read. + * + * @param StreamInterface $stream Stream to read + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * @return string + * @throws \RuntimeException on error. + */ +function copy_to_string(StreamInterface $stream, $maxLen = -1) +{ + $buffer = ''; + + if ($maxLen === -1) { + while (!$stream->eof()) { + $buf = $stream->read(1048576); + // Using a loose equality here to match on '' and false. + if ($buf == null) { + break; + } + $buffer .= $buf; + } + return $buffer; + } + + $len = 0; + while (!$stream->eof() && $len < $maxLen) { + $buf = $stream->read($maxLen - $len); + // Using a loose equality here to match on '' and false. + if ($buf == null) { + break; + } + $buffer .= $buf; + $len = strlen($buffer); + } + + return $buffer; +} + +/** + * Copy the contents of a stream into another stream until the given number + * of bytes have been read. + * + * @param StreamInterface $source Stream to read from + * @param StreamInterface $dest Stream to write to + * @param int $maxLen Maximum number of bytes to read. Pass -1 + * to read the entire stream. + * + * @throws \RuntimeException on error. + */ +function copy_to_stream( + StreamInterface $source, + StreamInterface $dest, + $maxLen = -1 +) { + $bufferSize = 8192; + + if ($maxLen === -1) { + while (!$source->eof()) { + if (!$dest->write($source->read($bufferSize))) { + break; + } + } + } else { + $remaining = $maxLen; + while ($remaining > 0 && !$source->eof()) { + $buf = $source->read(min($bufferSize, $remaining)); + $len = strlen($buf); + if (!$len) { + break; + } + $remaining -= $len; + $dest->write($buf); + } + } +} + +/** + * Calculate a hash of a Stream + * + * @param StreamInterface $stream Stream to calculate the hash for + * @param string $algo Hash algorithm (e.g. md5, crc32, etc) + * @param bool $rawOutput Whether or not to use raw output + * + * @return string Returns the hash of the stream + * @throws \RuntimeException on error. + */ +function hash( + StreamInterface $stream, + $algo, + $rawOutput = false +) { + $pos = $stream->tell(); + + if ($pos > 0) { + $stream->rewind(); + } + + $ctx = hash_init($algo); + while (!$stream->eof()) { + hash_update($ctx, $stream->read(1048576)); + } + + $out = hash_final($ctx, (bool) $rawOutput); + $stream->seek($pos); + + return $out; +} + +/** + * Read a line from the stream up to the maximum allowed buffer length + * + * @param StreamInterface $stream Stream to read from + * @param int $maxLength Maximum buffer length + * + * @return string + */ +function readline(StreamInterface $stream, $maxLength = null) +{ + $buffer = ''; + $size = 0; + + while (!$stream->eof()) { + // Using a loose equality here to match on '' and false. + if (null == ($byte = $stream->read(1))) { + return $buffer; + } + $buffer .= $byte; + // Break when a new line is found or the max length - 1 is reached + if ($byte === "\n" || ++$size === $maxLength - 1) { + break; + } + } + + return $buffer; +} + +/** + * Parses a request message string into a request object. + * + * @param string $message Request message string. + * + * @return Request + */ +function parse_request($message) +{ + $data = _parse_message($message); + $matches = []; + if (!preg_match('/^[\S]+\s+([a-zA-Z]+:\/\/|\/).*/', $data['start-line'], $matches)) { + throw new \InvalidArgumentException('Invalid request string'); + } + $parts = explode(' ', $data['start-line'], 3); + $version = isset($parts[2]) ? explode('/', $parts[2])[1] : '1.1'; + + $request = new Request( + $parts[0], + $matches[1] === '/' ? _parse_request_uri($parts[1], $data['headers']) : $parts[1], + $data['headers'], + $data['body'], + $version + ); + + return $matches[1] === '/' ? $request : $request->withRequestTarget($parts[1]); +} + +/** + * Parses a response message string into a response object. + * + * @param string $message Response message string. + * + * @return Response + */ +function parse_response($message) +{ + $data = _parse_message($message); + // According to https://tools.ietf.org/html/rfc7230#section-3.1.2 the space + // between status-code and reason-phrase is required. But browsers accept + // responses without space and reason as well. + if (!preg_match('/^HTTP\/.* [0-9]{3}( .*|$)/', $data['start-line'])) { + throw new \InvalidArgumentException('Invalid response string: ' . $data['start-line']); + } + $parts = explode(' ', $data['start-line'], 3); + + return new Response( + $parts[1], + $data['headers'], + $data['body'], + explode('/', $parts[0])[1], + isset($parts[2]) ? $parts[2] : null + ); +} + +/** + * Parse a query string into an associative array. + * + * If multiple values are found for the same key, the value of that key + * value pair will become an array. This function does not parse nested + * PHP style arrays into an associative array (e.g., foo[a]=1&foo[b]=2 will + * be parsed into ['foo[a]' => '1', 'foo[b]' => '2']). + * + * @param string $str Query string to parse + * @param int|bool $urlEncoding How the query string is encoded + * + * @return array + */ +function parse_query($str, $urlEncoding = true) +{ + $result = []; + + if ($str === '') { + return $result; + } + + if ($urlEncoding === true) { + $decoder = function ($value) { + return rawurldecode(str_replace('+', ' ', $value)); + }; + } elseif ($urlEncoding === PHP_QUERY_RFC3986) { + $decoder = 'rawurldecode'; + } elseif ($urlEncoding === PHP_QUERY_RFC1738) { + $decoder = 'urldecode'; + } else { + $decoder = function ($str) { return $str; }; + } + + foreach (explode('&', $str) as $kvp) { + $parts = explode('=', $kvp, 2); + $key = $decoder($parts[0]); + $value = isset($parts[1]) ? $decoder($parts[1]) : null; + if (!isset($result[$key])) { + $result[$key] = $value; + } else { + if (!is_array($result[$key])) { + $result[$key] = [$result[$key]]; + } + $result[$key][] = $value; + } + } + + return $result; +} + +/** + * Build a query string from an array of key value pairs. + * + * This function can use the return value of parse_query() to build a query + * string. This function does not modify the provided keys when an array is + * encountered (like http_build_query would). + * + * @param array $params Query string parameters. + * @param int|false $encoding Set to false to not encode, PHP_QUERY_RFC3986 + * to encode using RFC3986, or PHP_QUERY_RFC1738 + * to encode using RFC1738. + * @return string + */ +function build_query(array $params, $encoding = PHP_QUERY_RFC3986) +{ + if (!$params) { + return ''; + } + + if ($encoding === false) { + $encoder = function ($str) { return $str; }; + } elseif ($encoding === PHP_QUERY_RFC3986) { + $encoder = 'rawurlencode'; + } elseif ($encoding === PHP_QUERY_RFC1738) { + $encoder = 'urlencode'; + } else { + throw new \InvalidArgumentException('Invalid type'); + } + + $qs = ''; + foreach ($params as $k => $v) { + $k = $encoder($k); + if (!is_array($v)) { + $qs .= $k; + if ($v !== null) { + $qs .= '=' . $encoder($v); + } + $qs .= '&'; + } else { + foreach ($v as $vv) { + $qs .= $k; + if ($vv !== null) { + $qs .= '=' . $encoder($vv); + } + $qs .= '&'; + } + } + } + + return $qs ? (string) substr($qs, 0, -1) : ''; +} + +/** + * Determines the mimetype of a file by looking at its extension. + * + * @param $filename + * + * @return null|string + */ +function mimetype_from_filename($filename) +{ + return mimetype_from_extension(pathinfo($filename, PATHINFO_EXTENSION)); +} + +/** + * Maps a file extensions to a mimetype. + * + * @param $extension string The file extension. + * + * @return string|null + * @link http://svn.apache.org/repos/asf/httpd/httpd/branches/1.3.x/conf/mime.types + */ +function mimetype_from_extension($extension) +{ + static $mimetypes = [ + '3gp' => 'video/3gpp', + '7z' => 'application/x-7z-compressed', + 'aac' => 'audio/x-aac', + 'ai' => 'application/postscript', + 'aif' => 'audio/x-aiff', + 'asc' => 'text/plain', + 'asf' => 'video/x-ms-asf', + 'atom' => 'application/atom+xml', + 'avi' => 'video/x-msvideo', + 'bmp' => 'image/bmp', + 'bz2' => 'application/x-bzip2', + 'cer' => 'application/pkix-cert', + 'crl' => 'application/pkix-crl', + 'crt' => 'application/x-x509-ca-cert', + 'css' => 'text/css', + 'csv' => 'text/csv', + 'cu' => 'application/cu-seeme', + 'deb' => 'application/x-debian-package', + 'doc' => 'application/msword', + 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'dvi' => 'application/x-dvi', + 'eot' => 'application/vnd.ms-fontobject', + 'eps' => 'application/postscript', + 'epub' => 'application/epub+zip', + 'etx' => 'text/x-setext', + 'flac' => 'audio/flac', + 'flv' => 'video/x-flv', + 'gif' => 'image/gif', + 'gz' => 'application/gzip', + 'htm' => 'text/html', + 'html' => 'text/html', + 'ico' => 'image/x-icon', + 'ics' => 'text/calendar', + 'ini' => 'text/plain', + 'iso' => 'application/x-iso9660-image', + 'jar' => 'application/java-archive', + 'jpe' => 'image/jpeg', + 'jpeg' => 'image/jpeg', + 'jpg' => 'image/jpeg', + 'js' => 'text/javascript', + 'json' => 'application/json', + 'latex' => 'application/x-latex', + 'log' => 'text/plain', + 'm4a' => 'audio/mp4', + 'm4v' => 'video/mp4', + 'mid' => 'audio/midi', + 'midi' => 'audio/midi', + 'mov' => 'video/quicktime', + 'mkv' => 'video/x-matroska', + 'mp3' => 'audio/mpeg', + 'mp4' => 'video/mp4', + 'mp4a' => 'audio/mp4', + 'mp4v' => 'video/mp4', + 'mpe' => 'video/mpeg', + 'mpeg' => 'video/mpeg', + 'mpg' => 'video/mpeg', + 'mpg4' => 'video/mp4', + 'oga' => 'audio/ogg', + 'ogg' => 'audio/ogg', + 'ogv' => 'video/ogg', + 'ogx' => 'application/ogg', + 'pbm' => 'image/x-portable-bitmap', + 'pdf' => 'application/pdf', + 'pgm' => 'image/x-portable-graymap', + 'png' => 'image/png', + 'pnm' => 'image/x-portable-anymap', + 'ppm' => 'image/x-portable-pixmap', + 'ppt' => 'application/vnd.ms-powerpoint', + 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'ps' => 'application/postscript', + 'qt' => 'video/quicktime', + 'rar' => 'application/x-rar-compressed', + 'ras' => 'image/x-cmu-raster', + 'rss' => 'application/rss+xml', + 'rtf' => 'application/rtf', + 'sgm' => 'text/sgml', + 'sgml' => 'text/sgml', + 'svg' => 'image/svg+xml', + 'swf' => 'application/x-shockwave-flash', + 'tar' => 'application/x-tar', + 'tif' => 'image/tiff', + 'tiff' => 'image/tiff', + 'torrent' => 'application/x-bittorrent', + 'ttf' => 'application/x-font-ttf', + 'txt' => 'text/plain', + 'wav' => 'audio/x-wav', + 'webm' => 'video/webm', + 'webp' => 'image/webp', + 'wma' => 'audio/x-ms-wma', + 'wmv' => 'video/x-ms-wmv', + 'woff' => 'application/x-font-woff', + 'wsdl' => 'application/wsdl+xml', + 'xbm' => 'image/x-xbitmap', + 'xls' => 'application/vnd.ms-excel', + 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'xml' => 'application/xml', + 'xpm' => 'image/x-xpixmap', + 'xwd' => 'image/x-xwindowdump', + 'yaml' => 'text/yaml', + 'yml' => 'text/yaml', + 'zip' => 'application/zip', + ]; + + $extension = strtolower($extension); + + return isset($mimetypes[$extension]) + ? $mimetypes[$extension] + : null; +} + +/** + * Parses an HTTP message into an associative array. + * + * The array contains the "start-line" key containing the start line of + * the message, "headers" key containing an associative array of header + * array values, and a "body" key containing the body of the message. + * + * @param string $message HTTP request or response to parse. + * + * @return array + * @internal + */ +function _parse_message($message) +{ + if (!$message) { + throw new \InvalidArgumentException('Invalid message'); + } + + $message = ltrim($message, "\r\n"); + + $messageParts = preg_split("/\r?\n\r?\n/", $message, 2); + + if ($messageParts === false || count($messageParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing header delimiter'); + } + + list($rawHeaders, $body) = $messageParts; + $rawHeaders .= "\r\n"; // Put back the delimiter we split previously + $headerParts = preg_split("/\r?\n/", $rawHeaders, 2); + + if ($headerParts === false || count($headerParts) !== 2) { + throw new \InvalidArgumentException('Invalid message: Missing status line'); + } + + list($startLine, $rawHeaders) = $headerParts; + + if (preg_match("/(?:^HTTP\/|^[A-Z]+ \S+ HTTP\/)(\d+(?:\.\d+)?)/i", $startLine, $matches) && $matches[1] === '1.0') { + // Header folding is deprecated for HTTP/1.1, but allowed in HTTP/1.0 + $rawHeaders = preg_replace(Rfc7230::HEADER_FOLD_REGEX, ' ', $rawHeaders); + } + + /** @var array[] $headerLines */ + $count = preg_match_all(Rfc7230::HEADER_REGEX, $rawHeaders, $headerLines, PREG_SET_ORDER); + + // If these aren't the same, then one line didn't match and there's an invalid header. + if ($count !== substr_count($rawHeaders, "\n")) { + // Folding is deprecated, see https://tools.ietf.org/html/rfc7230#section-3.2.4 + if (preg_match(Rfc7230::HEADER_FOLD_REGEX, $rawHeaders)) { + throw new \InvalidArgumentException('Invalid header syntax: Obsolete line folding'); + } + + throw new \InvalidArgumentException('Invalid header syntax'); + } + + $headers = []; + + foreach ($headerLines as $headerLine) { + $headers[$headerLine[1]][] = $headerLine[2]; + } + + return [ + 'start-line' => $startLine, + 'headers' => $headers, + 'body' => $body, + ]; +} + +/** + * Constructs a URI for an HTTP request message. + * + * @param string $path Path from the start-line + * @param array $headers Array of headers (each value an array). + * + * @return string + * @internal + */ +function _parse_request_uri($path, array $headers) +{ + $hostKey = array_filter(array_keys($headers), function ($k) { + return strtolower($k) === 'host'; + }); + + // If no host is found, then a full URI cannot be constructed. + if (!$hostKey) { + return $path; + } + + $host = $headers[reset($hostKey)][0]; + $scheme = substr($host, -4) === ':443' ? 'https' : 'http'; + + return $scheme . '://' . $host . '/' . ltrim($path, '/'); +} + +/** + * Get a short summary of the message body + * + * Will return `null` if the response is not printable. + * + * @param MessageInterface $message The message to get the body summary + * @param int $truncateAt The maximum allowed size of the summary + * + * @return null|string + */ +function get_message_body_summary(MessageInterface $message, $truncateAt = 120) +{ + $body = $message->getBody(); + + if (!$body->isSeekable() || !$body->isReadable()) { + return null; + } + + $size = $body->getSize(); + + if ($size === 0) { + return null; + } + + $summary = $body->read($truncateAt); + $body->rewind(); + + if ($size > $truncateAt) { + $summary .= ' (truncated...)'; + } + + // Matches any printable character, including unicode characters: + // letters, marks, numbers, punctuation, spacing, and separators. + if (preg_match('/[^\pL\pM\pN\pP\pS\pZ\n\r\t]/', $summary)) { + return null; + } + + return $summary; +} + +/** @internal */ +function _caseless_remove($keys, array $data) +{ + $result = []; + + foreach ($keys as &$key) { + $key = strtolower($key); + } + + foreach ($data as $k => $v) { + if (!in_array(strtolower($k), $keys)) { + $result[$k] = $v; + } + } + + return $result; +} diff --git a/base/vendor/guzzlehttp/psr7/src/functions_include.php b/base/vendor/guzzlehttp/psr7/src/functions_include.php new file mode 100644 index 00000000..96a4a83a --- /dev/null +++ b/base/vendor/guzzlehttp/psr7/src/functions_include.php @@ -0,0 +1,6 @@ +SMTPDebug = 2; // Enable verbose debug output - $mail->isSMTP(); // Set mailer to use SMTP - $mail->Host = 'smtp1.example.com;smtp2.example.com'; // Specify main and backup SMTP servers - $mail->SMTPAuth = true; // Enable SMTP authentication - $mail->Username = 'user@example.com'; // SMTP username - $mail->Password = 'secret'; // SMTP password - $mail->SMTPSecure = 'tls'; // Enable TLS encryption, `ssl` also accepted - $mail->Port = 587; // TCP port to connect to + $mail->SMTPDebug = SMTP::DEBUG_SERVER; // Enable verbose debug output + $mail->isSMTP(); // Send using SMTP + $mail->Host = 'smtp1.example.com'; // Set the SMTP server to send through + $mail->SMTPAuth = true; // Enable SMTP authentication + $mail->Username = 'user@example.com'; // SMTP username + $mail->Password = 'secret'; // SMTP password + $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted + $mail->Port = 587; // TCP port to connect to //Recipients $mail->setFrom('from@example.com', 'Mailer'); @@ -112,11 +113,11 @@ try { $mail->addCC('cc@example.com'); $mail->addBCC('bcc@example.com'); - //Attachments + // Attachments $mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments $mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name - //Content + // Content $mail->isHTML(true); // Set email format to HTML $mail->Subject = 'Here is the subject'; $mail->Body = 'This is the HTML message body in bold!'; @@ -125,16 +126,18 @@ try { $mail->send(); echo 'Message has been sent'; } catch (Exception $e) { - echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo; + echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}"; } ``` You'll find plenty more to play with in the [examples](https://github.com/PHPMailer/PHPMailer/tree/master/examples) folder. +If you are re-using the instance (e.g. when sending to a mailing list), you may need to clear the recipient list to avoid sending duplicate messages. See [the mailing list example](https://github.com/PHPMailer/PHPMailer/blob/master/examples/mailing_list.phps) for further guidance. + That's it. You should now be ready to use PHPMailer! ## Localization -PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find numerous (48 at the time of writing!) translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: +PHPMailer defaults to English, but in the [language](https://github.com/PHPMailer/PHPMailer/tree/master/language/) folder you'll find many translations for PHPMailer error messages that you may encounter. Their filenames contain [ISO 639-1](http://en.wikipedia.org/wiki/ISO_639-1) language code for the translations, for example `fr` for French. To specify a language, you need to tell PHPMailer which one to use, like this: ```php // To load the French version diff --git a/base/vendor/phpmailer/phpmailer/VERSION b/base/vendor/phpmailer/phpmailer/VERSION index 41bd15e2..1879c1be 100644 --- a/base/vendor/phpmailer/phpmailer/VERSION +++ b/base/vendor/phpmailer/phpmailer/VERSION @@ -1 +1 @@ -6.0.7 \ No newline at end of file +6.1.4 \ No newline at end of file diff --git a/base/vendor/phpmailer/phpmailer/composer.json b/base/vendor/phpmailer/phpmailer/composer.json index ee4e890d..fd0695c8 100644 --- a/base/vendor/phpmailer/phpmailer/composer.json +++ b/base/vendor/phpmailer/phpmailer/composer.json @@ -26,12 +26,8 @@ }, "require-dev": { "friendsofphp/php-cs-fixer": "^2.2", - "phpdocumentor/phpdocumentor": "2.*", "phpunit/phpunit": "^4.8 || ^5.7", - "zendframework/zend-serializer": "2.7.*", - "doctrine/annotations": "1.2.*", - "zendframework/zend-eventmanager": "3.0.*", - "zendframework/zend-i18n": "2.7.3" + "doctrine/annotations": "^1.2" }, "suggest": { "psr/log": "For optional PSR-3 debug logging", @@ -51,5 +47,5 @@ "PHPMailer\\Test\\": "test/" } }, - "license": "LGPL-2.1" + "license": "LGPL-2.1-only" } diff --git a/base/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php b/base/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php new file mode 100644 index 00000000..3c42d78e --- /dev/null +++ b/base/vendor/phpmailer/phpmailer/language/phpmailer.lang-af.php @@ -0,0 +1,25 @@ + + * @author Marcus Bointon */ class Exception extends \Exception { diff --git a/base/vendor/phpmailer/phpmailer/src/OAuth.php b/base/vendor/phpmailer/phpmailer/src/OAuth.php index 0bce7e34..0271963c 100644 --- a/base/vendor/phpmailer/phpmailer/src/OAuth.php +++ b/base/vendor/phpmailer/phpmailer/src/OAuth.php @@ -123,7 +123,7 @@ protected function getToken() public function getOauth64() { // Get a new token if it's not available or has expired - if (null === $this->oauthToken or $this->oauthToken->hasExpired()) { + if (null === $this->oauthToken || $this->oauthToken->hasExpired()) { $this->oauthToken = $this->getToken(); } diff --git a/base/vendor/phpmailer/phpmailer/src/PHPMailer.php b/base/vendor/phpmailer/phpmailer/src/PHPMailer.php index 52104924..127f2b79 100644 --- a/base/vendor/phpmailer/phpmailer/src/PHPMailer.php +++ b/base/vendor/phpmailer/phpmailer/src/PHPMailer.php @@ -3,13 +3,13 @@ * PHPMailer - PHP email creation and transport class. * PHP Version 5.5. * - * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project + * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project * * @author Marcus Bointon (Synchro/coolbru) * @author Jim Jagielski (jimjag) * @author Andy Prevost (codeworxtech) * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2017 Marcus Bointon + * @copyright 2012 - 2019 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 @@ -23,13 +23,14 @@ /** * 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) + * @author Marcus Bointon (Synchro/coolbru) + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) + * @author Brent R. Matzelle (original founder) */ class PHPMailer { + const CHARSET_ASCII = 'us-ascii'; const CHARSET_ISO88591 = 'iso-8859-1'; const CHARSET_UTF8 = 'utf-8'; @@ -46,6 +47,18 @@ class PHPMailer const ENCODING_BINARY = 'binary'; const ENCODING_QUOTED_PRINTABLE = 'quoted-printable'; + const ENCRYPTION_STARTTLS = 'tls'; + const ENCRYPTION_SMTPS = 'ssl'; + + const ICAL_METHOD_REQUEST = 'REQUEST'; + const ICAL_METHOD_PUBLISH = 'PUBLISH'; + const ICAL_METHOD_REPLY = 'REPLY'; + const ICAL_METHOD_ADD = 'ADD'; + const ICAL_METHOD_CANCEL = 'CANCEL'; + const ICAL_METHOD_REFRESH = 'REFRESH'; + const ICAL_METHOD_COUNTER = 'COUNTER'; + const ICAL_METHOD_DECLINECOUNTER = 'DECLINECOUNTER'; + /** * Email priority. * Options: null (default), 1 = High, 3 = Normal, 5 = low. @@ -145,6 +158,22 @@ class PHPMailer */ public $Ical = ''; + /** + * Value-array of "method" in Contenttype header "text/calendar" + * + * @var string[] + */ + protected static $IcalMethods = [ + self::ICAL_METHOD_REQUEST, + self::ICAL_METHOD_PUBLISH, + self::ICAL_METHOD_REPLY, + self::ICAL_METHOD_ADD, + self::ICAL_METHOD_CANCEL, + self::ICAL_METHOD_REFRESH, + self::ICAL_METHOD_COUNTER, + self::ICAL_METHOD_DECLINECOUNTER, + ]; + /** * The complete compiled MIME message body. * @@ -212,6 +241,8 @@ class PHPMailer * $_SERVER['SERVER_NAME'], gethostname(), php_uname('n'), or the value * 'localhost.localdomain'. * + * @see PHPMailer::$Helo + * * @var string */ public $Hostname = ''; @@ -258,7 +289,7 @@ class PHPMailer public $Port = 25; /** - * The SMTP HELO of the message. + * The SMTP HELO/EHLO name used for the SMTP connection. * Default is $Hostname. If $Hostname is empty, PHPMailer attempts to find * one with the same method described above for $Hostname. * @@ -270,7 +301,7 @@ class PHPMailer /** * What kind of encryption to use on the SMTP connection. - * Options: '', 'ssl' or 'tls'. + * Options: '', static::ENCRYPTION_STARTTLS, or static::ENCRYPTION_SMTPS. * * @var string */ @@ -340,15 +371,28 @@ class PHPMailer */ public $Timeout = 300; + /** + * Comma separated list of DSN notifications + * 'NEVER' under no circumstances a DSN must be returned to the sender. + * If you use NEVER all other notifications will be ignored. + * 'SUCCESS' will notify you when your mail has arrived at its destination. + * 'FAILURE' will arrive if an error occurred during delivery. + * 'DELAY' will notify you if there is an unusual delay in delivery, but the actual + * delivery's outcome (success or failure) is not yet decided. + * + * @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY + */ + public $dsn = ''; + /** * 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. + * * SMTP::DEBUG_OFF: No output + * * SMTP::DEBUG_CLIENT: Client messages + * * SMTP::DEBUG_SERVER: Client and server messages + * * SMTP::DEBUG_CONNECTION: As SERVER plus connection status + * * SMTP::DEBUG_LOWLEVEL: Noisy, low-level data output, rarely needed * * @see SMTP::$do_debug * @@ -514,9 +558,9 @@ class PHPMailer /** * What to put in the X-Mailer header. - * Options: An empty string for PHPMailer default, whitespace for none, or a string to use. + * Options: An empty string for PHPMailer default, whitespace/null for none, or a string to use. * - * @var string + * @var string|null */ public $XMailer = ''; @@ -701,7 +745,7 @@ class PHPMailer * * @var string */ - const VERSION = '6.0.7'; + const VERSION = '6.1.4'; /** * Error severity: message only, continue processing. @@ -731,6 +775,16 @@ class PHPMailer */ protected static $LE = "\r\n"; + /** + * The maximum line length supported by mail(). + * + * Background: mail() will sometimes corrupt messages + * with headers headers longer than 65 chars, see #818. + * + * @var int + */ + const MAIL_MAX_LINE_LENGTH = 63; + /** * The maximum line length allowed by RFC 2822 section 2.1.1. * @@ -794,7 +848,7 @@ private function mailPassthru($to, $subject, $body, $header, $params) $subject = $this->encodeHeader($this->secureHeader($subject)); } //Calling mail() with null params breaks - if (!$this->UseSendmailOptions or null === $params) { + if (!$this->UseSendmailOptions || null === $params) { $result = @mail($to, $subject, $body, $header); } else { $result = @mail($to, $subject, $body, $header, $params); @@ -824,7 +878,7 @@ protected function edebug($str) return; } //Avoid clash with built-in function names - if (!in_array($this->Debugoutput, ['error_log', 'html', 'echo']) and is_callable($this->Debugoutput)) { + if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { call_user_func($this->Debugoutput, $str, $this->SMTPDebug); return; @@ -845,12 +899,12 @@ protected function edebug($str) case 'echo': default: //Normalize line breaks - $str = preg_replace('/\r\n|\r/ms', "\n", $str); + $str = preg_replace('/\r\n|\r/m', "\n", $str); echo gmdate('Y-m-d H:i:s'), "\t", //Trim trailing space trim( - //Indent for readability, except for trailing break + //Indent for readability, except for trailing break str_replace( "\n", "\n \t ", @@ -927,6 +981,8 @@ public function isQmail() * @param string $address The email address to send to * @param string $name * + * @throws Exception + * * @return bool true on success, false if address already used or invalid in some way */ public function addAddress($address, $name = '') @@ -940,6 +996,8 @@ public function addAddress($address, $name = '') * @param string $address The email address to send to * @param string $name * + * @throws Exception + * * @return bool true on success, false if address already used or invalid in some way */ public function addCC($address, $name = '') @@ -953,6 +1011,8 @@ public function addCC($address, $name = '') * @param string $address The email address to send to * @param string $name * + * @throws Exception + * * @return bool true on success, false if address already used or invalid in some way */ public function addBCC($address, $name = '') @@ -966,6 +1026,8 @@ public function addBCC($address, $name = '') * @param string $address The email address to reply to * @param string $name * + * @throws Exception + * * @return bool true on success, false if address already used or invalid in some way */ public function addReplyTo($address, $name = '') @@ -994,10 +1056,12 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) $pos = strrpos($address, '@'); if (false === $pos) { // At-sign is missing. - $error_message = sprintf('%s (%s): %s', + $error_message = sprintf( + '%s (%s): %s', $this->lang('invalid_address'), $kind, - $address); + $address + ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -1008,19 +1072,17 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) } $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 (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) { + 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; + } elseif (!array_key_exists($address, $this->ReplyToQueue)) { + $this->ReplyToQueue[$address] = $params; - return true; - } + return true; } return false; @@ -1045,9 +1107,11 @@ protected function addOrEnqueueAnAddress($kind, $address, $name) protected function addAnAddress($kind, $address, $name = '') { if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) { - $error_message = sprintf('%s: %s', + $error_message = sprintf( + '%s: %s', $this->lang('Invalid recipient kind'), - $kind); + $kind + ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -1057,10 +1121,12 @@ protected function addAnAddress($kind, $address, $name = '') return false; } if (!static::validateAddress($address)) { - $error_message = sprintf('%s (%s): %s', + $error_message = sprintf( + '%s (%s): %s', $this->lang('invalid_address'), $kind, - $address); + $address + ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -1069,19 +1135,17 @@ protected function addAnAddress($kind, $address, $name = '') return false; } - if ('Reply-To' != $kind) { + 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]; + } elseif (!array_key_exists(strtolower($address), $this->ReplyTo)) { + $this->ReplyTo[strtolower($address)] = [$address, $name]; - return true; - } + return true; } return false; @@ -1093,7 +1157,7 @@ protected function addAnAddress($kind, $address, $name = '') * 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 + * @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 @@ -1103,17 +1167,17 @@ protected function addAnAddress($kind, $address, $name = '') public static function parseAddresses($addrstr, $useimap = true) { $addresses = []; - if ($useimap and function_exists('imap_rfc822_parse_adrlist')) { + if ($useimap && 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, - ]; - } + if (('.SYNTAX-ERROR.' !== $address->host) && static::validateAddress( + $address->mailbox . '@' . $address->host + )) { + $addresses[] = [ + 'name' => (property_exists($address, 'personal') ? $address->personal : ''), + 'address' => $address->mailbox . '@' . $address->host, + ]; } } } else { @@ -1163,12 +1227,15 @@ public function setFrom($address, $name = '', $auto = true) $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', + if ((false === $pos) + || ((!$this->has8bitChars(substr($address, ++$pos)) || !static::idnSupported()) + && !static::validateAddress($address)) + ) { + $error_message = sprintf( + '%s (From): %s', $this->lang('invalid_address'), - $address); + $address + ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -1179,10 +1246,8 @@ public function setFrom($address, $name = '', $auto = true) } $this->From = $address; $this->FromName = $name; - if ($auto) { - if (empty($this->Sender)) { - $this->Sender = $address; - } + if ($auto && empty($this->Sender)) { + $this->Sender = $address; } return true; @@ -1231,10 +1296,10 @@ public static function validateAddress($address, $patternselect = null) $patternselect = static::$validator; } if (is_callable($patternselect)) { - return call_user_func($patternselect, $address); + return $patternselect($address); } //Reject line breaks in addresses; it's valid RFC5322, but not RFC5321 - if (strpos($address, "\n") !== false or strpos($address, "\r") !== false) { + if (strpos($address, "\n") !== false || strpos($address, "\r") !== false) { return false; } switch ($patternselect) { @@ -1281,7 +1346,7 @@ public static function validateAddress($address, $patternselect = null) ); case 'php': default: - return (bool) filter_var($address, FILTER_VALIDATE_EMAIL); + return filter_var($address, FILTER_VALIDATE_EMAIL) !== false; } } @@ -1293,7 +1358,7 @@ public static function validateAddress($address, $patternselect = null) */ public static function idnSupported() { - return function_exists('idn_to_ascii') and function_exists('mb_convert_encoding'); + return function_exists('idn_to_ascii') && function_exists('mb_convert_encoding'); } /** @@ -1304,7 +1369,7 @@ public static function idnSupported() * - 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 + * @see PHPMailer::$CharSet * * @param string $address The email address to convert * @@ -1314,17 +1379,23 @@ 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 + if (!empty($this->CharSet) && + false !== $pos && + static::idnSupported() ) { $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)) { + if ($this->has8bitChars($domain) && @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 (defined('INTL_IDNA_VARIANT_UTS46')) { + $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_UTS46); + } elseif (defined('INTL_IDNA_VARIANT_2003')) { + $punycode = idn_to_ascii($domain, $errorcode, INTL_IDNA_VARIANT_2003); + } else { + $punycode = idn_to_ascii($domain, $errorcode); + } if (false !== $punycode) { return substr($address, 0, $pos) . $punycode; } @@ -1370,8 +1441,8 @@ public function send() */ public function preSend() { - if ('smtp' == $this->Mailer or - ('mail' == $this->Mailer and stripos(PHP_OS, 'WIN') === 0) + if ('smtp' === $this->Mailer + || ('mail' === $this->Mailer && stripos(PHP_OS, 'WIN') === 0) ) { //SMTP mandates RFC-compliant line endings //and it's also used with mail() on Windows @@ -1381,13 +1452,11 @@ public function preSend() 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', '<'))) + if ('mail' === $this->Mailer + && ((PHP_VERSION_ID >= 70000 && PHP_VERSION_ID < 70017) + || (PHP_VERSION_ID >= 70100 && PHP_VERSION_ID < 70103)) + && ini_get('mail.add_x_header') === '1' + && stripos(PHP_OS, 'WIN') === 0 ) { trigger_error( 'Your version of PHP is affected by a bug that may result in corrupted messages.' . @@ -1418,10 +1487,12 @@ public function preSend() } $this->$address_kind = $this->punyencodeAddress($this->$address_kind); if (!static::validateAddress($this->$address_kind)) { - $error_message = sprintf('%s (%s): %s', + $error_message = sprintf( + '%s (%s): %s', $this->lang('invalid_address'), $address_kind, - $this->$address_kind); + $this->$address_kind + ); $this->setError($error_message); $this->edebug($error_message); if ($this->exceptions) { @@ -1439,7 +1510,7 @@ public function preSend() $this->setMessageType(); // Refuse to send an empty message unless we are specifically allowing it - if (!$this->AllowEmpty and empty($this->Body)) { + if (!$this->AllowEmpty && empty($this->Body)) { throw new Exception($this->lang('empty_message'), self::STOP_CRITICAL); } @@ -1455,7 +1526,7 @@ public function preSend() // To capture the complete message when using mail(), create // an extra header list which createHeader() doesn't fold in - if ('mail' == $this->Mailer) { + if ('mail' === $this->Mailer) { if (count($this->to) > 0) { $this->mailHeader .= $this->addrAppend('To', $this->to); } else { @@ -1469,11 +1540,11 @@ public function preSend() // 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 static::isPermittedPath($this->DKIM_private) - and file_exists($this->DKIM_private) + && !empty($this->DKIM_selector) + && (!empty($this->DKIM_private_string) + || (!empty($this->DKIM_private) + && static::isPermittedPath($this->DKIM_private) + && file_exists($this->DKIM_private) ) ) ) { @@ -1538,7 +1609,7 @@ public function postSend() /** * Send mail using the $Sendmail program. * - * @see PHPMailer::$Sendmail + * @see PHPMailer::$Sendmail * * @param string $header The message headers * @param string $body The message body @@ -1549,19 +1620,19 @@ public function postSend() */ protected function sendmailSend($header, $body) { + $header = rtrim($header, "\r\n ") . static::$LE . static::$LE; + // 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) { + if (!empty($this->Sender) && self::isShellSafe($this->Sender)) { + if ('qmail' === $this->Mailer) { $sendmailFmt = '%s -f%s'; } else { $sendmailFmt = '%s -oi -f%s -t'; } + } elseif ('qmail' === $this->Mailer) { + $sendmailFmt = '%s'; } else { - if ('qmail' == $this->Mailer) { - $sendmailFmt = '%s'; - } else { - $sendmailFmt = '%s -oi -t'; - } + $sendmailFmt = '%s -oi -t'; } $sendmail = sprintf($sendmailFmt, escapeshellcmd($this->Sendmail), $this->Sender); @@ -1577,7 +1648,7 @@ protected function sendmailSend($header, $body) fwrite($mail, $body); $result = pclose($mail); $this->doCallback( - ($result == 0), + ($result === 0), [$toAddr], $this->cc, $this->bcc, @@ -1599,7 +1670,7 @@ protected function sendmailSend($header, $body) fwrite($mail, $body); $result = pclose($mail); $this->doCallback( - ($result == 0), + ($result === 0), $this->to, $this->cc, $this->bcc, @@ -1630,7 +1701,7 @@ protected static function isShellSafe($string) { // Future-proof if (escapeshellcmd($string) !== $string - or !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) + || !in_array(escapeshellarg($string), ["'$string'", "\"$string\""]) ) { return false; } @@ -1668,7 +1739,7 @@ protected static function isPermittedPath($path) /** * Send mail using the PHP mail() function. * - * @see http://www.php.net/manual/en/book.mail.php + * @see http://www.php.net/manual/en/book.mail.php * * @param string $header The message headers * @param string $body The message body @@ -1679,6 +1750,8 @@ protected static function isPermittedPath($path) */ protected function mailSend($header, $body) { + $header = rtrim($header, "\r\n ") . static::$LE . static::$LE; + $toArr = []; foreach ($this->to as $toaddr) { $toArr[] = $this->addrFormat($toaddr); @@ -1687,24 +1760,22 @@ protected function mailSend($header, $body) $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); - } + //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 (!empty($this->Sender) && static::validateAddress($this->Sender) && self::isShellSafe($this->Sender)) { + $params = sprintf('-f%s', $this->Sender); } - if (!empty($this->Sender) and static::validateAddress($this->Sender)) { + if (!empty($this->Sender) && 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) { + if ($this->SingleTo && 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, []); @@ -1742,8 +1813,6 @@ public function getSMTPInstance() /** * Provide an instance to use for SMTP operations. * - * @param SMTP $smtp - * * @return SMTP */ public function setSMTPInstance(SMTP $smtp) @@ -1770,12 +1839,13 @@ public function setSMTPInstance(SMTP $smtp) */ protected function smtpSend($header, $body) { + $header = rtrim($header, "\r\n ") . static::$LE . static::$LE; $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) { + if ('' === $this->Sender) { $smtp_from = $this->From; } else { $smtp_from = $this->Sender; @@ -1789,7 +1859,7 @@ protected function smtpSend($header, $body) // 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])) { + if (!$this->smtp->recipient($to[0], $this->dsn)) { $error = $this->smtp->getError(); $bad_rcpt[] = ['to' => $to[0], 'error' => $error['detail']]; $isSent = false; @@ -1802,7 +1872,7 @@ protected function smtpSend($header, $body) } // Only send the DATA command if we have viable recipients - if ((count($this->all_recipients) > count($bad_rcpt)) and !$this->smtp->data($header . $body)) { + if ((count($this->all_recipients) > count($bad_rcpt)) && !$this->smtp->data($header . $body)) { throw new Exception($this->lang('data_not_accepted'), self::STOP_CRITICAL); } @@ -1834,10 +1904,7 @@ protected function smtpSend($header, $body) foreach ($bad_rcpt as $bad) { $errstr .= $bad['to'] . ': ' . $bad['error']; } - throw new Exception( - $this->lang('recipients_failed') . $errstr, - self::STOP_CONTINUE - ); + throw new Exception($this->lang('recipients_failed') . $errstr, self::STOP_CONTINUE); } return true; @@ -1881,50 +1948,49 @@ public function smtpConnect($options = null) foreach ($hosts as $hostentry) { $hostinfo = []; if (!preg_match( - '/^((ssl|tls):\/\/)*([a-zA-Z0-9\.-]*|\[[a-fA-F0-9:]+\]):?([0-9]*)$/', + '/^(?:(ssl|tls):\/\/)?(.+?)(?::(\d+))?$/', trim($hostentry), $hostinfo )) { - static::edebug($this->lang('connect_host') . ' ' . $hostentry); + $this->edebug($this->lang('invalid_hostentry') . ' ' . trim($hostentry)); // Not a valid host entry continue; } - // $hostinfo[2]: optional ssl or tls prefix - // $hostinfo[3]: the hostname - // $hostinfo[4]: optional port number + // $hostinfo[1]: optional ssl or tls prefix + // $hostinfo[2]: the hostname + // $hostinfo[3]: 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); + if (!static::isValidHost($hostinfo[2])) { + $this->edebug($this->lang('invalid_host') . ' ' . $hostinfo[2]); continue; } $prefix = ''; $secure = $this->SMTPSecure; - $tls = ('tls' == $this->SMTPSecure); - if ('ssl' == $hostinfo[2] or ('' == $hostinfo[2] and 'ssl' == $this->SMTPSecure)) { + $tls = (static::ENCRYPTION_STARTTLS === $this->SMTPSecure); + if ('ssl' === $hostinfo[1] || ('' === $hostinfo[1] && static::ENCRYPTION_SMTPS === $this->SMTPSecure)) { $prefix = 'ssl://'; $tls = false; // Can't have SSL and TLS at the same time - $secure = 'ssl'; - } elseif ('tls' == $hostinfo[2]) { + $secure = static::ENCRYPTION_SMTPS; + } elseif ('tls' === $hostinfo[1]) { $tls = true; // tls doesn't use a prefix - $secure = 'tls'; + $secure = static::ENCRYPTION_STARTTLS; } //Do we need the OpenSSL extension? $sslext = defined('OPENSSL_ALGO_SHA256'); - if ('tls' === $secure or 'ssl' === $secure) { + if (static::ENCRYPTION_STARTTLS === $secure || static::ENCRYPTION_SMTPS === $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]; + $host = $hostinfo[2]; $port = $this->Port; - $tport = (int) $hostinfo[4]; - if ($tport > 0 and $tport < 65536) { - $port = $tport; + if (array_key_exists(3, $hostinfo) && is_numeric($hostinfo[3]) && $hostinfo[3] > 0 && $hostinfo[3] < 65536) { + $port = (int) $hostinfo[3]; } if ($this->smtp->connect($prefix . $host, $port, $this->Timeout, $options)) { try { @@ -1939,7 +2005,7 @@ public function smtpConnect($options = null) // * 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')) { + if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) { $tls = true; } if ($tls) { @@ -1949,16 +2015,13 @@ public function smtpConnect($options = null) // 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')); - } + if ($this->SMTPAuth && !$this->smtp->authenticate( + $this->Username, + $this->Password, + $this->AuthType, + $this->oauth + )) { + throw new Exception($this->lang('authenticate')); } return true; @@ -1973,7 +2036,7 @@ public function smtpConnect($options = null) // 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) { + if ($this->exceptions && null !== $lastexception) { throw $lastexception; } @@ -1985,11 +2048,9 @@ public function smtpConnect($options = null) */ public function smtpClose() { - if (null !== $this->smtp) { - if ($this->smtp->connected()) { - $this->smtp->quit(); - $this->smtp->close(); - } + if ((null !== $this->smtp) && $this->smtp->connected()) { + $this->smtp->quit(); + $this->smtp->close(); } } @@ -2033,6 +2094,8 @@ public function setLanguage($langcode = 'en', $lang_path = '') 'from_failed' => 'The following From address failed: ', 'instantiate' => 'Could not instantiate mail function.', 'invalid_address' => 'Invalid address: ', + 'invalid_hostentry' => 'Invalid hostentry: ', + 'invalid_host' => 'Invalid host: ', '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: ', @@ -2053,7 +2116,7 @@ public function setLanguage($langcode = 'en', $lang_path = '') $foundlang = true; $lang_file = $lang_path . 'phpmailer.lang-' . $langcode . '.php'; // There is no English translation file - if ('en' != $langcode) { + if ('en' !== $langcode) { // Make sure language file path is readable if (!static::isPermittedPath($lang_file) || !file_exists($lang_file)) { $foundlang = false; @@ -2113,9 +2176,8 @@ public function addrFormat($addr) return $this->secureHeader($addr[0]); } - return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . ' <' . $this->secureHeader( - $addr[0] - ) . '>'; + return $this->encodeHeader($this->secureHeader($addr[1]), 'phrase') . + ' <' . $this->secureHeader($addr[0]) . '>'; } /** @@ -2145,7 +2207,7 @@ public function wrapText($message, $length, $qp_mode = false) $message = static::normalizeBreaks($message); //Remove a trailing line break - if (substr($message, -$lelen) == static::$LE) { + if (substr($message, -$lelen) === static::$LE) { $message = substr($message, 0, -$lelen); } @@ -2158,16 +2220,16 @@ public function wrapText($message, $length, $qp_mode = false) $buf = ''; $firstword = true; foreach ($words as $word) { - if ($qp_mode and (strlen($word) > $length)) { + if ($qp_mode && (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)) { + } elseif ('=' === substr($word, $len - 1, 1)) { --$len; - } elseif ('=' == substr($word, $len - 2, 1)) { + } elseif ('=' === substr($word, $len - 2, 1)) { $len -= 2; } $part = substr($word, 0, $len); @@ -2179,22 +2241,22 @@ public function wrapText($message, $length, $qp_mode = false) } $buf = ''; } - while (strlen($word) > 0) { + while ($word !== '') { if ($length <= 0) { break; } $len = $length; if ($is_utf8) { $len = $this->utf8CharBoundary($word, $len); - } elseif ('=' == substr($word, $len - 1, 1)) { + } elseif ('=' === substr($word, $len - 1, 1)) { --$len; - } elseif ('=' == substr($word, $len - 2, 1)) { + } elseif ('=' === substr($word, $len - 2, 1)) { $len -= 2; } $part = substr($word, 0, $len); - $word = substr($word, $len); + $word = (string) substr($word, $len); - if (strlen($word) > 0) { + if ($word !== '') { $message .= $part . sprintf('=%s', static::$LE); } else { $buf = $part; @@ -2207,7 +2269,7 @@ public function wrapText($message, $length, $qp_mode = false) } $buf .= $word; - if (strlen($buf) > $length and '' != $buf_o) { + if ('' !== $buf_o && strlen($buf) > $length) { $message .= $buf_o . $soft_break; $buf = $word; } @@ -2302,23 +2364,21 @@ public function createHeader() { $result = ''; - $result .= $this->headerLine('Date', '' == $this->MessageDate ? self::rfcDate() : $this->MessageDate); + $result .= $this->headerLine('Date', '' === $this->MessageDate ? self::rfcDate() : $this->MessageDate); // To be created automatically by mail() if ($this->SingleTo) { - if ('mail' != $this->Mailer) { + 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:;'); + } elseif (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]]); @@ -2330,9 +2390,9 @@ public function createHeader() // sendmail and mail() extract Bcc from the header before sending if (( - 'sendmail' == $this->Mailer or 'qmail' == $this->Mailer or 'mail' == $this->Mailer + 'sendmail' === $this->Mailer || 'qmail' === $this->Mailer || 'mail' === $this->Mailer ) - and count($this->bcc) > 0 + && count($this->bcc) > 0 ) { $result .= $this->addrAppend('Bcc', $this->bcc); } @@ -2342,13 +2402,13 @@ public function createHeader() } // mail() sets the subject itself - if ('mail' != $this->Mailer) { + 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)) { + if ('' !== $this->MessageID && preg_match('/^<.*@.*>$/', $this->MessageID)) { $this->lastMessageID = $this->MessageID; } else { $this->lastMessageID = sprintf('<%s@%s>', $this->uniqueid, $this->serverHostname()); @@ -2357,7 +2417,7 @@ public function createHeader() if (null !== $this->Priority) { $result .= $this->headerLine('X-Priority', $this->Priority); } - if ('' == $this->XMailer) { + if ('' === $this->XMailer) { $result .= $this->headerLine( 'X-Mailer', 'PHPMailer ' . self::VERSION . ' (https://github.com/PHPMailer/PHPMailer)' @@ -2369,7 +2429,7 @@ public function createHeader() } } - if ('' != $this->ConfirmReadingTo) { + if ('' !== $this->ConfirmReadingTo) { $result .= $this->headerLine('Disposition-Notification-To', '<' . $this->ConfirmReadingTo . '>'); } @@ -2400,19 +2460,19 @@ public function getMailMIME() switch ($this->message_type) { case 'inline': $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); - $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"'); + $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); break; case 'attach': case 'inline_attach': case 'alt_attach': case 'alt_inline_attach': $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_MIXED . ';'); - $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"'); + $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); break; case 'alt': case 'alt_inline': $result .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';'); - $result .= $this->textLine("\tboundary=\"" . $this->boundary[1] . '"'); + $result .= $this->textLine(' boundary="' . $this->boundary[1] . '"'); break; default: // Catches case 'plain': and case '': @@ -2421,10 +2481,10 @@ public function getMailMIME() break; } // RFC1341 part 5 says 7bit is assumed if not specified - if (static::ENCODING_7BIT != $this->Encoding) { + if (static::ENCODING_7BIT !== $this->Encoding) { // RFC 2045 section 6.4 says multipart MIME parts may only use 7bit, 8bit or binary CTE if ($ismultipart) { - if (static::ENCODING_8BIT == $this->Encoding) { + if (static::ENCODING_8BIT === $this->Encoding) { $result .= $this->headerLine('Content-Transfer-Encoding', static::ENCODING_8BIT); } // The only remaining alternatives are quoted-printable and base64, which are both 7bit compatible @@ -2433,8 +2493,8 @@ public function getMailMIME() } } - if ('mail' != $this->Mailer) { - $result .= static::$LE; + if ('mail' !== $this->Mailer) { +// $result .= static::$LE; } return $result; @@ -2462,11 +2522,19 @@ public function getSentMIMEMessage() protected function generateId() { $len = 32; //32 bytes = 256 bits + $bytes = ''; if (function_exists('random_bytes')) { - $bytes = random_bytes($len); + try { + $bytes = random_bytes($len); + } catch (\Exception $e) { + //Do nothing + } } elseif (function_exists('openssl_random_pseudo_bytes')) { + /** @noinspection CryptographicallySecureRandomnessInspection */ $bytes = openssl_random_pseudo_bytes($len); - } else { + } + if ($bytes === '') { + //We failed to produce a proper random string, so make do. //Use a hash to force the length to the same as the other methods $bytes = hash('sha256', uniqid((string) mt_rand(), true), true); } @@ -2501,28 +2569,28 @@ public function createBody() $bodyEncoding = $this->Encoding; $bodyCharSet = $this->CharSet; //Can we do a 7-bit downgrade? - if (static::ENCODING_8BIT == $bodyEncoding and !$this->has8bitChars($this->Body)) { + if (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) { $bodyEncoding = static::ENCODING_7BIT; //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit - $bodyCharSet = 'us-ascii'; + $bodyCharSet = static::CHARSET_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 (static::ENCODING_BASE64 != $this->Encoding and static::hasLineLongerThanMax($this->Body)) { + if (static::ENCODING_BASE64 !== $this->Encoding && static::hasLineLongerThanMax($this->Body)) { $bodyEncoding = static::ENCODING_QUOTED_PRINTABLE; } $altBodyEncoding = $this->Encoding; $altBodyCharSet = $this->CharSet; //Can we do a 7-bit downgrade? - if (static::ENCODING_8BIT == $altBodyEncoding and !$this->has8bitChars($this->AltBody)) { + if (static::ENCODING_8BIT === $altBodyEncoding && !$this->has8bitChars($this->AltBody)) { $altBodyEncoding = static::ENCODING_7BIT; //All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit - $altBodyCharSet = 'us-ascii'; + $altBodyCharSet = static::CHARSET_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 (static::ENCODING_BASE64 != $altBodyEncoding and static::hasLineLongerThanMax($this->AltBody)) { + if (static::ENCODING_BASE64 !== $altBodyEncoding && static::hasLineLongerThanMax($this->AltBody)) { $altBodyEncoding = static::ENCODING_QUOTED_PRINTABLE; } //Use this as a preamble in all multipart message types @@ -2546,7 +2614,8 @@ public function createBody() $body .= $mimepre; $body .= $this->textLine('--' . $this->boundary[1]); $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";'); + $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"'); $body .= static::$LE; $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, '', $bodyEncoding); $body .= $this->encodeString($this->Body, $bodyEncoding); @@ -2557,14 +2626,36 @@ public function createBody() break; case 'alt': $body .= $mimepre; - $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, static::CONTENT_TYPE_PLAINTEXT, $altBodyEncoding); + $body .= $this->getBoundary( + $this->boundary[1], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); $body .= $this->encodeString($this->AltBody, $altBodyEncoding); $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[1], $bodyCharSet, static::CONTENT_TYPE_TEXT_HTML, $bodyEncoding); + $body .= $this->getBoundary( + $this->boundary[1], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); $body .= $this->encodeString($this->Body, $bodyEncoding); $body .= static::$LE; if (!empty($this->Ical)) { - $body .= $this->getBoundary($this->boundary[1], '', static::CONTENT_TYPE_TEXT_CALENDAR . '; method=REQUEST', ''); + $method = static::ICAL_METHOD_REQUEST; + foreach (static::$IcalMethods as $imethod) { + if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) { + $method = $imethod; + break; + } + } + $body .= $this->getBoundary( + $this->boundary[1], + '', + static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method, + '' + ); $body .= $this->encodeString($this->Ical, $this->Encoding); $body .= static::$LE; } @@ -2572,14 +2663,25 @@ public function createBody() break; case 'alt_inline': $body .= $mimepre; - $body .= $this->getBoundary($this->boundary[1], $altBodyCharSet, static::CONTENT_TYPE_PLAINTEXT, $altBodyEncoding); + $body .= $this->getBoundary( + $this->boundary[1], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); $body .= $this->encodeString($this->AltBody, $altBodyEncoding); $body .= static::$LE; $body .= $this->textLine('--' . $this->boundary[1]); $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '";'); + $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"'); $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, static::CONTENT_TYPE_TEXT_HTML, $bodyEncoding); + $body .= $this->getBoundary( + $this->boundary[2], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); $body .= $this->encodeString($this->Body, $bodyEncoding); $body .= static::$LE; $body .= $this->attachAll('inline', $this->boundary[2]); @@ -2590,16 +2692,38 @@ public function createBody() $body .= $mimepre; $body .= $this->textLine('--' . $this->boundary[1]); $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"'); $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, static::CONTENT_TYPE_PLAINTEXT, $altBodyEncoding); + $body .= $this->getBoundary( + $this->boundary[2], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); $body .= $this->encodeString($this->AltBody, $altBodyEncoding); $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $bodyCharSet, static::CONTENT_TYPE_TEXT_HTML, $bodyEncoding); + $body .= $this->getBoundary( + $this->boundary[2], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); $body .= $this->encodeString($this->Body, $bodyEncoding); $body .= static::$LE; if (!empty($this->Ical)) { - $body .= $this->getBoundary($this->boundary[2], '', static::CONTENT_TYPE_TEXT_CALENDAR . '; method=REQUEST', ''); + $method = static::ICAL_METHOD_REQUEST; + foreach (static::$IcalMethods as $imethod) { + if (stripos($this->Ical, 'METHOD:' . $imethod) !== false) { + $method = $imethod; + break; + } + } + $body .= $this->getBoundary( + $this->boundary[2], + '', + static::CONTENT_TYPE_TEXT_CALENDAR . '; method=' . $method, + '' + ); $body .= $this->encodeString($this->Ical, $this->Encoding); } $body .= $this->endBoundary($this->boundary[2]); @@ -2610,16 +2734,27 @@ public function createBody() $body .= $mimepre; $body .= $this->textLine('--' . $this->boundary[1]); $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_ALTERNATIVE . ';'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[2] . '"'); + $body .= $this->textLine(' boundary="' . $this->boundary[2] . '"'); $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[2], $altBodyCharSet, static::CONTENT_TYPE_PLAINTEXT, $altBodyEncoding); + $body .= $this->getBoundary( + $this->boundary[2], + $altBodyCharSet, + static::CONTENT_TYPE_PLAINTEXT, + $altBodyEncoding + ); $body .= $this->encodeString($this->AltBody, $altBodyEncoding); $body .= static::$LE; $body .= $this->textLine('--' . $this->boundary[2]); $body .= $this->headerLine('Content-Type', static::CONTENT_TYPE_MULTIPART_RELATED . ';'); - $body .= $this->textLine("\tboundary=\"" . $this->boundary[3] . '"'); + $body .= $this->textLine(' boundary="' . $this->boundary[3] . '";'); + $body .= $this->textLine(' type="' . static::CONTENT_TYPE_TEXT_HTML . '"'); $body .= static::$LE; - $body .= $this->getBoundary($this->boundary[3], $bodyCharSet, static::CONTENT_TYPE_TEXT_HTML, $bodyEncoding); + $body .= $this->getBoundary( + $this->boundary[3], + $bodyCharSet, + static::CONTENT_TYPE_TEXT_HTML, + $bodyEncoding + ); $body .= $this->encodeString($this->Body, $bodyEncoding); $body .= static::$LE; $body .= $this->attachAll('inline', $this->boundary[3]); @@ -2646,12 +2781,11 @@ public function createBody() 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'); + + $file = tempnam(sys_get_temp_dir(), 'srcsign'); + $signed = tempnam(sys_get_temp_dir(), 'mailsign'); + file_put_contents($file, $body); + //Workaround for PHP bug https://bugs.php.net/bug.php?id=69197 if (empty($this->sign_extracerts_file)) { $sign = @openssl_pkcs7_sign( @@ -2672,6 +2806,7 @@ public function createBody() $this->sign_extracerts_file ); } + @unlink($file); if ($sign) { $body = file_get_contents($signed); @@ -2708,20 +2843,20 @@ public function createBody() protected function getBoundary($boundary, $charSet, $contentType, $encoding) { $result = ''; - if ('' == $charSet) { + if ('' === $charSet) { $charSet = $this->CharSet; } - if ('' == $contentType) { + if ('' === $contentType) { $contentType = $this->ContentType; } - if ('' == $encoding) { + 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 (static::ENCODING_7BIT != $encoding) { + if (static::ENCODING_7BIT !== $encoding) { $result .= $this->headerLine('Content-Transfer-Encoding', $encoding); } $result .= static::$LE; @@ -2758,7 +2893,7 @@ protected function setMessageType() $type[] = 'attach'; } $this->message_type = implode('_', $type); - if ('' == $this->message_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'; } @@ -2806,23 +2941,32 @@ public function textLine($value) * * @return bool */ - public function addAttachment($path, $name = '', $encoding = self::ENCODING_BASE64, $type = '', $disposition = 'attachment') - { + public function addAttachment( + $path, + $name = '', + $encoding = self::ENCODING_BASE64, + $type = '', + $disposition = 'attachment' + ) { try { if (!static::isPermittedPath($path) || !@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) { + if ('' === $type) { $type = static::filenameToType($path); } - $filename = basename($path); - if ('' == $name) { + $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME); + if ('' === $name) { $name = $filename; } + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } + $this->attachment[] = [ 0 => $path, 1 => $filename, @@ -2863,6 +3007,8 @@ public function getAttachments() * @param string $disposition_type * @param string $boundary * + * @throws Exception + * * @return string */ protected function attachAll($disposition_type, $boundary) @@ -2875,7 +3021,7 @@ protected function attachAll($disposition_type, $boundary) // Add all attachments foreach ($this->attachment as $attachment) { // Check if it is a valid disposition_filter - if ($attachment[6] == $disposition_type) { + if ($attachment[6] === $disposition_type) { // Check for string attachment $string = ''; $path = ''; @@ -2887,7 +3033,7 @@ protected function attachAll($disposition_type, $boundary) } $inclhash = hash('sha256', serialize($attachment)); - if (in_array($inclhash, $incl)) { + if (in_array($inclhash, $incl, true)) { continue; } $incl[] = $inclhash; @@ -2896,7 +3042,7 @@ protected function attachAll($disposition_type, $boundary) $type = $attachment[4]; $disposition = $attachment[6]; $cid = $attachment[7]; - if ('inline' == $disposition and array_key_exists($cid, $cidUniq)) { + if ('inline' === $disposition && array_key_exists($cid, $cidUniq)) { continue; } $cidUniq[$cid] = true; @@ -2918,42 +3064,41 @@ protected function attachAll($disposition_type, $boundary) ); } // RFC1341 part 5 says 7bit is assumed if not specified - if (static::ENCODING_7BIT != $encoding) { + if (static::ENCODING_7BIT !== $encoding) { $mime[] = sprintf('Content-Transfer-Encoding: %s%s', $encoding, static::$LE); } - if (!empty($cid)) { - $mime[] = sprintf('Content-ID: <%s>%s', $cid, static::$LE); + //Only set Content-IDs on inline attachments + if ((string) $cid !== '' && $disposition === 'inline') { + $mime[] = 'Content-ID: <' . $this->encodeHeader($this->secureHeader($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))) { + if (!empty($disposition)) { $encoded_name = $this->encodeHeader($this->secureHeader($name)); - if (preg_match('/[ \(\)<>@,;:\\"\/\[\]\?=]/', $encoded_name)) { + if (preg_match('/[ ()<>@,;:"\/\[\]?=]/', $encoded_name)) { $mime[] = sprintf( 'Content-Disposition: %s; filename="%s"%s', $disposition, $encoded_name, static::$LE . static::$LE ); + } elseif (!empty($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 - ); - } + $mime[] = sprintf( + 'Content-Disposition: %s%s', + $disposition, + static::$LE . static::$LE + ); } } else { $mime[] = static::$LE; @@ -2984,8 +3129,6 @@ protected function attachAll($disposition_type, $boundary) * @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 = self::ENCODING_BASE64) @@ -3015,6 +3158,8 @@ protected function encodeFile($path, $encoding = self::ENCODING_BASE64) * @param string $str The text to encode * @param string $encoding The encoding to use; one of 'base64', '7bit', '8bit', 'binary', 'quoted-printable' * + * @throws Exception + * * @return string */ public function encodeString($str, $encoding = self::ENCODING_BASE64) @@ -3032,7 +3177,7 @@ public function encodeString($str, $encoding = self::ENCODING_BASE64) case static::ENCODING_8BIT: $encoded = static::normalizeBreaks($str); // Make sure it ends with a line break - if (substr($encoded, -(strlen(static::$LE))) != static::$LE) { + if (substr($encoded, -(strlen(static::$LE))) !== static::$LE) { $encoded .= static::$LE; } break; @@ -3044,6 +3189,9 @@ public function encodeString($str, $encoding = self::ENCODING_BASE64) break; default: $this->setError($this->lang('encoding') . $encoding); + if ($this->exceptions) { + throw new Exception($this->lang('encoding') . $encoding); + } break; } @@ -3068,7 +3216,7 @@ public function encodeHeader($str, $position = 'text') 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)) { + if (($str === $encoded) && !preg_match('/[^A-Za-z0-9!#$%&\'*+\/=?^_`{|}~ -]/', $str)) { return $encoded; } @@ -3086,51 +3234,57 @@ public function encodeHeader($str, $position = 'text') 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 ($this->has8bitChars($str)) { + $charset = $this->CharSet; + } else { + $charset = static::CHARSET_ASCII; + } + + // Q/B encoding adds 8 chars and the charset ("` =??[QB]??=`"). + $overhead = 8 + strlen($charset); + + if ('mail' === $this->Mailer) { + $maxlen = static::MAIL_MAX_LINE_LENGTH - $overhead; + } else { + $maxlen = static::MAX_LINE_LENGTH - $overhead; + } + + // Select the encoding that produces the shortest output and/or prevents corruption. if ($matchcount > strlen($str) / 3) { - // More than a third of the content will need encoding, so B encoding will be most efficient + // More than 1/3 of the content needs encoding, use B-encode. $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 + // Less than 1/3 of the content needs 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); + // No encoding needed, but value exceeds max line length, use Q-encode to prevent corruption. + $encoding = 'Q'; } else { - //No reformatting needed - return $str; + // No reformatting needed + $encoding = false; + } + + switch ($encoding) { + case 'B': + 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', ' =?' . $charset . "?$encoding?\\1?=", $encoded); + break; + case 'Q': + $encoded = $this->encodeQ($str, $position); + $encoded = $this->wrapText($encoded, $maxlen, true); + $encoded = str_replace('=' . static::$LE, "\n", trim($encoded)); + $encoded = preg_replace('/^(.*)$/m', ' =?' . $charset . "?$encoding?\\1?=", $encoded); + break; + default: + return $str; } return trim(static::normalizeBreaks($encoded)); @@ -3194,6 +3348,7 @@ public function base64EncodeWrapMB($str, $linebreak = null) // Base64 has a 4:3 ratio $avgLength = floor($length * $ratio * .75); + $offset = 0; for ($i = 0; $i < $mb_length; $i += $offset) { $lookBack = 0; do { @@ -3254,7 +3409,6 @@ public function encodeQ($str, $position = '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; } @@ -3262,7 +3416,7 @@ public function encodeQ($str, $position = 'text') 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]); + $eqkey = array_search('=', $matches[0], true); if (false !== $eqkey) { unset($matches[0][$eqkey]); array_unshift($matches[0], '='); @@ -3286,6 +3440,10 @@ public function encodeQ($str, $position = 'text') * @param string $encoding File encoding (see $Encoding) * @param string $type File extension (MIME) type * @param string $disposition Disposition to use + * + * @throws Exception + * + * @return bool True on successfully adding an attachment */ public function addStringAttachment( $string, @@ -3294,21 +3452,38 @@ public function addStringAttachment( $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, - ]; + try { + // If a MIME type is not specified, try to work it out from the file name + if ('' === $type) { + $type = static::filenameToType($filename); + } + + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } + + // Append to $attachment array + $this->attachment[] = [ + 0 => $string, + 1 => $filename, + 2 => static::mb_pathinfo($filename, PATHINFO_BASENAME), + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => $disposition, + 7 => 0, + ]; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } + + return true; } /** @@ -3328,37 +3503,57 @@ public function addStringAttachment( * @param string $type File MIME type * @param string $disposition Disposition to use * + * @throws Exception + * * @return bool True on successfully adding an attachment */ - public function addEmbeddedImage($path, $cid, $name = '', $encoding = self::ENCODING_BASE64, $type = '', $disposition = 'inline') - { - if (!static::isPermittedPath($path) || !@is_file($path)) { - $this->setError($this->lang('file_access') . $path); + public function addEmbeddedImage( + $path, + $cid, + $name = '', + $encoding = self::ENCODING_BASE64, + $type = '', + $disposition = 'inline' + ) { + try { + if (!static::isPermittedPath($path) || !@is_file($path)) { + throw new Exception($this->lang('file_access') . $path, self::STOP_CONTINUE); + } - return false; - } + // If a MIME type is not specified, try to work it out from the file name + if ('' === $type) { + $type = static::filenameToType($path); + } - // If a MIME type is not specified, try to work it out from the file name - if ('' == $type) { - $type = static::filenameToType($path); - } + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } - $filename = basename($path); - if ('' == $name) { - $name = $filename; - } + $filename = (string) static::mb_pathinfo($path, PATHINFO_BASENAME); + 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, - ]; + // Append to $attachment array + $this->attachment[] = [ + 0 => $path, + 1 => $filename, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => false, // isStringAttachment + 6 => $disposition, + 7 => $cid, + ]; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } return true; } @@ -3378,6 +3573,8 @@ public function addEmbeddedImage($path, $cid, $name = '', $encoding = self::ENCO * @param string $type MIME type - will be used in preference to any automatically derived type * @param string $disposition Disposition to use * + * @throws Exception + * * @return bool True on successfully adding an attachment */ public function addStringEmbeddedImage( @@ -3388,26 +3585,62 @@ public function addStringEmbeddedImage( $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, - ]; + try { + // If a MIME type is not specified, try to work it out from the name + if ('' === $type && !empty($name)) { + $type = static::filenameToType($name); + } + + if (!$this->validateEncoding($encoding)) { + throw new Exception($this->lang('encoding') . $encoding); + } + + // Append to $attachment array + $this->attachment[] = [ + 0 => $string, + 1 => $name, + 2 => $name, + 3 => $encoding, + 4 => $type, + 5 => true, // isStringAttachment + 6 => $disposition, + 7 => $cid, + ]; + } catch (Exception $exc) { + $this->setError($exc->getMessage()); + $this->edebug($exc->getMessage()); + if ($this->exceptions) { + throw $exc; + } + + return false; + } return true; } + /** + * Validate encodings. + * + * @param string $encoding + * + * @return bool + */ + protected function validateEncoding($encoding) + { + return in_array( + $encoding, + [ + self::ENCODING_7BIT, + self::ENCODING_QUOTED_PRINTABLE, + self::ENCODING_BASE64, + self::ENCODING_8BIT, + self::ENCODING_BINARY, + ], + true + ); + } + /** * Check if an embedded attachment is present with this cid. * @@ -3418,7 +3651,7 @@ public function addStringEmbeddedImage( protected function cidExists($cid) { foreach ($this->attachment as $attachment) { - if ('inline' == $attachment[6] and $cid == $attachment[7]) { + if ('inline' === $attachment[6] && $cid === $attachment[7]) { return true; } } @@ -3434,7 +3667,7 @@ protected function cidExists($cid) public function inlineImageExists() { foreach ($this->attachment as $attachment) { - if ('inline' == $attachment[6]) { + if ('inline' === $attachment[6]) { return true; } } @@ -3450,7 +3683,7 @@ public function inlineImageExists() public function attachmentExists() { foreach ($this->attachment as $attachment) { - if ('attachment' == $attachment[6]) { + if ('attachment' === $attachment[6]) { return true; } } @@ -3477,8 +3710,8 @@ public function clearQueuedAddresses($kind) { $this->RecipientsQueue = array_filter( $this->RecipientsQueue, - function ($params) use ($kind) { - return $params[0] != $kind; + static function ($params) use ($kind) { + return $params[0] !== $kind; } ); } @@ -3564,7 +3797,7 @@ public function clearCustomHeaders() protected function setError($msg) { ++$this->error_count; - if ('smtp' == $this->Mailer and null !== $this->smtp) { + if ('smtp' === $this->Mailer && null !== $this->smtp) { $lasterror = $this->smtp->getError(); if (!empty($lasterror['error'])) { $msg .= $this->lang('smtp_error') . $lasterror['error']; @@ -3607,9 +3840,9 @@ protected function serverHostname() $result = ''; if (!empty($this->Hostname)) { $result = $this->Hostname; - } elseif (isset($_SERVER) and array_key_exists('SERVER_NAME', $_SERVER)) { + } elseif (isset($_SERVER) && array_key_exists('SERVER_NAME', $_SERVER)) { $result = $_SERVER['SERVER_NAME']; - } elseif (function_exists('gethostname') and gethostname() !== false) { + } elseif (function_exists('gethostname') && gethostname() !== false) { $result = gethostname(); } elseif (php_uname('n') !== false) { $result = php_uname('n'); @@ -3633,22 +3866,23 @@ public static function isValidHost($host) { //Simple syntax limits if (empty($host) - or !is_string($host) - or strlen($host) > 256 + || !is_string($host) + || strlen($host) > 256 + || !preg_match('/^([a-zA-Z\d.-]*|\[[a-fA-F\d:]+])$/', $host) ) { 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 (strlen($host) > 2 && substr($host, 0, 1) === '[' && substr($host, -1, 1) === ']') { + return filter_var(substr($host, 1, -1), FILTER_VALIDATE_IP, FILTER_FLAG_IPV6) !== false; } //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); + return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false; } - if (filter_var('http://' . $host, FILTER_VALIDATE_URL)) { + if (filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false) { //Is it a syntactically valid hostname? return true; } @@ -3666,11 +3900,11 @@ public static function isValidHost($host) protected function lang($key) { if (count($this->language) < 1) { - $this->setLanguage('en'); // set the default language + $this->setLanguage(); // set the default language } if (array_key_exists($key, $this->language)) { - if ('smtp_connect_failed' == $key) { + 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. @@ -3736,15 +3970,17 @@ public function getCustomHeaders() * @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() + * or your own custom converter @return string $message The transformed message Body + * + * @throws Exception * - * @return string $message The transformed message Body + * @see PHPMailer::html2text() */ public function msgHTML($message, $basedir = '', $advanced = false) { - preg_match_all('/(src|background)=["\'](.*)["\']/Ui', $message, $images); + preg_match_all('/(? 1 && '/' != substr($basedir, -1)) { + if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) { // Ensure $basedir has a trailing / $basedir .= '/'; } @@ -3752,20 +3988,26 @@ public function msgHTML($message, $basedir = '', $advanced = false) // 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 static::ENCODING_BASE64 == $match[2]) { + if (count($match) === 4 && static::ENCODING_BASE64 === $match[2]) { $data = base64_decode($match[3]); - } elseif ('' == $match[2]) { + } 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 + //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 + $cid = substr(hash('sha256', $data), 0, 32) . '@phpmailer.0'; // RFC2392 S 2 if (!$this->cidExists($cid)) { - $this->addStringEmbeddedImage($data, $cid, 'embed' . $imgindex, static::ENCODING_BASE64, $match[1]); + $this->addStringEmbeddedImage( + $data, + $cid, + 'embed' . $imgindex, + static::ENCODING_BASE64, + $match[1] + ); } $message = str_replace( $images[0][$imgindex], @@ -3777,22 +4019,23 @@ public function msgHTML($message, $basedir = '', $advanced = false) 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) + && (strpos($url, '..') === false) // Do not change urls that are already inline images - and 0 !== strpos($url, 'cid:') + && 0 !== strpos($url, 'cid:') // Do not change absolute URLs, including anonymous protocol - and !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url) + && !preg_match('#^[a-z][a-z0-9+.-]*:?//#i', $url) ) { - $filename = basename($url); + $filename = static::mb_pathinfo($url, PATHINFO_BASENAME); $directory = dirname($url); - if ('.' == $directory) { + if ('.' === $directory) { $directory = ''; } - $cid = hash('sha256', $url) . '@phpmailer.0'; // RFC2392 S 2 - if (strlen($basedir) > 1 and '/' != substr($basedir, -1)) { + // RFC2392 S 2 + $cid = substr(hash('sha256', $url), 0, 32) . '@phpmailer.0'; + if (strlen($basedir) > 1 && '/' !== substr($basedir, -1)) { $basedir .= '/'; } - if (strlen($directory) > 1 and '/' != substr($directory, -1)) { + if (strlen($directory) > 1 && '/' !== substr($directory, -1)) { $directory .= '/'; } if ($this->addEmbeddedImage( @@ -3812,7 +4055,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) } } } - $this->isHTML(true); + $this->isHTML(); // 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)); @@ -3850,7 +4093,7 @@ public function msgHTML($message, $basedir = '', $advanced = false) public function html2text($html, $advanced = false) { if (is_callable($advanced)) { - return call_user_func($advanced, $html); + return $advanced($html); } return html_entity_decode( @@ -4014,7 +4257,7 @@ public static function filenameToType($filename) * 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 + * @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, @@ -4026,7 +4269,7 @@ public static function mb_pathinfo($path, $options = null) { $ret = ['dirname' => '', 'basename' => '', 'extension' => '', 'filename' => '']; $pathinfo = []; - if (preg_match('#^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^\.\\\\/]+?)|))[\\\\/\.]*$#im', $path, $pathinfo)) { + if (preg_match('#^(.*?)[\\\\/]*(([^/\\\\]*?)(\.([^.\\\\/]+?)|))[\\\\/.]*$#m', $path, $pathinfo)) { if (array_key_exists(1, $pathinfo)) { $ret['dirname'] = $pathinfo[1]; } @@ -4063,9 +4306,9 @@ public static function mb_pathinfo($path, $options = null) * 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');` + * `$mail->set('SMTPSecure', static::ENCRYPTION_STARTTLS);` * is the same as: - * `$mail->SMTPSecure = 'tls';`. + * `$mail->SMTPSecure = static::ENCRYPTION_STARTTLS;`. * * @param string $name The property name to set * @param mixed $value The value to set the property to @@ -4170,7 +4413,7 @@ public function DKIM_QP($txt) $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))) { + if (((0x21 <= $ord) && ($ord <= 0x3A)) || $ord === 0x3C || ((0x3E <= $ord) && ($ord <= 0x7E))) { $line .= $txt[$i]; } else { $line .= '=' . sprintf('%02X', $ord); @@ -4201,7 +4444,7 @@ public function DKIM_Sign($signHeader) $privKeyStr = !empty($this->DKIM_private_string) ? $this->DKIM_private_string : file_get_contents($this->DKIM_private); - if ('' != $this->DKIM_passphrase) { + if ('' !== $this->DKIM_passphrase) { $privKey = openssl_pkey_get_private($privKeyStr, $this->DKIM_passphrase); } else { $privKey = openssl_pkey_get_private($privKeyStr); @@ -4221,7 +4464,7 @@ public function DKIM_Sign($signHeader) * 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 + * @see https://tools.ietf.org/html/rfc6376#section-3.4.2 * * @param string $signHeader Header * @@ -4229,12 +4472,12 @@ public function DKIM_Sign($signHeader) */ 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. + //Unfold header lines $signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader); + //Break headers out into an array $lines = explode("\r\n", $signHeader); foreach ($lines as $key => $line) { //If the header is missing a :, skip it as it's invalid @@ -4246,12 +4489,12 @@ public function DKIM_HeaderC($signHeader) 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); + //Collapse white space within the value, also convert WSP to space + $value = preg_replace('/[ \t]+/', ' ', $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 + //By elimination, the same applies to the field name $lines[$key] = trim($heading, " \t") . ':' . trim($value, " \t"); } @@ -4263,7 +4506,7 @@ public function DKIM_HeaderC($signHeader) * 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 + * @see https://tools.ietf.org/html/rfc6376#section-3.4.3 * * @param string $body Message Body * @@ -4288,109 +4531,144 @@ public function DKIM_BodyC($body) * @param string $subject Subject * @param string $body Body * + * @throws Exception + * * @return string */ public function DKIM_Add($headers_line, $subject, $body) { $DKIMsignatureType = 'rsa-sha256'; // Signature & hash algorithms - $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization of header/body + $DKIMcanonicalization = 'relaxed/simple'; // Canonicalization methods 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 = ''; - $copiedHeaderFields = ''; - $foundExtraHeaders = []; - $extraHeaderKeys = ''; - $extraHeaderValues = ''; - $extraCopyHeaderFields = ''; - 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'; - } elseif (!empty($this->DKIM_extraHeaders)) { - foreach ($this->DKIM_extraHeaders as $extraHeader) { - if (strpos($header, $extraHeader . ':') === 0) { - $headerValue = $header; - foreach ($this->CustomHeader as $customHeader) { - if ($customHeader[0] === $extraHeader) { - $headerValue = trim($customHeader[0]) . - ': ' . - $this->encodeHeader(trim($customHeader[1])); - break; - } + $DKIMtime = time(); + //Always sign these headers without being asked + $autoSignHeaders = [ + 'From', + 'To', + 'CC', + 'Date', + 'Subject', + 'Reply-To', + 'Message-ID', + 'Content-Type', + 'Mime-Version', + 'X-Mailer', + ]; + if (stripos($headers_line, 'Subject') === false) { + $headers_line .= 'Subject: ' . $subject . static::$LE; + } + $headerLines = explode(static::$LE, $headers_line); + $currentHeaderLabel = ''; + $currentHeaderValue = ''; + $parsedHeaders = []; + $headerLineIndex = 0; + $headerLineCount = count($headerLines); + foreach ($headerLines as $headerLine) { + $matches = []; + if (preg_match('/^([^ \t]*?)(?::[ \t]*)(.*)$/', $headerLine, $matches)) { + if ($currentHeaderLabel !== '') { + //We were previously in another header; This is the start of a new header, so save the previous one + $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue]; + } + $currentHeaderLabel = $matches[1]; + $currentHeaderValue = $matches[2]; + } elseif (preg_match('/^[ \t]+(.*)$/', $headerLine, $matches)) { + //This is a folded continuation of the current header, so unfold it + $currentHeaderValue .= ' ' . $matches[1]; + } + ++$headerLineIndex; + if ($headerLineIndex >= $headerLineCount) { + //This was the last line, so finish off this header + $parsedHeaders[] = ['label' => $currentHeaderLabel, 'value' => $currentHeaderValue]; + } + } + $copiedHeaders = []; + $headersToSignKeys = []; + $headersToSign = []; + foreach ($parsedHeaders as $header) { + //Is this header one that must be included in the DKIM signature? + if (in_array($header['label'], $autoSignHeaders, true)) { + $headersToSignKeys[] = $header['label']; + $headersToSign[] = $header['label'] . ': ' . $header['value']; + if ($this->DKIM_copyHeaderFields) { + $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC + str_replace('|', '=7C', $this->DKIM_QP($header['value'])); + } + continue; + } + //Is this an extra custom header we've been asked to sign? + if (in_array($header['label'], $this->DKIM_extraHeaders, true)) { + //Find its value in custom headers + foreach ($this->CustomHeader as $customHeader) { + if ($customHeader[0] === $header['label']) { + $headersToSignKeys[] = $header['label']; + $headersToSign[] = $header['label'] . ': ' . $header['value']; + if ($this->DKIM_copyHeaderFields) { + $copiedHeaders[] = $header['label'] . ':' . //Note no space after this, as per RFC + str_replace('|', '=7C', $this->DKIM_QP($header['value'])); } - $foundExtraHeaders[$extraHeader] = $headerValue; - $current = ''; - break; + //Skip straight to the next header + continue 2; } } - } else { - if (!empty($$current) and strpos($header, ' =?') === 0) { - $$current .= $header; - } else { - $current = ''; - } } } - foreach ($foundExtraHeaders as $key => $value) { - $extraHeaderKeys .= ':' . $key; - $extraHeaderValues .= $value . "\r\n"; - if ($this->DKIM_copyHeaderFields) { - $extraCopyHeaderFields .= "\t|" . str_replace('|', '=7C', $this->DKIM_QP($value)) . ";\r\n"; + $copiedHeaderFields = ''; + if ($this->DKIM_copyHeaderFields && count($copiedHeaders) > 0) { + //Assemble a DKIM 'z' tag + $copiedHeaderFields = ' z='; + $first = true; + foreach ($copiedHeaders as $copiedHeader) { + if (!$first) { + $copiedHeaderFields .= static::$LE . ' |'; + } + //Fold long values + if (strlen($copiedHeader) > self::STD_LINE_LENGTH - 3) { + $copiedHeaderFields .= substr( + chunk_split($copiedHeader, self::STD_LINE_LENGTH - 3, static::$LE . ' '), + 0, + -strlen(static::$LE . ' ') + ); + } else { + $copiedHeaderFields .= $copiedHeader; + } + $first = false; } + $copiedHeaderFields .= ';' . static::$LE; } - if ($this->DKIM_copyHeaderFields) { - $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)); - $copiedHeaderFields = "\tz=$from\r\n" . - "\t|$to\r\n" . - "\t|$date\r\n" . - "\t|$subject;\r\n" . - $extraCopyHeaderFields; - } + $headerKeys = ' h=' . implode(':', $headersToSignKeys) . ';' . static::$LE; + $headerValues = implode(static::$LE, $headersToSign); $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" . $extraHeaderKeys . ";\r\n" . - "\td=" . $this->DKIM_domain . ';' . $ident . "\r\n" . + $ident = ''; + if ('' !== $this->DKIM_identity) { + $ident = ' i=' . $this->DKIM_identity . ';' . static::$LE; + } + //The DKIM-Signature header is included in the signature *except for* the value of the `b` tag + //which is appended after calculating the signature + //https://tools.ietf.org/html/rfc6376#section-3.5 + $dkimSignatureHeader = 'DKIM-Signature: v=1;' . + ' d=' . $this->DKIM_domain . ';' . + ' s=' . $this->DKIM_selector . ';' . static::$LE . + ' a=' . $DKIMsignatureType . ';' . + ' q=' . $DKIMquery . ';' . + ' l=' . $DKIMlen . ';' . + ' t=' . $DKIMtime . ';' . + ' c=' . $DKIMcanonicalization . ';' . static::$LE . + $headerKeys . + $ident . $copiedHeaderFields . - "\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" . - $extraHeaderValues . - $dkimhdrs + ' bh=' . $DKIMb64 . ';' . static::$LE . + ' b='; + //Canonicalize the set of headers + $canonicalizedHeaders = $this->DKIM_HeaderC( + $headerValues . static::$LE . $dkimSignatureHeader ); - $signed = $this->DKIM_Sign($toSign); + $signature = $this->DKIM_Sign($canonicalizedHeaders); + $signature = trim(chunk_split($signature, self::STD_LINE_LENGTH - 3, static::$LE . ' ')); - return static::normalizeBreaks($dkimhdrs . $signed) . static::$LE; + return static::normalizeBreaks($dkimSignatureHeader . $signature) . static::$LE; } /** @@ -4475,7 +4753,7 @@ public function getAllRecipientAddresses() */ protected function doCallback($isSent, $to, $cc, $bcc, $subject, $body, $from, $extra) { - if (!empty($this->action_function) and is_callable($this->action_function)) { + if (!empty($this->action_function) && is_callable($this->action_function)) { call_user_func($this->action_function, $isSent, $to, $cc, $bcc, $subject, $body, $from, $extra); } } @@ -4492,8 +4770,6 @@ public function getOAuth() /** * Set an OAuth instance. - * - * @param OAuth $oauth */ public function setOAuth(OAuth $oauth) { diff --git a/base/vendor/phpmailer/phpmailer/src/POP3.php b/base/vendor/phpmailer/phpmailer/src/POP3.php index 66cf2730..50d5f0c2 100644 --- a/base/vendor/phpmailer/phpmailer/src/POP3.php +++ b/base/vendor/phpmailer/phpmailer/src/POP3.php @@ -3,13 +3,13 @@ * PHPMailer POP-Before-SMTP Authentication Class. * PHP Version 5.5. * - * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project + * @see https://github.com/PHPMailer/PHPMailer/ The PHPMailer GitHub project * * @author Marcus Bointon (Synchro/coolbru) * @author Jim Jagielski (jimjag) * @author Andy Prevost (codeworxtech) * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2017 Marcus Bointon + * @copyright 2012 - 2019 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 @@ -29,14 +29,14 @@ * 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 + * 4) This POP3 class is deliberately lightweight and incomplete, implementing 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) + * @author Richard Davey (original author) + * @author Marcus Bointon (Synchro/coolbru) + * @author Jim Jagielski (jimjag) + * @author Andy Prevost (codeworxtech) */ class POP3 { @@ -45,7 +45,7 @@ class POP3 * * @var string */ - const VERSION = '6.0.7'; + const VERSION = '6.1.4'; /** * Default POP3 port number. @@ -364,7 +364,7 @@ protected function sendString($string) */ protected function checkResponse($string) { - if (substr($string, 0, 3) !== '+OK') { + if (strpos($string, '+OK') !== 0) { $this->setError("Server reported an error: $string"); return false; diff --git a/base/vendor/phpmailer/phpmailer/src/SMTP.php b/base/vendor/phpmailer/phpmailer/src/SMTP.php index da85442b..c693f4d4 100644 --- a/base/vendor/phpmailer/phpmailer/src/SMTP.php +++ b/base/vendor/phpmailer/phpmailer/src/SMTP.php @@ -9,7 +9,7 @@ * @author Jim Jagielski (jimjag) * @author Andy Prevost (codeworxtech) * @author Brent R. Matzelle (original founder) - * @copyright 2012 - 2017 Marcus Bointon + * @copyright 2012 - 2019 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 @@ -24,8 +24,8 @@ * 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 + * @author Chris Ryan + * @author Marcus Bointon */ class SMTP { @@ -34,7 +34,7 @@ class SMTP * * @var string */ - const VERSION = '6.0.7'; + const VERSION = '6.1.4'; /** * SMTP line break constant. @@ -51,34 +51,57 @@ class SMTP const DEFAULT_PORT = 25; /** - * The maximum line length allowed by RFC 2822 section 2.1.1. + * The maximum line length allowed by RFC 5321 section 4.5.3.1.6, + * *excluding* a trailing CRLF break. + * + * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6 * * @var int */ const MAX_LINE_LENGTH = 998; + /** + * The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5, + * *including* a trailing CRLF line break. + * + * @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5 + * + * @var int + */ + const MAX_REPLY_LENGTH = 512; + /** * Debug level for no output. + * + * @var int */ const DEBUG_OFF = 0; /** * Debug level to show client -> server messages. + * + * @var int */ const DEBUG_CLIENT = 1; /** * Debug level to show client -> server and server -> client messages. + * + * @var int */ const DEBUG_SERVER = 2; /** * Debug level to show connection status, client -> server and server -> client messages. + * + * @var int */ const DEBUG_CONNECTION = 3; /** * Debug level to show all messages. + * + * @var int */ const DEBUG_LOWLEVEL = 4; @@ -197,7 +220,7 @@ class SMTP * * @var string|null */ - protected $helo_rply = null; + protected $helo_rply; /** * The set of SMTP extensions sent in reply to EHLO command. @@ -209,7 +232,7 @@ class SMTP * * @var array|null */ - protected $server_caps = null; + protected $server_caps; /** * The most recent reply received from the server. @@ -239,7 +262,7 @@ protected function edebug($str, $level = 0) return; } //Avoid clash with built-in function names - if (!in_array($this->Debugoutput, ['error_log', 'html', 'echo']) and is_callable($this->Debugoutput)) { + if (is_callable($this->Debugoutput) && !in_array($this->Debugoutput, ['error_log', 'html', 'echo'])) { call_user_func($this->Debugoutput, $str, $level); return; @@ -260,12 +283,12 @@ protected function edebug($str, $level = 0) case 'echo': default: //Normalize line breaks - $str = preg_replace('/\r\n|\r/ms', "\n", $str); + $str = preg_replace('/\r\n|\r/m', "\n", $str); echo gmdate('Y-m-d H:i:s'), "\t", //Trim trailing space trim( - //Indent for readability, except for trailing break + //Indent for readability, except for trailing break str_replace( "\n", "\n \t ", @@ -348,7 +371,7 @@ public function connect($host, $port = null, $timeout = 30, $options = []) 'Failed to connect to server', '', (string) $errno, - (string) $errstr + $errstr ); $this->edebug( 'SMTP ERROR: ' . $this->error['error'] @@ -361,10 +384,10 @@ public function connect($host, $port = null, $timeout = 30, $options = []) $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'); + if (strpos(PHP_OS, 'WIN') !== 0) { + $max = (int) ini_get('max_execution_time'); // Don't bother if unlimited - if (0 != $max and $timeout > $max) { + if (0 !== $max && $timeout > $max) { @set_time_limit($timeout); } stream_set_timeout($this->smtp_conn, $timeout, 0); @@ -444,14 +467,14 @@ public function authenticate( return false; } - $this->edebug('Auth method requested: ' . ($authtype ? $authtype : 'UNSPECIFIED'), self::DEBUG_LOWLEVEL); + $this->edebug('Auth method requested: ' . ($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'])) { + if (null !== $authtype && !in_array($authtype, $this->server_caps['AUTH'], true)) { $this->edebug('Requested auth method not available: ' . $authtype, self::DEBUG_LOWLEVEL); $authtype = null; } @@ -460,7 +483,7 @@ public function authenticate( //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'])) { + if (in_array($method, $this->server_caps['AUTH'], true)) { $authtype = $method; break; } @@ -470,10 +493,10 @@ public function authenticate( return false; } - self::edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL); + $this->edebug('Auth method selected: ' . $authtype, self::DEBUG_LOWLEVEL); } - if (!in_array($authtype, $this->server_caps['AUTH'])) { + if (!in_array($authtype, $this->server_caps['AUTH'], true)) { $this->setError("The requested authentication method \"$authtype\" is not supported by the server"); return false; @@ -663,13 +686,13 @@ public function data($msg_data) $field = substr($lines[0], 0, strpos($lines[0], ':')); $in_headers = false; - if (!empty($field) and strpos($field, ' ') === false) { + if (!empty($field) && strpos($field, ' ') === false) { $in_headers = true; } foreach ($lines as $line) { $lines_out = []; - if ($in_headers and $line == '') { + if ($in_headers && $line === '') { $in_headers = false; } //Break this line up into several smaller lines if it's too long @@ -700,7 +723,7 @@ public function data($msg_data) //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] == '.') { + if (!empty($line_out) && $line_out[0] === '.') { $line_out = '.' . $line_out; } $this->client_send($line_out . static::LE, 'DATA'); @@ -710,7 +733,7 @@ public function data($msg_data) //Message data has been sent, complete the command //Increase timelimit for end of DATA command $savetimelimit = $this->Timelimit; - $this->Timelimit = $this->Timelimit * 2; + $this->Timelimit *= 2; $result = $this->sendCommand('DATA END', '.', 250); $this->recordLastTransactionID(); //Restore timelimit @@ -745,7 +768,7 @@ public function hello($host = '') * * @return bool * - * @see hello() + * @see hello() */ protected function sendHello($hello, $host) { @@ -838,7 +861,7 @@ 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) { + if ($noerror || $close_on_error) { $this->close(); $this->error = $err; //Restore any error from the quit command } @@ -853,14 +876,35 @@ public function quit($close_on_error = true) * Implements from RFC 821: RCPT TO: . * * @param string $address The address the message is being sent to + * @param string $dsn Comma separated list of DSN notifications. NEVER, SUCCESS, FAILURE + * or DELAY. If you specify NEVER all other notifications are ignored. * * @return bool */ - public function recipient($address) + public function recipient($address, $dsn = '') { + if (empty($dsn)) { + $rcpt = 'RCPT TO:<' . $address . '>'; + } else { + $dsn = strtoupper($dsn); + $notify = []; + + if (strpos($dsn, 'NEVER') !== false) { + $notify[] = 'NEVER'; + } else { + foreach (['SUCCESS', 'FAILURE', 'DELAY'] as $value) { + if (strpos($dsn, $value) !== false) { + $notify[] = $value; + } + } + } + + $rcpt = 'RCPT TO:<' . $address . '> NOTIFY=' . implode(',', $notify); + } + return $this->sendCommand( 'RCPT TO', - 'RCPT TO:<' . $address . '>', + $rcpt, [250, 251] ); } @@ -894,7 +938,7 @@ protected function sendCommand($command, $commandstring, $expect) return false; } //Reject line breaks in all commands - if (strpos($commandstring, "\n") !== false or strpos($commandstring, "\r") !== false) { + if ((strpos($commandstring, "\n") !== false) || (strpos($commandstring, "\r") !== false)) { $this->setError("Command '$command' contained line breaks"); return false; @@ -904,8 +948,8 @@ protected function sendCommand($command, $commandstring, $expect) $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]; + if (preg_match('/^([\d]{3})[ -](?:([\d]\\.[\d]\\.[\d]{1,2}) )?/', $this->last_reply, $matches)) { + $code = (int) $matches[1]; $code_ex = (count($matches) > 2 ? $matches[2] : null); // Cut off error code from each response line $detail = preg_replace( @@ -916,14 +960,14 @@ protected function sendCommand($command, $commandstring, $expect) ); } else { // Fall back to simple parsing if regex fails - $code = substr($this->last_reply, 0, 3); + $code = (int) 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)) { + if (!in_array($code, (array) $expect, true)) { $this->setError( "$command command failed", $detail, @@ -1014,9 +1058,9 @@ 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 + if (self::DEBUG_LOWLEVEL > $this->do_debug && in_array($command, ['User & Password', 'Username', 'Password'], true)) { - $this->edebug('CLIENT -> SERVER: