Security update for permissions_by_term
[yaffs-website] / composer.phar
1 #!/usr/bin/env php
2 <?php
3 /*
4  * This file is part of Composer.
5  *
6  * (c) Nils Adermann <naderman@naderman.de>
7  *     Jordi Boggiano <j.boggiano@seld.be>
8  *
9  * For the full copyright and license information, please view
10  * the license that is located at the bottom of this file.
11  */
12
13 // Avoid APC causing random fatal errors per https://github.com/composer/composer/issues/264
14 if (extension_loaded('apc') && ini_get('apc.enable_cli') && ini_get('apc.cache_by_default')) {
15     if (version_compare(phpversion('apc'), '3.0.12', '>=')) {
16         ini_set('apc.cache_by_default', 0);
17     } else {
18         fwrite(STDERR, 'Warning: APC <= 3.0.12 may cause fatal errors when running composer commands.'.PHP_EOL);
19         fwrite(STDERR, 'Update APC, or set apc.enable_cli or apc.cache_by_default to 0 in your php.ini.'.PHP_EOL);
20     }
21 }
22
23 Phar::mapPhar('composer.phar');
24 require 'phar://composer.phar/bin/composer';
25
26 __HALT_COMPILER(); ?>\r
27 w\91\0\0é\ 1\0\0\11\0\0\0\ 1\0\r\0\0\0composer.phar\0\0\0\0+\0\0\0src/Composer/Autoload/AutoloadGenerator.php\ 5b\0\0\1a\17\8bY\ 5b\0\0¼cí߶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Autoload/ClassMapGenerator.php«\11\0\0\1a\17\8b\11\0\0\10ëÊ\9a\ 1\0\0\0\0\0\0\16\0\0\0src/Composer/Cache.phpt\13\0\0\1a\17\8bYt\13\0\0\0\11&#¶\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Command/AboutCommand.phpË\ 2\0\0\1a\17\8b\ 2\0\0º¡Ãh¶\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/ArchiveCommand.phpL\14\0\0\1a\17\8bYL\14\0\0\85\r;V¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/BaseCommand.phpÉ        \0\0\1a\17\8bYÉ \0\0\97P!£¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Command/BaseDependencyCommand.phpÉ\18\0\0\1a\17\8b\18\0\0D{²Ð¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Command/ClearCacheCommand.php]\ 5\0\0\1a\17\8bY]\ 5\0\0\1f\82ß´¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/ConfigCommand.php\aH\0\0\1a\17\8bY\aH\0\0\ fÃæ\ 5\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Command/CreateProjectCommand.phpì4\0\0\1a\17\8bYì4\0\0\13ô\18\8d\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/DependsCommand.php·\ 2\0\0\1a\17\8b\ 2\0\0o±¹ú¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/DiagnoseCommand.phpÍF\0\0\1a\17\8bYÍF\0\0²E>F¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Command/DumpAutoloadCommand.php¨       \0\0\1a\17\8bY¨ \0\0g/\94\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/ExecCommand.phpi\a\0\0\1a\17\8bYi\a\0\0\ 4\80\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/GlobalCommand.phpü\a\0\0\1a\17\8b\a\0\0ÝH\8f\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/HomeCommand.php\1f\ e\0\0\1a\17\8bY\1f\ e\0\0\16±¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/InitCommand.phpT>\0\0\1a\17\8bYT>\0\0\16\16Oø¶\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/InstallCommand.phpý\13\0\0\1a\17\8b\13\0\00ö:\89\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/LicensesCommand.php&\ e\0\0\1a\17\8bY&\ e\0\0Óv\83\1e\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/OutdatedCommand.php°
28 \0\0\1a\17\8b
29 \0\07àzk¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Command/ProhibitsCommand.phpË\ 2\0\0\1a\17\8b\ 2\0\0\1ag\8fð¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/RemoveCommand.php\ 1\16\0\0\1a\17\8bY\ 1\16\0\0 O4\v\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/RequireCommand.php\9d\1f\0\0\1a\17\8bY\9d\1f\0\0BùÊǶ\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Command/RunScriptCommand.php \f\0\0\1a\17\8b\f\0\0\ 3G\92\7f\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Command/ScriptAliasCommand.php\ 3\ 5\0\0\1a\17\8bY\ 3\ 5\0\0ÃJJü¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/SearchCommand.phpã\b\0\0\1a\17\8b\b\0\0ñ\v¼w¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Command/SelfUpdateCommand.phpï0\0\0\1a\17\8bYï0\0\0û­\ 3\f\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/ShowCommand.php\85d\0\0\1a\17\8bY\85d\0\0ó\87*é¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/StatusCommand.php/\15\0\0\1a\17\8bY/\15\0\0ôE\12\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/SuggestsCommand.php©\r\0\0\1a\17\8b\r\0\0\96º×U¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/UpdateCommand.php["\0\0\1a\17\8bY["\0\0IyYì¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/ValidateCommand.php\18\14\0\0\1a\17\8bY\18\14\0\0lp\9c\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Composer.phpù  \0\0\1a\17\8bYù \0\01N«®¶\ 1\0\0\0\0\0\0\17\0\0\0src/Composer/Config.phpÅ"\0\0\1a\17\8bYÅ"\0\0\9d¡¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Config/ConfigSourceInterface.php\ e\ 2\0\0\1a\17\8bY\ e\ 2\0\0³\f[/¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Config/JsonConfigSource.php!\13\0\0\1a\17\8bY!\13\0\0¾S\r\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Console/Application.php¶2\0\0\1a\17\8bY¶2\0\0A7Ò\18\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Console/HtmlOutputFormatter.php3\ 6\0\0\1a\17\8bY3\ 6\0\0Ú\81Eu¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/DependencyResolver/Decisions.phpQ\ f\0\0\1a\17\8bYQ\ f\0\0?\98¬$¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/DependencyResolver/DefaultPolicy.php\ 2\17\0\0\1a\17\8bY\ 2\17\0\0õÝv\7f\ 1\0\0\0\0\0\0/\0\0\0src/Composer/DependencyResolver/GenericRule.php·\ 3\0\0\1a\17\8b\ 3\0\0Ì~¯³¶\ 1\0\0\0\0\0\0>\0\0\0src/Composer/DependencyResolver/Operation/InstallOperation.phpC\ 2\0\0\1a\17\8bYC\ 2\0\0´\õ*¶\ 1\0\0\0\0\0\0I\0\0\0src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php÷\ 2\0\0\1a\17\8b\ 2\0\0ïÎà÷¶\ 1\0\0\0\0\0\0K\0\0\0src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.phpý\ 2\0\0\1a\17\8b\ 2\0\0\193#\86\ 1\0\0\0\0\0\0@\0\0\0src/Composer/DependencyResolver/Operation/OperationInterface.phpÓ\0\0\0\1a\17\8b\0\0\0Ùâ&ä¶\ 1\0\0\0\0\0\0=\0\0\0src/Composer/DependencyResolver/Operation/SolverOperation.php¹\ 1\0\0\1a\17\8b\ 1\0\0&¢e
30\ 1\0\0\0\0\0\0@\0\0\0src/Composer/DependencyResolver/Operation/UninstallOperation.phpI\ 2\0\0\1a\17\8bYI\ 2\0\0FûÂɶ\ 1\0\0\0\0\0\0=\0\0\0src/Composer/DependencyResolver/Operation/UpdateOperation.phph\ 3\0\0\1a\17\8bYh\ 3\0\0öSÕ]¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/DependencyResolver/PolicyInterface.php­\ 1\0\0\1a\17\8b\ 1\0\0\18\9f\8b\ 1\0\0\0\0\0\0(\0\0\0src/Composer/DependencyResolver/Pool.php°"\0\0\1a\17\8bY°"\0\0\1d   \8e\ 1\0\0\0\0\0\0+\0\0\0src/Composer/DependencyResolver/Problem.php\99\16\0\0\1a\17\8bY\99\16\0\0\ 3´\87Ķ\ 1\0\0\0\0\0\0+\0\0\0src/Composer/DependencyResolver/Request.php\83\ 4\0\0\1a\17\8bY\83\ 4\0\0åVP\84\ 1\0\0\0\0\0\0(\0\0\0src/Composer/DependencyResolver/Rule.php¶\18\0\0\1a\17\8b\18\0\0Ú{\8d\8d\ 1\0\0\0\0\0\01\0\0\0src/Composer/DependencyResolver/Rule2Literals.php§\ 4\0\0\1a\17\8b\ 4\0\0~Ð'ò¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/DependencyResolver/RuleSet.phpª
31 \0\0\1a\17\8b
32 \0\0\82\e\ 1\0\0\0\0\0\04\0\0\0src/Composer/DependencyResolver/RuleSetGenerator.phpO\e\0\0\1a\17\8bYO\e\0\0³Q[â¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/DependencyResolver/RuleSetIterator.php\14\ 6\0\0\1a\17\8bY\14\ 6\0\0}õÇù¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/DependencyResolver/RuleWatchChain.phpi\ 1\0\0\1a\17\8bYi\ 1\0\0\9a\ 1\0\0\0\0\0\02\0\0\0src/Composer/DependencyResolver/RuleWatchGraph.phpá\ 6\0\0\1a\17\8b\ 6\0\0\89rôv¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/DependencyResolver/RuleWatchNode.phpñ\ 3\0\0\1a\17\8b\ 3\0\0ë\95\e\93\ 1\0\0\0\0\0\0*\0\0\0src/Composer/DependencyResolver/Solver.php\9f8\0\0\1a\17\8bY\9f8\0\0\1epöb¶\ 1\0\0\0\0\0\06\0\0\0src/Composer/DependencyResolver/SolverBugException.php\98\ 1\0\0\1a\17\8bY\98\ 1\0\0\7f"qN¶\ 1\0\0\0\0\0\0;\0\0\0src/Composer/DependencyResolver/SolverProblemsException.php¤\a\0\0\1a\17\8b\a\0\0Ä\1d~\a\ 1\0\0\0\0\0\0/\0\0\0src/Composer/DependencyResolver/Transaction.phpô\13\0\0\1a\17\8b\13\0\0cïTܶ\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Downloader/ArchiveDownloader.php¸\ e\0\0\1a\17\8b\ e\0\0±°Y\b\ 1\0\0\0\0\0\01\0\0\0src/Composer/Downloader/ChangeReportInterface.phpÌ\0\0\0\1a\17\8b\0\0\0¯à¨¿¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Downloader/DownloadManager.phpG\15\0\0\1a\17\8bYG\15\0\0\8a(í»¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Downloader/DownloaderInterface.phpÊ\ 1\0\0\1a\17\8b\ 1\0\0gs!l¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/Downloader/DvcsDownloaderInterface.phpÑ\0\0\0\1a\17\8b\0\0\0\9c¿¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/FileDownloader.phpì\17\0\0\1a\17\8b\17\0\04\1eø\ 1\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Downloader/FilesystemException.php
33 \ 1\0\0\1a\17\8bY
34 \ 1\0\0.-\1e\8b\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Downloader/FossilDownloader.php`\v\0\0\1a\17\8bY`\v\0\0ÿI©u¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/GitDownloader.php\9d3\0\0\1a\17\8bY\9d3\0\01mU¥¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/GzipDownloader.phpó\ 6\0\0\1a\17\8b\ 6\0\0}Úo¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Downloader/HgDownloader.php8 \0\0\1a\17\8bY8 \0\0ëyàn¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/PathDownloader.phpS\10\0\0\1a\17\8bYS\10\0\0Êfý|¶\ 1\0\0\0\0\0\00\0\0\0src/Composer/Downloader/PearPackageExtractor.phpu\e\0\0\1a\17\8bYu\e\0\0z\84\15\87\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Downloader/PerforceDownloader.phpÃ\a\0\0\1a\17\8b\a\0\0\1c\91Èý¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/PharDownloader.phpå\0\0\0\1a\17\8b\0\0\0ÞÉ\1fç¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/RarDownloader.php\9e\a\0\0\1a\17\8bY\9e\a\0\06      3U¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/SvnDownloader.phpG\11\0\0\1a\17\8bYG\11\0\0\86íV\96\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/TarDownloader.phpã\0\0\0\1a\17\8b\0\0\0Í\92X?¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Downloader/TransportException.php=\ 2\0\0\1a\17\8bY=\ 2\0\0ZÎÈÞ¶\ 1\0\0\0\0\0\09\0\0\0src/Composer/Downloader/VcsCapableDownloaderInterface.phpÔ\0\0\0\1a\17\8b\0\0\0`§ôö¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/VcsDownloader.php"\16\0\0\1a\17\8bY"\16\0\0\9c\1a\9f\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Downloader/XzDownloader.php§\ 4\0\0\1a\17\8b\ 4\0\0W$;á¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/ZipDownloader.php\98\13\0\0\1a\17\8bY\98\13\0\0\9b@\ 2ü¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/EventDispatcher/Event.php \ 2\0\0\1a\17\8b\ 2\0\0±\99jï¶\ 1\0\0\0\0\0\00\0\0\0src/Composer/EventDispatcher/EventDispatcher.phpß0\0\0\1a\17\8bYß0\0\0}f\18\a\ 1\0\0\0\0\0\09\0\0\0src/Composer/EventDispatcher/EventSubscriberInterface.php©\0\0\0\1a\17\8b\0\0\0\ 1\ 1\0\0\0\0\0\09\0\0\0src/Composer/EventDispatcher/ScriptExecutionException.phpv\0\0\0\1a\17\8bYv\0\0\0wZ8S¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Exception/NoSslException.phpf\0\0\0\1a\17\8bYf\0\0\0ËíM\9d\ 1\0\0\0\0\0\0\18\0\0\0src/Composer/Factory.phpS=\0\0\1a\17\8bYS=\0\0Fíж\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/IO/BaseIO.php\8c\10\0\0\1a\17\8bY\8c\10\0\0(\82l\91\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/IO/BufferIO.php*\ 4\0\0\1a\17\8bY*\ 4\0\0¢®hT¶\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/IO/ConsoleIO.php;\15\0\0\1a\17\8bY;\15\0\0Ê\17\9b\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/IO/IOInterface.phpì\ 5\0\0\1a\17\8b\ 5\0\0\0Õ\9d\ e\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/IO/NullIO.phpÀ\ 4\0\0\1a\17\8b\ 4\0\0F`sʶ\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/Installer.phpv\9a\0\0\1a\17\8bYv\9a\0\0¸f¡u¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Installer/BinaryInstaller.php\10\13\0\0\1a\17\8bY\10\13\0\0\8dv÷j¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Installer/BinaryPresenceInterface.phpË\0\0\0\1a\17\8b\0\0\0À5\9a¨¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Installer/InstallationManager.php-\17\0\0\1a\17\8bY-\17\0\0¾}\8c\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Installer/InstallerEvent.php\ e\ 6\0\0\1a\17\8bY\ e\ 6\0\0lÔzi¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Installer/InstallerEvents.phpÞ\0\0\0\1a\17\8b\0\0\0ì\9f@G¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Installer/InstallerInterface.phpã\ 2\0\0\1a\17\8b\ 2\0\0^\83\93ʶ\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Installer/LibraryInstaller.php^\13\0\0\1a\17\8bY^\13\0\0\10\1aÍr¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Installer/MetapackageInstaller.php\9c\ 4\0\0\1a\17\8bY\9c\ 4\0\0Æ\12Å!¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Installer/NoopInstaller.php+\ 5\0\0\1a\17\8bY+\ 5\0\0À·M}¶\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Installer/PackageEvent.phpe\ 3\0\0\1a\17\8bYe\ 3\0\0;° \1a\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Installer/PackageEvents.php¸\ 1\0\0\1a\17\8b\ 1\0\0dbØs¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Installer/PearBinaryInstaller.phpâ\f\0\0\1a\17\8b\f\0\0;øiU¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Installer/PearInstaller.php¢\a\0\0\1a\17\8b\a\0\0È\82¶Ñ¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Installer/PluginInstaller.php\9f\ 6\0\0\1a\17\8bY\9f\ 6\0\0<tú,¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Installer/ProjectInstaller.php\1d\ 6\0\0\1a\17\8bY\1d\ 6\0\0*0@P¶\ 1\0\0\0\0\0\04\0\0\0src/Composer/Installer/SuggestedPackagesReporter.php\10\a\0\0\1a\17\8bY\10\a\0\0+±]Ķ\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Json/JsonFile.php\ 3\14\0\0\1a\17\8bY\ 3\14\0\0VVN\15\ 1\0\0\0\0\0\0#\0\0\0src/Composer/Json/JsonFormatter.php\ 6\ 6\0\0\1a\17\8bY\ 6\ 6\0\0\1eÐqu¶\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Json/JsonManipulator.phpé1\0\0\1a\17\8bYé1\0\0Ë\ 3Æï¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Json/JsonValidationException.php\\ 1\0\0\1a\17\8bY\\ 1\0\0.Xóܶ\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Package/AliasPackage.php\ 5\17\0\0\1a\17\8bY\ 5\17\0\0¹\97~\9a\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Archiver/ArchivableFilesFilter.php       \ 2\0\0\1a\17\8b\ 2\0\0yY+¦¶\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Archiver/ArchivableFilesFinder.phpÞ\ 5\0\0\1a\17\8b\ 5\0\0\f²²¹¶\ 1\0\0\0\0\0\00\0\0\0src/Composer/Package/Archiver/ArchiveManager.php°\f\0\0\1a\17\8b\f\0\0gþÒ)¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/Package/Archiver/ArchiverInterface.php\a\ 1\0\0\1a\17\8bY\a\ 1\0\0ñ´>\v\ 1\0\0\0\0\0\03\0\0\0src/Composer/Package/Archiver/BaseExcludeFilter.php\96\ 6\0\0\1a\17\8bY\96\ 6\0\0y¶=ƶ\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Archiver/ComposerExcludeFilter.php\1f\ 1\0\0\1a\17\8bY\1f\ 1\0\0\8bSZ0¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Package/Archiver/GitExcludeFilter.phpq\ 3\0\0\1a\17\8bYq\ 3\0\05¾i&¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/Package/Archiver/HgExcludeFilter.php\13\ 5\0\0\1a\17\8bY\13\ 5\0\0~\94\ e¸¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Package/Archiver/PharArchiver.php>\ 6\0\0\1a\17\8bY>\ 6\0\0 5\89í¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Package/Archiver/ZipArchiver.php¼\ 4\0\0\1a\17\8b\ 4\0\0\91XÝë¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Package/BasePackage.php&\r\0\0\1a\17\8bY&\r\0\0\e'\1fݶ\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Package/CompletePackage.phpü\ 6\0\0\1a\17\8b\ 6\0\0þM˶¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/Package/CompletePackageInterface.phpõ\ 1\0\0\1a\17\8b\ 1\0\0¦Ê\81ò¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Package/Dumper/ArrayDumper.phpë\v\0\0\1a\17\8b\v\0\0Ó8WE¶\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/Package/Link.php\88\ 5\0\0\1a\17\8bY\88\ 5\0\0å¶Y«¶\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/LinkConstraint/EmptyConstraint.php\82\ 1\0\0\1a\17\8bY\82\ 1\0\0\ eé~\8b\ 1\0\0\0\0\0\0?\0\0\0src/Composer/Package/LinkConstraint/LinkConstraintInterface.phpd\ 1\0\0\1a\17\8bYd\ 1\0\0¤ôLn¶\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/LinkConstraint/MultiConstraint.php\82\ 1\0\0\1a\17\8bY\82\ 1\0\0ób`ý¶\ 1\0\0\0\0\0\0:\0\0\0src/Composer/Package/LinkConstraint/SpecificConstraint.phpi\ 1\0\0\1a\17\8bYi\ 1\0\0Þ\94\9a\ 1\0\0\0\0\0\09\0\0\0src/Composer/Package/LinkConstraint/VersionConstraint.phpX\ 1\0\0\1a\17\8bYX\ 1\0\0\ 2}`y¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Package/Loader/ArrayLoader.php¸\1e\0\0\1a\17\8b\1e\0\06\r¤\1d\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Loader/InvalidPackageException.phpE\ 2\0\0\1a\17\8bYE\ 2\0\0xb\13¾¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Package/Loader/JsonLoader.phpù\ 1\0\0\1a\17\8b\ 1\0\0!~\88\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Package/Loader/LoaderInterface.php²\0\0\0\1a\17\8b\0\0\0¦}úζ\ 1\0\0\0\0\0\01\0\0\0src/Composer/Package/Loader/RootPackageLoader.php½\16\0\0\1a\17\8b\16\0\0\8d\ 1\0\0\0\0\0\05\0\0\0src/Composer/Package/Loader/ValidatingArrayLoader.phpõ2\0\0\1a\17\8bYõ2\0\0ÞEY7¶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Package/Locker.php©!\0\0\1a\17\8bY©!\0\0A\8aõë¶\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Package/Package.phpÉ\1a\0\0\1a\17\8b\1a\0\0\8f\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Package/PackageInterface.php \a\0\0\1a\17\8b\a\0\0ûÇ^ƶ\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Package/RootAliasPackage.php\1f   \0\0\1a\17\8bY\1f \0\0      _\80ø¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Package/RootPackage.php\11\ 5\0\0\1a\17\8bY\11\ 5\0\0\ 2\8eÎ_¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Package/RootPackageInterface.php¹\ 3\0\0\1a\17\8b\ 3\0\0"maV¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Package/Version/VersionGuesser.phpÊ\1c\0\0\1a\17\8b\1c\0\0É{\13¯¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Package/Version/VersionParser.phpø\ 3\0\0\1a\17\8b\ 3\0\0\1e¾3l¶\ 1\0\0\0\0\0\00\0\0\0src/Composer/Package/Version/VersionSelector.phpK\f\0\0\1a\17\8bYK\f\0\0²<\ fȶ\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Plugin/Capability/Capability.phpW\0\0\0\1a\17\8bYW\0\0\0æ_¨1¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Plugin/Capability/CommandProvider.php\97\0\0\0\1a\17\8bY\97\0\0\0ûOâ>¶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Plugin/Capable.php\7f\0\0\0\1a\17\8bY\7f\0\0\0Æq\15\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Plugin/CommandEvent.phpâ\ 2\0\0\1a\17\8b\ 2\0\0³ÆÇW¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Plugin/PluginEvents.phpÂ\0\0\0\1a\17\8b\0\0\0^Íþ\ 6\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Plugin/PluginInterface.phpô\0\0\0\1a\17\8b\0\0\0)'*ض\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Plugin/PluginManager.php\1f$\0\0\1a\17\8bY\1f$\0\0ë\8e"»¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Plugin/PreFileDownloadEvent.php`\ 2\0\0\1a\17\8bY`\ 2\0\0\09-ζ\ 1\0\0\0\0\0\04\0\0\0src/Composer/Question/StrictConfirmationQuestion.php\1e\ 5\0\0\1a\17\8bY\1e\ 5\0\0'.³è¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Repository/ArrayRepository.php\13\ e\0\0\1a\17\8bY\13\ e\0\0éÌt\0\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/ArtifactRepository.php»\f\0\0\1a\17\8b\f\0\0\88Ý÷<¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Repository/BaseRepository.php_\r\0\0\1a\17\8bY_\r\0\0\96ûß\ e\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/ComposerRepository.php\T\0\0\1a\17\8bY\T\0\0+\8a;ê¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/CompositeRepository.php;\b\0\0\1a\17\8bY;\b\0\0¤¯S\1f\ 1\0\0\0\0\0\0;\0\0\0src/Composer/Repository/ConfigurableRepositoryInterface.php\85\0\0\0\1a\17\8bY\85\0\0\0±\9f_\1c\ 1\0\0\0\0\0\00\0\0\0src/Composer/Repository/FilesystemRepository.php×\ 4\0\0\1a\17\8b\ 4\0\0I\9cª\13\ 1\0\0\0\0\0\04\0\0\0src/Composer/Repository/InstalledArrayRepository.php£\0\0\0\1a\17\8b\0\0\0/ö~>¶\ 1\0\0\0\0\0\09\0\0\0src/Composer/Repository/InstalledFilesystemRepository.php£\0\0\0\1a\17\8b\0\0\0V
35 \95\ 1\0\0\0\0\0\08\0\0\0src/Composer/Repository/InstalledRepositoryInterface.php\87\0\0\0\1a\17\8bY\87\0\0\0\18£9p¶\ 1\0\0\0\0\0\06\0\0\0src/Composer/Repository/InvalidRepositoryException.phpn\0\0\0\1a\17\8bYn\0\0\0à\93ë\98\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Repository/PackageRepository.phpj\ 3\0\0\1a\17\8bYj\ 3\0\0¥ôò̶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Repository/PathRepository.phpY        \0\0\1a\17\8bYY \0\0(\97¾3¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Repository/Pear/BaseChannelReader.phpI\ 5\0\0\1a\17\8bYI\ 5\0\0c\b6³¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Pear/ChannelInfo.phpÄ\ 1\0\0\1a\17\8b\ 1\0\0:T*ɶ\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/Pear/ChannelReader.phpí\ 6\0\0\1a\17\8b\ 6\0\0?ÈYT¶\ 1\0\0\0\0\0\04\0\0\0src/Composer/Repository/Pear/ChannelRest10Reader.phpÁ \0\0\1a\17\8bYÁ \0\0\ 4O\80ë¶\ 1\0\0\0\0\0\04\0\0\0src/Composer/Repository/Pear/ChannelRest11Reader.php& \0\0\1a\17\8bY& \0\0òUb\b\ 1\0\0\0\0\0\05\0\0\0src/Composer/Repository/Pear/DependencyConstraint.phpq\ 2\0\0\1a\17\8bYq\ 2\0\09\ e\17\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/Pear/DependencyInfo.phpq\ 1\0\0\1a\17\8bYq\ 1\0\0fºTò¶\ 1\0\0\0\0\0\08\0\0\0src/Composer/Repository/Pear/PackageDependencyParser.php\85\16\0\0\1a\17\8bY\85\16\0\0÷$Li¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Pear/PackageInfo.php°\ 3\0\0\1a\17\8b\ 3\0\0\9f\r¸\f\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Pear/ReleaseInfo.php\92\ 1\0\0\1a\17\8bY\92\ 1\0\0o\93\8aö\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Repository/PearRepository.phpª\16\0\0\1a\17\8b\16\0\0)\9f\83\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/PlatformRepository.php\ 1\e\0\0\1a\17\8bY\ 1\e\0\0\ 3_Mì¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Repository/RepositoryFactory.php\95\11\0\0\1a\17\8bY\95\11\0\0\80\83§\1d\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/RepositoryInterface.phpÛ\ 1\0\0\1a\17\8b\ 1\0\0\92\11âÁ¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Repository/RepositoryManager.php,
36 \0\0\1a\17\8bY,
37 \0\0¾\85\\95\ 1\0\0\0\0\0\07\0\0\0src/Composer/Repository/RepositorySecurityException.phpo\0\0\0\1a\17\8bYo\0\0\0pÕ«ª¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/Vcs/BitbucketDriver.phpô\1e\0\0\1a\17\8b\1e\0\0\ 4x¤ü¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Vcs/FossilDriver.php \12\0\0\1a\17\8b\12\0\0]\8bÉQ¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Repository/Vcs/GitBitbucketDriver.phpê\ 5\0\0\1a\17\8b\ 5\0\0Ã\8e»\14\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/Vcs/GitDriver.phpØ\11\0\0\1a\17\8b\11\0\0Ý"T̶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Vcs/GitHubDriver.phpz+\0\0\1a\17\8bYz+\0\0\13\1fÚb¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Vcs/GitLabDriver.phpì!\0\0\1a\17\8bYì!\0\0.?j\19\ 1\0\0\0\0\0\01\0\0\0src/Composer/Repository/Vcs/HgBitbucketDriver.phpä\ 5\0\0\1a\17\8b\ 5\0\0i\9büà¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Repository/Vcs/HgDriver.phpe\12\0\0\1a\17\8bYe\12\0\0O!O\13\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/Vcs/PerforceDriver.phpO     \0\0\1a\17\8bYO \0\0@ËóN¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/Vcs/SvnDriver.php\15\e\0\0\1a\17\8bY\15\e\0\0\1dÕzï¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/Vcs/VcsDriver.phpæ
38 \0\0\1a\17\8b
39 \0\0eׯ-¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Repository/Vcs/VcsDriverInterface.php÷\ 2\0\0\1a\17\8b\ 2\0\0ÇX[\89\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/VcsRepository.php´\1e\0\0\1a\17\8b\1e\0\0\ 1ªÖG¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/Repository/WritableArrayRepository.php\ f\ 3\0\0\1a\17\8bY\ f\ 3\0\0¾G\17\ 1\0\0\0\0\0\07\0\0\0src/Composer/Repository/WritableRepositoryInterface.php\89\ 1\0\0\1a\17\8bY\89\ 1\0\0\91/sï¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Script/CommandEvent.phpW\0\0\0\1a\17\8bYW\0\0\0£VZt¶\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/Script/Event.phpµ\ 2\0\0\1a\17\8b\ 2\0\0lt¦M¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Script/PackageEvent.php\9c\0\0\0\1a\17\8bY\9c\0\0\0§ÿÉ\r\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Script/ScriptEvents.phpP\ 4\0\0\1a\17\8bYP\ 4\0\0\87\8f\ 4¶¶\ 1\0\0\0\0\0\0 \0\0\0src/Composer/SelfUpdate/Keys.php\9d\ 1\0\0\1a\17\8bY\9d\ 1\0\0\vîÊN¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/SelfUpdate/Versions.phpì\ 5\0\0\1a\17\8b\ 5\0\0͵\91\83\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Util/AuthHelper.phpË\ 3\0\0\1a\17\8b\ 3\0\0>zx\96\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/Bitbucket.php%\15\0\0\1a\17\8bY%\15\0\0n=gÓ¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Util/ComposerMirror.php±\ 4\0\0\1a\17\8b\ 4\0\0­½øض\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Util/ConfigValidator.phpu\12\0\0\1a\17\8bYu\12\0\0m\ 5áض\ 1\0\0\0\0\0\0"\0\0\0src/Composer/Util/ErrorHandler.php\87\ 4\0\0\1a\17\8bY\87\ 4\0\0He\1c\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Util/Filesystem.phps.\0\0\1a\17\8bYs.\0\0\9bÍ®à¶\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Git.phpn$\0\0\1a\17\8bYn$\0\05XÇ\ e\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/Util/GitHub.phpÏ
40 \0\0\1a\17\8b
41 \0\0ÁØ\å¶\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/Util/GitLab.php\99\f\0\0\1a\17\8bY\99\f\0\0\17BLF¶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/IniHelper.php\9d\ 2\0\0\1a\17\8bY\9d\ 2\0\0Çþ\82\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Util/NoProxyPattern.php¾\ 6\0\0\1a\17\8b\ 6\0\0Z+°m¶\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Perforce.php\1e2\0\0\1a\17\8bY\1e2\0\0­\ 65P¶\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Platform.phpü\ 4\0\0\1a\17\8b\ 4\0\0s­fç¶\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Util/ProcessExecutor.php\f\b\0\0\1a\17\8bY\f\b\0\0\88)sw¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Util/RemoteFilesystem.php°c\0\0\1a\17\8bY°c\0\0Î\95mo¶\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Silencer.phpò\ 2\0\0\1a\17\8b\ 2\0\0.\8e\7fܶ\ 1\0\0\0\0\0\0!\0\0\0src/Composer/Util/SpdxLicense.php\ 3\ 1\0\0\1a\17\8bY\ 3\ 1\0\0¾7
42 ñ¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Util/StreamContextFactory.phpÍ\ f\0\0\1a\17\8b\ f\0\0\8bK:8¶\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Svn.php¾\11\0\0\1a\17\8b\11\0\0Ík\93ܶ\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/TlsHelper.phpp
43 \0\0\1a\17\8bYp
44 \0\0¤eÞæ¶\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/XdebugHandler.php\93\ f\0\0\1a\17\8bY\93\ f\0\0\1cF·­¶\ 1\0\0\0\0\0\0\11\0\0\0src/bootstrap.php¹\ 1\0\0\1a\17\8b\ 1\0\0\15I}\9c\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Autoload/ClassLoader.php\8b4\0\0\1a\17\8bY\8b4\0\0Q\9f\94¼¶\ 1\0\0\0\0\0\0#\0\0\0res/composer-repository-schema.jsonð\ f\0\0\1a\17\8b\ f\0\0\81GÐà¶\ 1\0\0\0\0\0\0\18\0\0\0res/composer-schema.json_\93\0\0\1a\17\8bY_\93\0\0¤H\10õ¶\ 1\0\0\0\0\0\06\0\0\0vendor/composer/spdx-licenses/res/spdx-exceptions.jsoní\ 6\0\0\1a\17\8b\ 6\0\0ÆÅz±¶\ 1\0\0\0\0\0\04\0\0\0vendor/composer/spdx-licenses/res/spdx-licenses.jsonïf\0\0\1a\17\8bYïf\0\0"ï@\96\ 1\0\0\0\0\0\0*\0\0\0vendor/seld/cli-prompt/res/hiddeninput.exe\0$\0\0\1a\17\8bY\0$\0\0\95\8d¥v¶\ 1\0\0\0\0\0\0&\0\0\0vendor/symfony/console/Application.php¥V\0\0\1a\17\8bY¥V\0\0\15«8\88\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/console/Command/Command.php
45 #\0\0\1a\17\8bY
46 #\0\0\13¢\11Á¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Command/HelpCommand.phpÝ\a\0\0\1a\17\8b\a\0\0\99\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Command/ListCommand.phpZ\b\0\0\1a\17\8bYZ\b\0\0É£ \16\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/console/ConsoleEvents.phpï\0\0\0\1a\17\8b\0\0\0\rÕH¸¶\ 1\0\0\0\0\0\0<\0\0\0vendor/symfony/console/Descriptor/ApplicationDescription.phpß\b\0\0\1a\17\8b\b\0\0µ\8c°7¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Descriptor/Descriptor.php\9d\a\0\0\1a\17\8bY\9d\a\0\0\b;~Ķ\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/console/Descriptor/DescriptorInterface.phpü\0\0\0\1a\17\8b\0\0\0±Q\aµ¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Descriptor/JsonDescriptor.phpì\r\0\0\1a\17\8b\r\0\0á8-\8c\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/console/Descriptor/MarkdownDescriptor.php¹\ e\0\0\1a\17\8b\ e\0\0k\9f.a¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Descriptor/TextDescriptor.php\93\1e\0\0\1a\17\8bY\93\1e\0\0»]Ïø¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Descriptor/XmlDescriptor.php\ f\1c\0\0\1a\17\8bY\ f\1c\0\0\ 4\8bP$¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Event/ConsoleCommandEvent.php²\ 1\0\0\1a\17\8b\ 1\0\0Zk\89\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Event/ConsoleEvent.phpÅ\ 2\0\0\1a\17\8b\ 2\0\0ÒxÛ\¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/console/Event/ConsoleExceptionEvent.php\12\ 3\0\0\1a\17\8bY\12\ 3\0\0á\162é¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/console/Event/ConsoleTerminateEvent.phpz\ 2\0\0\1a\17\8bYz\ 2\0\0³,îL¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/console/Exception/CommandNotFoundException.phpÔ\ 1\0\0\1a\17\8b\ 1\0\0È÷ L¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/console/Exception/ExceptionInterface.phpf\0\0\0\1a\17\8bYf\0\0\0¡ABª¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/console/Exception/InvalidArgumentException.php¦\0\0\0\1a\17\8b\0\0\0Ö̽Z¶\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/console/Exception/InvalidOptionException.php¦\0\0\0\1a\17\8b\0\0\0\13Ë×H¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Exception/LogicException.php\92\0\0\0\1a\17\8bY\92\0\0\0ÍO\e¶\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/console/Exception/RuntimeException.php\96\0\0\0\1a\17\8bY\96\0\0\0Ùí,6¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Formatter/OutputFormatter.php\f\ e\0\0\1a\17\8bY\f\ e\0\0\83á&B¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/console/Formatter/OutputFormatterInterface.php\8c\ 1\0\0\1a\17\8bY\8c\ 1\0\0òññÀ¶\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyle.phpL\10\0\0\1a\17\8bYL\10\0\0\8a\908<¶\ 1\0\0\0\0\0\0B\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php\86\ 1\0\0\1a\17\8bY\86\ 1\0\0ÝRÚ­¶\ 1\0\0\0\0\0\0>\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyleStack.phpL\ 5\0\0\1a\17\8bYL\ 5\0\0.=\16\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/console/Helper/DebugFormatterHelper.phpx\b\0\0\1a\17\8bYx\b\0\0N©Ø¼¶\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/console/Helper/DescriptorHelper.phpz\ 5\0\0\1a\17\8bYz\ 5\0\0fÉÚý¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Helper/DialogHelper.phpú\1e\0\0\1a\17\8b\1e\0\0hX\8fö\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/console/Helper/FormatterHelper.phpc\ 4\0\0\1a\17\8bYc\ 4\0\0\93ý«N¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/console/Helper/Helper.php¬\a\0\0\1a\17\8b\a\0\0OÜs¢¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/console/Helper/HelperInterface.phpç\0\0\0\1a\17\8b\0\0\0 \18Çã¶\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/console/Helper/HelperSet.phpÐ\a\0\0\1a\17\8b\a\0\0a\88~\r\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/console/Helper/InputAwareHelper.phpc\ 1\0\0\1a\17\8bYc\ 1\0\0ñø\90\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Helper/ProcessHelper.phpÑ     \0\0\1a\17\8bYÑ \0\0@±ã\81\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Helper/ProgressBar.phps%\0\0\1a\17\8bYs%\0\0鯦\81\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Helper/ProgressHelper.php\\e\0\0\1a\17\8bY\\e\0\0\12?\8bá¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Helper/ProgressIndicator.phpK\14\0\0\1a\17\8bYK\14\0\0í\1cÍ°¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Helper/QuestionHelper.php\7f\e\0\0\1a\17\8bY\7f\e\0\0a4Íý¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/console/Helper/SymfonyQuestionHelper.phpl
47 \0\0\1a\17\8bYl
48 \0\0\1e÷ÞL¶\ 1\0\0\0\0\0\0'\0\0\0vendor/symfony/console/Helper/Table.php¢*\0\0\1a\17\8bY¢*\0\0\0\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/console/Helper/TableCell.php\87\ 3\0\0\1a\17\8bY\87\ 3\0\0¨*æ\18\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Helper/TableHelper.php\13\f\0\0\1a\17\8bY\13\f\0\0¦pm\87\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Helper/TableSeparator.phpÍ\0\0\0\1a\17\8b\0\0\0Qßa²¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Helper/TableStyle.php\1f
49 \0\0\1a\17\8bY\1f
50 \0\0PÞµ¦¶\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/console/Input/ArgvInput.php\14\15\0\0\1a\17\8bY\14\15\0\0¯Ü\10\9c\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/console/Input/ArrayInput.php_
51 \0\0\1a\17\8bY_
52 \0\0[µðɶ\ 1\0\0\0\0\0\0&\0\0\0vendor/symfony/console/Input/Input.phpª\v\0\0\1a\17\8b\v\0\0\ 3\1a\1f¶¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Input/InputArgument.php\12\ 6\0\0\1a\17\8bY\12\ 6\0\0ÁÜ\17\90\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Input/InputAwareInterface.php\9a\0\0\0\1a\17\8bY\9a\0\0\0\87jT\9f\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Input/InputDefinition.php\96\19\0\0\1a\17\8bY\96\19\0\00Oly¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Input/InputInterface.php\9f\ 3\0\0\1a\17\8bY\9f\ 3\0\0¥R6Û¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Input/InputOption.php\1c\f\0\0\1a\17\8bY\1c\f\0\0\87¹§\7f\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Input/StringInput.php\98\ 6\0\0\1a\17\8bY\98\ 6\0\0 \1dÚ¤¶\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/console/LICENSE)\ 4\0\0\1a\17\8bY)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Logger/ConsoleLogger.php< \0\0\1a\17\8bY< \0\0:âÇl¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Output/BufferedOutput.phpb\ 1\0\0\1a\17\8bYb\ 1\0\0çA?¦¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Output/ConsoleOutput.phpµ\a\0\0\1a\17\8b\a\0\0
53 ¢S\¶\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/console/Output/ConsoleOutputInterface.phpå\0\0\0\1a\17\8b\0\0\0rNô\0\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Output/NullOutput.phpÏ\ 3\0\0\1a\17\8b\ 3\0\0®\98\8b\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/console/Output/Output.php\9a    \0\0\1a\17\8bY\9a \0\001 ý¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/console/Output/OutputInterface.php\1c\ 3\0\0\1a\17\8bY\1c\ 3\0\0\1aÓÚ>¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Output/StreamOutput.phpÄ\ 5\0\0\1a\17\8b\ 5\0\0õ\1aí\95\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/console/Question/ChoiceQuestion.phpy
54 \0\0\1a\17\8bYy
55 \0\0.\ f\Q¶\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/console/Question/ConfirmationQuestion.phpé\ 2\0\0\1a\17\8b\ 2\0\0\83\17Q@¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Question/Question.php#
56 \0\0\1a\17\8bY#
57 \0\0e¯ \ e\ 1\0\0\0\0\0\0 \0\0\0vendor/symfony/console/Shell.phpé\ f\0\0\1a\17\8b\ f\0\0½fü\91\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Style/OutputStyle.php_\ 5\0\0\1a\17\8bY_\ 5\0\0\ 4û\ 5µ¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Style/StyleInterface.phpÔ\ 3\0\0\1a\17\8b\ 3\0\0 ßÊj¶\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Style/SymfonyStyle.php¼\1f\0\0\1a\17\8b\1f\0\0öÅPg¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Tester/ApplicationTester.phpÔ\ 5\0\0\1a\17\8b\ 5\0\0¬ì¤d¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Tester/CommandTester.php¯\ 6\0\0\1a\17\8b\ 6\0\0{8"÷¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/debug/BufferingLogger.phpt\ 1\0\0\1a\17\8bYt\ 1\0\0=\0hܶ\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/debug/Debug.phpé\ 2\0\0\1a\17\8b\ 2\0\0Àxa?¶\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/debug/DebugClassLoader.phpï\1d\0\0\1a\17\8b\1d\0\0ß<§ê¶\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/debug/ErrorHandler.php\80C\0\0\1a\17\8bY\80C\0\0¥æõ¾¶\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/debug/Exception/ClassNotFoundException.php\84\ 1\0\0\1a\17\8bY\84\ 1\0\0n\90¡\85\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/debug/Exception/ContextErrorException.php\98\ 1\0\0\1a\17\8bY\98\ 1\0\0-
58 d2¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/debug/Exception/DummyException.php\ 2\ 1\0\0\1a\17\8bY\ 2\ 1\0\0-"ûd¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/debug/Exception/FatalErrorException.phpï\ 6\0\0\1a\17\8b\ 6\0\0æ\ffz¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/debug/Exception/FatalThrowableError.phpD\ 2\0\0\1a\17\8bYD\ 2\0\0¡\fÂí¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/debug/Exception/FlattenException.php²\16\0\0\1a\17\8b\16\0\0HòÑ\ f\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/debug/Exception/OutOfMemoryException.php~\0\0\0\1a\17\8bY~\0\0\0ë¨oâ¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/debug/Exception/UndefinedFunctionException.php\88\ 1\0\0\1a\17\8bY\88\ 1\0\0¢G\82\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/debug/Exception/UndefinedMethodException.php\86\ 1\0\0\1a\17\8bY\86\ 1\0\0¨LÚ:¶\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/debug/ExceptionHandler.php\1f3\0\0\1a\17\8bY\1f3\0\0%\E\17\ 1\0\0\0\0\0\0I\0\0\0vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php7\12\0\0\1a\17\8bY7\12\0\0Ñj/=¶\ 1\0\0\0\0\0\0E\0\0\0vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php\ 3\ 1\0\0\1a\17\8bY\ 3\ 1\0\0ĹBV¶\ 1\0\0\0\0\0\0M\0\0\0vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.phpu\b\0\0\1a\17\8bYu\b\0\0éj\ 3\19\ 1\0\0\0\0\0\0K\0\0\0vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.phpN\ 5\0\0\1a\17\8bYN\ 5\0\0Ço-ç¶\ 1\0\0\0\0\0\0\1c\0\0\0vendor/symfony/debug/LICENSE)\ 4\0\0\1a\17\8bY)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0:\0\0\0vendor/symfony/filesystem/Exception/ExceptionInterface.phpi\0\0\0\1a\17\8bYi\0\0\0$ ÿ\9b\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/filesystem/Exception/FileNotFoundException.php¼\ 1\0\0\1a\17\8b\ 1\0\0pí\¶¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/filesystem/Exception/IOException.php\87\ 1\0\0\1a\17\8bY\87\ 1\0\0\80ü#Ѷ\ 1\0\0\0\0\0\0<\0\0\0vendor/symfony/filesystem/Exception/IOExceptionInterface.php¦\0\0\0\1a\17\8b\0\0\0jÙwM¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/filesystem/Filesystem.php¦1\0\0\1a\17\8bY¦1\0\0\8dò\86\ 1\0\0\0\0\0\0!\0\0\0vendor/symfony/filesystem/LICENSE)\ 4\0\0\1a\17\8bY)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/filesystem/LockHandler.php¢\ 5\0\0\1a\17\8b\ 5\0\0D\91;i¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/finder/Adapter/AbstractAdapter.php\\v\0\0\1a\17\8bY\\v\0\0Æ\93É\80\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/finder/Adapter/AbstractFindAdapter.php\91\19\0\0\1a\17\8bY\91\19\0\0ao¦È¶\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/finder/Adapter/AdapterInterface.php±\ 3\0\0\1a\17\8b\ 3\0\0ä»Ê&¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/finder/Adapter/BsdFindAdapter.php2\a\0\0\1a\17\8bY2\a\0\0Q/ÇC¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/finder/Adapter/GnuFindAdapter.php\15\a\0\0\1a\17\8bY\15\a\0\0\r\17¡¾¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/finder/Adapter/PhpAdapter.phpô\a\0\0\1a\17\8b\a\0\0\16\1d:?¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/finder/Comparator/Comparator.php\8c\ 3\0\0\1a\17\8bY\8c\ 3\0\0\16wþT¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/finder/Comparator/DateComparator.php%\ 3\0\0\1a\17\8bY%\ 3\0\0L¿EǶ\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/finder/Comparator/NumberComparator.php~\ 3\0\0\1a\17\8bY~\ 3\0\0\94\87 x¶\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/finder/Exception/AccessDeniedException.php\84\0\0\0\1a\17\8bY\84\0\0\0½¾s\9c\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/finder/Exception/AdapterFailureException.php¯\ 2\0\0\1a\17\8b\ 2\0\0\9côÔÁ¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/finder/Exception/ExceptionInterface.php\84\0\0\0\1a\17\8bY\84\0\0\0\1cGz-¶\ 1\0\0\0\0\0\0A\0\0\0vendor/symfony/finder/Exception/OperationNotPermitedException.php)\ 1\0\0\1a\17\8bY)\ 1\0\0ìcj=¶\ 1\0\0\0\0\0\0@\0\0\0vendor/symfony/finder/Exception/ShellCommandFailureException.phpÂ\ 2\0\0\1a\17\8b\ 2\0\0\19v\82ȶ\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/finder/Expression/Expression.php\a\ 6\0\0\1a\17\8bY\a\ 6\0\0µoÔ\ 6\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/finder/Expression/Glob.phpi\ 4\0\0\1a\17\8bYi\ 4\0\0@\8a\eº¶\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/finder/Expression/Regex.php\ 6\ f\0\0\1a\17\8bY\ 6\ f\0\0p8\0\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/finder/Expression/ValueInterface.phpÍ\ 1\0\0\1a\17\8b\ 1\0\0²~øb¶\ 1\0\0\0\0\0\0 \0\0\0vendor/symfony/finder/Finder.phpÂ-\0\0\1a\17\8bYÂ-\0\0\1e\98f´¶\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/finder/Glob.phpK\ 5\0\0\1a\17\8bYK\ 5\0\0já±n¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/finder/Iterator/CustomFilterIterator.php]\ 2\0\0\1a\17\8bY]\ 2\0\0tà±µ¶\ 1\0\0\0\0\0\0:\0\0\0vendor/symfony/finder/Iterator/DateRangeFilterIterator.phpz\ 2\0\0\1a\17\8bYz\ 2\0\0ÂT-\ 5\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/finder/Iterator/DepthRangeFilterIterator.phpð\ 1\0\0\1a\17\8b\ 1\0\0ß0\99\ 4\ 1\0\0\0\0\0\0A\0\0\0vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.phpï\ 5\0\0\1a\17\8b\ 5\0\0¾\8dÒâ¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/finder/Iterator/FilePathsIterator.php \ 6\0\0\1a\17\8b\ 6\0\0fQCe¶\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/finder/Iterator/FileTypeFilterIterator.php\\ 2\0\0\1a\17\8bY\\ 2\0\0p\91'\98\ 1\0\0\0\0\0\0<\0\0\0vendor/symfony/finder/Iterator/FilecontentFilterIterator.php5\ 2\0\0\1a\17\8bY5\ 2\0\0\9aí\1f\14\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/finder/Iterator/FilenameFilterIterator.phpr\ 1\0\0\1a\17\8bYr\ 1\0\0t\b\1a\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/finder/Iterator/FilterIterator.phpÃ\ 2\0\0\1a\17\8b\ 2\0\0\9a+µÞ¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php/\ 5\0\0\1a\17\8bY/\ 5\0\0»Ç\1f\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/finder/Iterator/PathFilterIterator.phpÏ\ 1\0\0\1a\17\8b\ 1\0\0º\1cªÇ¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php\15   \0\0\1a\17\8bY\15 \0\0ìt\90¶¶\ 1\0\0\0\0\0\0:\0\0\0vendor/symfony/finder/Iterator/SizeRangeFilterIterator.phpg\ 2\0\0\1a\17\8bYg\ 2\0\0\97é¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/finder/Iterator/SortableIterator.php,\ 6\0\0\1a\17\8bY,\ 6\0\0\96\1c\ 1\0\0\0\0\0\0\1d\0\0\0vendor/symfony/finder/LICENSE)\ 4\0\0\1a\17\8bY)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0'\0\0\0vendor/symfony/finder/Shell/Command.phpS\v\0\0\1a\17\8bYS\v\0\0cC\85\99\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/finder/Shell/Shell.phpp\ 4\0\0\1a\17\8bYp\ 4\0\0\18Ó}g¶\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/finder/SplFileInfo.phpÿ\ 2\0\0\1a\17\8bYÿ\ 2\0\0Ë\rOÀ¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/polyfill-mbstring/LICENSE)\ 4\0\0\1a\17\8bY)\ 4\0\0î*L\14\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/polyfill-mbstring/Mbstring.phpÄ6\0\0\1a\17\8bYÄ6\0\0U.\17ݶ\ 1\0\0\0\0\0\0@\0\0\0vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php2A\0\0\1a\17\8bY2A\0\0½\11=¨¶\ 1\0\0\0\0\0\0@\0\0\0vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php¡A\0\0\1a\17\8bY¡A\0\0\ eÚ    Í¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/polyfill-mbstring/bootstrap.php±\ f\0\0\1a\17\8b\ f\0\0|\8a©Ò¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/process/Exception/ExceptionInterface.phpf\0\0\0\1a\17\8bYf\0\0\0]ö>T¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/process/Exception/InvalidArgumentException.php¨\0\0\0\1a\17\8b\0\0\0ÐÀ+_¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/process/Exception/LogicException.php\94\0\0\0\1a\17\8bY\94\0\0\0 ³ãñ¶\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/process/Exception/ProcessFailedException.phpx\ 3\0\0\1a\17\8bYx\ 3\0\0¨Ìzy¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/process/Exception/ProcessTimedOutException.php\1f\ 4\0\0\1a\17\8bY\1f\ 4\0\0.     Ãá¶\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/process/Exception/RuntimeException.php\98\0\0\0\1a\17\8bY\98\0\0\0¢\eØ:¶\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/process/ExecutableFinder.php\9b\ 4\0\0\1a\17\8bY\9b\ 4\0\0ý\82m\9b\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/process/LICENSE)\ 4\0\0\1a\17\8bY)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/process/PhpExecutableFinder.phpg\ 4\0\0\1a\17\8bYg\ 4\0\0\8dçµ\ 6\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/process/PhpProcess.phpü\ 3\0\0\1a\17\8b\ 3\0\0_\17\97\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/process/Pipes/AbstractPipes.php^\a\0\0\1a\17\8bY^\a\0\0%s\85ï¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/process/Pipes/PipesInterface.phpD\ 1\0\0\1a\17\8bYD\ 1\0\0vØ\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/process/Pipes/UnixPipes.phpå\a\0\0\1a\17\8b\a\0\0\ 1È¥\ 4\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/process/Pipes/WindowsPipes.php\8d\v\0\0\1a\17\8bY\8d\v\0\0\85®\1e\ 1\0\0\0\0\0\0"\0\0\0vendor/symfony/process/Process.php§R\0\0\1a\17\8bY§R\0\0+Á¥\1f\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/process/ProcessBuilder.phpã
59 \0\0\1a\17\8b
60 \0\0ʧ°\88\ 1\0\0\0\0\0\0'\0\0\0vendor/symfony/process/ProcessUtils.phpK\ 6\0\0\1a\17\8bYK\ 6\0\0µ½~ò¶\ 1\0\0\0\0\0\0\1c\0\0\0vendor/seld/jsonlint/LICENSE"\ 4\0\0\1a\17\8bY"\ 4\0\0a\83sy¶\ 1\0\0\0\0\0\0@\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php*\ 1\0\0\1a\17\8bY*\ 1\0\0\19\95pñ¶\ 1\0\0\0\0\0\05\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php/2\0\0\1a\17\8bY/2\0\0­ß\98ö¶\ 1\0\0\0\0\0\00\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php\ 6\ f\0\0\1a\17\8bY\ 6\ f\0\0%ÿ3N¶\ 1\0\0\0\0\0\0;\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php\1e\ 1\0\0\1a\17\8bY\1e\ 1\0\0\89²\10ñ¶\ 1\0\0\0\0\0\04\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/Undefined.php>\0\0\0\1a\17\8bY>\0\0\0ÿq\9f\9f\ 1\0\0\0\0\0\0\1e\0\0\0vendor/seld/cli-prompt/LICENSE"\ 4\0\0\1a\17\8bY"\ 4\0\0\88ñ?e¶\ 1\0\0\0\0\0\0&\0\0\0vendor/seld/cli-prompt/res/example.php'\ 1\0\0\1a\17\8bY'\ 1\0\0I\1c\ 5£¶\ 1\0\0\0\0\0\0(\0\0\0vendor/seld/cli-prompt/src/CliPrompt.phpC\ 6\0\0\1a\17\8bYC\ 6\0\0Ð}\8d\ 1\0\0\0\0\0\0(\0\0\0vendor/justinrainbow/json-schema/LICENSE \ 4\0\0\1a\17\8b\ 4\0\0ºç\ 6©¶\ 1\0\0\0\0\0\0.\0\0\0vendor/justinrainbow/json-schema/demo/demo.phpñ\ 1\0\0\1a\17\8b\ 1\0\0f\e\12\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php¡      \0\0\1a\17\8bY¡ \0\0\86wÌl¶\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php.\r\0\0\1a\17\8bY.\r\0\0[÷3í¶\ 1\0\0\0\0\0\0J\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php\f\ e\0\0\1a\17\8bY\f\ e\0\0Òé`\13\ 1\0\0\0\0\0\0S\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php¼\ 1\0\0\1a\17\8b\ 1\0\0ÿ Q\9c\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php]\ 3\0\0\1a\17\8bY]\ 3\0\0V\8eU<¶\ 1\0\0\0\0\0\0G\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php;\r\0\0\1a\17\8bY;\r\0\0!/)\18\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php\85\14\0\0\1a\17\8bY\85\14\0\0\93T\9cÚ¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php\9a
61 \0\0\1a\17\8bY\9a
62 \0\0\15\1ez&¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.phpÃ\11\0\0\1a\17\8b\11\0\0©Å¼x¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.phpN \0\0\1a\17\8bYN \0\0QÓmV¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php\7f\ 4\0\0\1a\17\8bY\7f\ 4\0\0¥w\9a\87\ 1\0\0\0\0\0\0X\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.phpa\ 4\0\0\1a\17\8bYa\ 4\0\0\v     qö\ 1\0\0\0\0\0\0Y\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.phpp\ 2\0\0\1a\17\8bYp\ 2\0\0\12r\1fë¶\ 1\0\0\0\0\0\0\\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php\89\ 1\0\0\1a\17\8bY\89\ 1\0\0\93µ+j¶\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php&\ f\0\0\1a\17\8bY&\ f\0\04\98©T¶\ 1\0\0\0\0\0\0S\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.php\ e!\0\0\1a\17\8bY\ e!\0\0\90Ò¶Z¶\ 1\0\0\0\0\0\0F\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.phpè\ 6\0\0\1a\17\8b\ 6\0\0\ 6{N\96\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.phpI\0\0\0\1a\17\8bYI\0\0\0%|\19°¶\ 1\0\0\0\0\0\0V\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php\95\0\0\0\1a\17\8bY\95\0\0\0\8bàG\ 5\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.phpl\0\0\0\1a\17\8bYl\0\0\0A!L׶\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.phpl\0\0\0\1a\17\8bYl\0\0\0è2÷þ¶\ 1\0\0\0\0\0\0]\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.phpu\0\0\0\1a\17\8bYu\0\0\0=hç\a\ 1\0\0\0\0\0\0W\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.phpw\0\0\0\1a\17\8bYw\0\0\0N-ò[¶\ 1\0\0\0\0\0\0S\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.phpÞ\ 2\0\0\1a\17\8b\ 2\0\0\r
63\ 1\0\0\0\0\0\0W\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.phpo\0\0\0\1a\17\8bYo\0\0\0píÛù¶\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php\85\0\0\0\1a\17\8bY\85\0\0\0\b%\85\97\ 1\0\0\0\0\0\0^\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php\80\0\0\0\1a\17\8bY\80\0\0\0u-#1¶\ 1\0\0\0\0\0\0R\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.phpj\0\0\0\1a\17\8bYj\0\0\0å\1a>\8f\ 1\0\0\0\0\0\0Q\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.phpf\0\0\0\1a\17\8bYf\0\0\0¬¤\84þ¶\ 1\0\0\0\0\0\0K\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.phpþ\ 5\0\0\1a\17\8b\ 5\0\0M\8f\84õ¶\ 1\0\0\0\0\0\0;\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php \ 2\0\0\1a\17\8b\ 2\0\0f4÷³¶\ 1\0\0\0\0\0\0A\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php\84\f\0\0\1a\17\8bY\84\f\0\0Nt³è¶\ 1\0\0\0\0\0\0J\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php\ 1\ 1\0\0\1a\17\8bY\ 1\ 1\0\0o\8a+}¶\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.phpá\0\0\0\1a\17\8b\0\0\0[þA\81\ 1\0\0\0\0\0\0G\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php¥\ 4\0\0\1a\17\8b\ 4\0\0Ô§Lb¶\ 1\0\0\0\0\0\0R\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php%\ 5\0\0\1a\17\8bY%\ 5\0\05"\10 ¶\ 1\0\0\0\0\0\0R\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php,\ 2\0\0\1a\17\8bY,\ 2\0\01\955þ¶\ 1\0\0\0\0\0\0X\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php®\0\0\0\1a\17\8b\0\0\0ÿ\8bÁå¶\ 1\0\0\0\0\0\0C\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php\96  \0\0\1a\17\8bY\96 \0\0=&ßͶ\ 1\0\0\0\0\0\0D\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php&\13\0\0\1a\17\8bY&\13\0\0¼î\82¢¶\ 1\0\0\0\0\0\0H\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php\83\0\0\0\1a\17\8bY\83\0\0\0\12J\80\1f\ 1\0\0\0\0\0\0I\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php\85\0\0\0\1a\17\8bY\85\0\0\0íæ\e\ 1\0\0\0\0\0\0=\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Validator.phpn\ 5\0\0\1a\17\8bYn\ 5\0\0\90Ñ|§¶\ 1\0\0\0\0\0\0%\0\0\0vendor/composer/spdx-licenses/LICENSE\1c\ 4\0\0\1a\17\8bY\1c\ 4\0\0\ 6Bhí¶\ 1\0\0\0\0\0\02\0\0\0vendor/composer/spdx-licenses/src/SpdxLicenses.phpç\11\0\0\1a\17\8b\11\0\0·\96U ¶\ 1\0\0\0\0\0\0\1e\0\0\0vendor/composer/semver/LICENSE\1c\ 4\0\0\1a\17\8bY\1c\ 4\0\0\ 6Bhí¶\ 1\0\0\0\0\0\0)\0\0\0vendor/composer/semver/src/Comparator.php\ 2\ 4\0\0\1a\17\8bY\ 2\ 4\0\0wl\83ï¶\ 1\0\0\0\0\0\0<\0\0\0vendor/composer/semver/src/Constraint/AbstractConstraint.php×\ 2\0\0\1a\17\8b\ 2\0\0õî>\8e\ 1\0\0\0\0\0\04\0\0\0vendor/composer/semver/src/Constraint/Constraint.phpª\f\0\0\1a\17\8b\f\0\0ÇO7²¶\ 1\0\0\0\0\0\0=\0\0\0vendor/composer/semver/src/Constraint/ConstraintInterface.phpß\0\0\0\1a\17\8b\0\0\00C,\87\ 1\0\0\0\0\0\09\0\0\0vendor/composer/semver/src/Constraint/EmptyConstraint.phpé\ 1\0\0\1a\17\8b\ 1\0\0!-Ø\99\ 1\0\0\0\0\0\09\0\0\0vendor/composer/semver/src/Constraint/MultiConstraint.php1\ 5\0\0\1a\17\8bY1\ 5\0\0í xU¶\ 1\0\0\0\0\0\0%\0\0\0vendor/composer/semver/src/Semver.phpv\ 6\0\0\1a\17\8bYv\ 6\0\0\8b×È\9b\ 1\0\0\0\0\0\0,\0\0\0vendor/composer/semver/src/VersionParser.php¿*\0\0\1a\17\8bY¿*\0\0\13)mƶ\ 1\0\0\0\0\0\0!\0\0\0vendor/composer/ca-bundle/LICENSE\1c\ 4\0\0\1a\17\8bY\1c\ 4\0\0*!^`¶\ 1\0\0\0\0\0\0*\0\0\0vendor/composer/ca-bundle/src/CaBundle.php½\e\0\0\1a\17\8b\e\0\0e\1c\e\1e\ 1\0\0\0\0\0\0\16\0\0\0vendor/psr/log/LICENSE=\ 4\0\0\1a\17\8bY=\ 4\0\0\8e\ 1\0\0\0\0\0\0)\0\0\0vendor/psr/log/Psr/Log/AbstractLogger.php;\ 4\0\0\1a\17\8bY;\ 4\0\0ñ>3[¶\ 1\0\0\0\0\0\03\0\0\0vendor/psr/log/Psr/Log/InvalidArgumentException.php`\0\0\0\1a\17\8bY`\0\0\0 \88X1¶\ 1\0\0\0\0\0\0#\0\0\0vendor/psr/log/Psr/Log/LogLevel.phpû\0\0\0\1a\17\8b\0\0\0jðñ8¶\ 1\0\0\0\0\0\0/\0\0\0vendor/psr/log/Psr/Log/LoggerAwareInterface.php|\0\0\0\1a\17\8bY|\0\0\0$\13£\88\ 1\0\0\0\0\0\0+\0\0\0vendor/psr/log/Psr/Log/LoggerAwareTrait.php§\0\0\0\1a\17\8b\0\0\0T½úB¶\ 1\0\0\0\0\0\0*\0\0\0vendor/psr/log/Psr/Log/LoggerInterface.phpÆ\ 2\0\0\1a\17\8b\ 2\0\0»\12sg¶\ 1\0\0\0\0\0\0&\0\0\0vendor/psr/log/Psr/Log/LoggerTrait.phpi\ 4\0\0\1a\17\8bYi\ 4\0\035§Þ¶\ 1\0\0\0\0\0\0%\0\0\0vendor/psr/log/Psr/Log/NullLogger.php\9e\0\0\0\1a\17\8bY\9e\0\0\0Ç\ 2Ã\1f\ 1\0\0\0\0\0\03\0\0\0vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.phpü\f\0\0\1a\17\8b\f\0\0iq0ض\ 1\0\0\0\0\0\0\13\0\0\0vendor/autoload.php\82\0\0\0\1a\17\8bY\82\0\0\0\82ñUç¶\ 1\0\0\0\0\0\0'\0\0\0vendor/composer/autoload_namespaces.phpd\0\0\0\1a\17\8bYd\0\0\0Z¡¦H¶\ 1\0\0\0\0\0\0!\0\0\0vendor/composer/autoload_psr4.php\98\ 4\0\0\1a\17\8bY\98\ 4\0\0\9e\1c{¢¶\ 1\0\0\0\0\0\0%\0\0\0vendor/composer/autoload_classmap.phpd\0\0\0\1a\17\8bYd\0\0\0Z¡¦H¶\ 1\0\0\0\0\0\0"\0\0\0vendor/composer/autoload_files.phpÃ\0\0\0\1a\17\8b\0\0\0ÒÂür¶\ 1\0\0\0\0\0\0!\0\0\0vendor/composer/autoload_real.phpI\a\0\0\1a\17\8bYI\a\0\0]\90\¦¶\ 1\0\0\0\0\0\0#\0\0\0vendor/composer/autoload_static.php¬ \0\0\1a\17\8bY¬ \0\0ì9z
64\ 1\0\0\0\0\0\0\1f\0\0\0vendor/composer/ClassLoader.php\9c\18\0\0\1a\17\8bY\9c\18\0\0¥ÂåN¶\ 1\0\0\0\0\0\0(\0\0\0vendor/composer/ca-bundle/res/cacert.pem\ 1ÿ\ 3\0\1a\17\8bY\ 1ÿ\ 3\0-=Jn¶\ 1\0\0\0\0\0\0\f\0\0\0bin/composer\8b\ 5\0\0\1a\17\8bY\8b\ 5\0\0íeG\9a\ 1\0\0\0\0\0\0\a\0\0\0LICENSE.\ 4\0\0\1a\17\8bY.\ 4\0\0 Õ\b\ 3\ 1\0\0\0\0\0\0<?php
65
66
67
68
69
70
71
72
73
74
75
76 namespace Composer\Autoload;
77
78 use Composer\Config;
79 use Composer\EventDispatcher\EventDispatcher;
80 use Composer\Installer\InstallationManager;
81 use Composer\IO\IOInterface;
82 use Composer\Package\AliasPackage;
83 use Composer\Package\PackageInterface;
84 use Composer\Repository\InstalledRepositoryInterface;
85 use Composer\Util\Filesystem;
86 use Composer\Script\ScriptEvents;
87
88
89
90
91
92 class AutoloadGenerator
93 {
94
95
96
97 private $eventDispatcher;
98
99
100
101
102 private $io;
103
104
105
106
107 private $devMode = false;
108
109
110
111
112 private $classMapAuthoritative = false;
113
114
115
116
117 private $apcu = false;
118
119
120
121
122 private $runScripts = false;
123
124 public function __construct(EventDispatcher $eventDispatcher, IOInterface $io = null)
125 {
126 $this->eventDispatcher = $eventDispatcher;
127 $this->io = $io;
128 }
129
130 public function setDevMode($devMode = true)
131 {
132 $this->devMode = (bool) $devMode;
133 }
134
135
136
137
138
139
140
141 public function setClassMapAuthoritative($classMapAuthoritative)
142 {
143 $this->classMapAuthoritative = (bool) $classMapAuthoritative;
144 }
145
146
147
148
149
150
151 public function setApcu($apcu)
152 {
153 $this->apcu = (bool) $apcu;
154 }
155
156
157
158
159
160
161 public function setRunScripts($runScripts = true)
162 {
163 $this->runScripts = (bool) $runScripts;
164 }
165
166 public function dump(Config $config, InstalledRepositoryInterface $localRepo, PackageInterface $mainPackage, InstallationManager $installationManager, $targetDir, $scanPsr0Packages = false, $suffix = '')
167 {
168 if ($this->classMapAuthoritative) {
169
170  $scanPsr0Packages = true;
171 }
172 if ($this->runScripts) {
173 $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array(), array(
174 'optimize' => (bool) $scanPsr0Packages,
175 ));
176 }
177
178 $filesystem = new Filesystem();
179 $filesystem->ensureDirectoryExists($config->get('vendor-dir'));
180
181  
182  
183  $basePath = $filesystem->normalizePath(realpath(realpath(getcwd())));
184 $vendorPath = $filesystem->normalizePath(realpath(realpath($config->get('vendor-dir'))));
185 $useGlobalIncludePath = (bool) $config->get('use-include-path');
186 $prependAutoloader = $config->get('prepend-autoloader') === false ? 'false' : 'true';
187 $targetDir = $vendorPath.'/'.$targetDir;
188 $filesystem->ensureDirectoryExists($targetDir);
189
190 $vendorPathCode = $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true);
191 $vendorPathCode52 = str_replace('__DIR__', 'dirname(__FILE__)', $vendorPathCode);
192 $vendorPathToTargetDirCode = $filesystem->findShortestPathCode($vendorPath, realpath($targetDir), true);
193
194 $appBaseDirCode = $filesystem->findShortestPathCode($vendorPath, $basePath, true);
195 $appBaseDirCode = str_replace('__DIR__', '$vendorDir', $appBaseDirCode);
196
197 $namespacesFile = <<<EOF
198 <?php
199
200 // autoload_namespaces.php @generated by Composer
201
202 \$vendorDir = $vendorPathCode52;
203 \$baseDir = $appBaseDirCode;
204
205 return array(
206
207 EOF;
208
209 $psr4File = <<<EOF
210 <?php
211
212 // autoload_psr4.php @generated by Composer
213
214 \$vendorDir = $vendorPathCode52;
215 \$baseDir = $appBaseDirCode;
216
217 return array(
218
219 EOF;
220
221
222  $packageMap = $this->buildPackageMap($installationManager, $mainPackage, $localRepo->getCanonicalPackages());
223 $autoloads = $this->parseAutoloads($packageMap, $mainPackage);
224
225
226  foreach ($autoloads['psr-0'] as $namespace => $paths) {
227 $exportedPaths = array();
228 foreach ($paths as $path) {
229 $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
230 }
231 $exportedPrefix = var_export($namespace, true);
232 $namespacesFile .= "    $exportedPrefix => ";
233 $namespacesFile .= "array(".implode(', ', $exportedPaths)."),\n";
234 }
235 $namespacesFile .= ");\n";
236
237
238  foreach ($autoloads['psr-4'] as $namespace => $paths) {
239 $exportedPaths = array();
240 foreach ($paths as $path) {
241 $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
242 }
243 $exportedPrefix = var_export($namespace, true);
244 $psr4File .= "    $exportedPrefix => ";
245 $psr4File .= "array(".implode(', ', $exportedPaths)."),\n";
246 }
247 $psr4File .= ");\n";
248
249 $classmapFile = <<<EOF
250 <?php
251
252 // autoload_classmap.php @generated by Composer
253
254 \$vendorDir = $vendorPathCode52;
255 \$baseDir = $appBaseDirCode;
256
257 return array(
258
259 EOF;
260
261
262  $targetDirLoader = null;
263 $mainAutoload = $mainPackage->getAutoload();
264 if ($mainPackage->getTargetDir() && !empty($mainAutoload['psr-0'])) {
265 $levels = count(explode('/', $filesystem->normalizePath($mainPackage->getTargetDir())));
266 $prefixes = implode(', ', array_map(function ($prefix) {
267 return var_export($prefix, true);
268 }, array_keys($mainAutoload['psr-0'])));
269 $baseDirFromTargetDirCode = $filesystem->findShortestPathCode($targetDir, $basePath, true);
270
271 $targetDirLoader = <<<EOF
272
273     public static function autoload(\$class)
274     {
275         \$dir = $baseDirFromTargetDirCode . '/';
276         \$prefixes = array($prefixes);
277         foreach (\$prefixes as \$prefix) {
278             if (0 !== strpos(\$class, \$prefix)) {
279                 continue;
280             }
281             \$path = \$dir . implode('/', array_slice(explode('\\\\', \$class), $levels)).'.php';
282             if (!\$path = stream_resolve_include_path(\$path)) {
283                 return false;
284             }
285             require \$path;
286
287             return true;
288         }
289     }
290
291 EOF;
292 }
293
294 $blacklist = null;
295 if (!empty($autoloads['exclude-from-classmap'])) {
296 $blacklist = '{(' . implode('|', $autoloads['exclude-from-classmap']) . ')}';
297 }
298
299
300  $classMap = array();
301 if ($scanPsr0Packages) {
302 $namespacesToScan = array();
303
304
305  foreach (array('psr-0', 'psr-4') as $psrType) {
306 foreach ($autoloads[$psrType] as $namespace => $paths) {
307 $namespacesToScan[$namespace][] = array('paths' => $paths, 'type' => $psrType);
308 }
309 }
310
311 krsort($namespacesToScan);
312
313 foreach ($namespacesToScan as $namespace => $groups) {
314 foreach ($groups as $group) {
315 foreach ($group['paths'] as $dir) {
316 $dir = $filesystem->normalizePath($filesystem->isAbsolutePath($dir) ? $dir : $basePath.'/'.$dir);
317 if (!is_dir($dir)) {
318 continue;
319 }
320
321 $namespaceFilter = $namespace === '' ? null : $namespace;
322 $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, $namespaceFilter, $classMap);
323 }
324 }
325 }
326 }
327
328 foreach ($autoloads['classmap'] as $dir) {
329 $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, null, $classMap);
330 }
331
332 ksort($classMap);
333 foreach ($classMap as $class => $code) {
334 $classmapFile .= '    '.var_export($class, true).' => '.$code;
335 }
336 $classmapFile .= ");\n";
337
338 if (!$suffix) {
339 if (!$config->get('autoloader-suffix') && is_readable($vendorPath.'/autoload.php')) {
340 $content = file_get_contents($vendorPath.'/autoload.php');
341 if (preg_match('{ComposerAutoloaderInit([^:\s]+)::}', $content, $match)) {
342 $suffix = $match[1];
343 }
344 }
345
346 if (!$suffix) {
347 $suffix = $config->get('autoloader-suffix') ?: md5(uniqid('', true));
348 }
349 }
350
351 file_put_contents($targetDir.'/autoload_namespaces.php', $namespacesFile);
352 file_put_contents($targetDir.'/autoload_psr4.php', $psr4File);
353 file_put_contents($targetDir.'/autoload_classmap.php', $classmapFile);
354 $includePathFilePath = $targetDir.'/include_paths.php';
355 if ($includePathFileContents = $this->getIncludePathsFile($packageMap, $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
356 file_put_contents($includePathFilePath, $includePathFileContents);
357 } elseif (file_exists($includePathFilePath)) {
358 unlink($includePathFilePath);
359 }
360 $includeFilesFilePath = $targetDir.'/autoload_files.php';
361 if ($includeFilesFileContents = $this->getIncludeFilesFile($autoloads['files'], $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
362 file_put_contents($includeFilesFilePath, $includeFilesFileContents);
363 } elseif (file_exists($includeFilesFilePath)) {
364 unlink($includeFilesFilePath);
365 }
366 file_put_contents($targetDir.'/autoload_static.php', $this->getStaticFile($suffix, $targetDir, $vendorPath, $basePath, $staticPhpVersion));
367 file_put_contents($vendorPath.'/autoload.php', $this->getAutoloadFile($vendorPathToTargetDirCode, $suffix));
368 file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, (bool) $includePathFileContents, $targetDirLoader, (bool) $includeFilesFileContents, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath, $prependAutoloader, $staticPhpVersion));
369
370 $this->safeCopy(__DIR__.'/ClassLoader.php', $targetDir.'/ClassLoader.php');
371 $this->safeCopy(__DIR__.'/../../../LICENSE', $targetDir.'/LICENSE');
372
373 if ($this->runScripts) {
374 $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array(), array(
375 'optimize' => (bool) $scanPsr0Packages,
376 ));
377 }
378 }
379
380 private function addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist = null, $namespaceFilter = null, array $classMap = array())
381 {
382 foreach ($this->generateClassMap($dir, $blacklist, $namespaceFilter) as $class => $path) {
383 $pathCode = $this->getPathCode($filesystem, $basePath, $vendorPath, $path).",\n";
384 if (!isset($classMap[$class])) {
385 $classMap[$class] = $pathCode;
386 } elseif ($this->io && $classMap[$class] !== $pathCode && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($classMap[$class].' '.$path, '\\', '/'))) {
387 $this->io->writeError(
388 '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
389 ' was found in both "'.str_replace(array('$vendorDir . \'', "',\n"), array($vendorPath, ''), $classMap[$class]).'" and "'.$path.'", the first will be used.</warning>'
390 );
391 }
392 }
393
394 return $classMap;
395 }
396
397 private function generateClassMap($dir, $blacklist = null, $namespaceFilter = null, $showAmbiguousWarning = true)
398 {
399 return ClassMapGenerator::createMap($dir, $blacklist, $showAmbiguousWarning ? $this->io : null, $namespaceFilter);
400 }
401
402 public function buildPackageMap(InstallationManager $installationManager, PackageInterface $mainPackage, array $packages)
403 {
404
405  $packageMap = array(array($mainPackage, ''));
406
407 foreach ($packages as $package) {
408 if ($package instanceof AliasPackage) {
409 continue;
410 }
411 $this->validatePackage($package);
412
413 $packageMap[] = array(
414 $package,
415 $installationManager->getInstallPath($package),
416 );
417 }
418
419 return $packageMap;
420 }
421
422
423
424
425
426
427 protected function validatePackage(PackageInterface $package)
428 {
429 $autoload = $package->getAutoload();
430 if (!empty($autoload['psr-4']) && null !== $package->getTargetDir()) {
431 $name = $package->getName();
432 $package->getTargetDir();
433 throw new \InvalidArgumentException("PSR-4 autoloading is incompatible with the target-dir property, remove the target-dir in package '$name'.");
434 }
435 if (!empty($autoload['psr-4'])) {
436 foreach ($autoload['psr-4'] as $namespace => $dirs) {
437 if ($namespace !== '' && '\\' !== substr($namespace, -1)) {
438 throw new \InvalidArgumentException("psr-4 namespaces must end with a namespace separator, '$namespace' does not, use '$namespace\\'.");
439 }
440 }
441 }
442 }
443
444
445
446
447
448
449
450
451 public function parseAutoloads(array $packageMap, PackageInterface $mainPackage)
452 {
453 $mainPackageMap = array_shift($packageMap);
454 $sortedPackageMap = $this->sortPackageMap($packageMap);
455 $sortedPackageMap[] = $mainPackageMap;
456 array_unshift($packageMap, $mainPackageMap);
457
458 $psr0 = $this->parseAutoloadsType($packageMap, 'psr-0', $mainPackage);
459 $psr4 = $this->parseAutoloadsType($packageMap, 'psr-4', $mainPackage);
460 $classmap = $this->parseAutoloadsType(array_reverse($sortedPackageMap), 'classmap', $mainPackage);
461 $files = $this->parseAutoloadsType($sortedPackageMap, 'files', $mainPackage);
462 $exclude = $this->parseAutoloadsType($sortedPackageMap, 'exclude-from-classmap', $mainPackage);
463
464 krsort($psr0);
465 krsort($psr4);
466
467 return array(
468 'psr-0' => $psr0,
469 'psr-4' => $psr4,
470 'classmap' => $classmap,
471 'files' => $files,
472 'exclude-from-classmap' => $exclude,
473 );
474 }
475
476
477
478
479
480
481
482 public function createLoader(array $autoloads)
483 {
484 $loader = new ClassLoader();
485
486 if (isset($autoloads['psr-0'])) {
487 foreach ($autoloads['psr-0'] as $namespace => $path) {
488 $loader->add($namespace, $path);
489 }
490 }
491
492 if (isset($autoloads['psr-4'])) {
493 foreach ($autoloads['psr-4'] as $namespace => $path) {
494 $loader->addPsr4($namespace, $path);
495 }
496 }
497
498 if (isset($autoloads['classmap'])) {
499 $blacklist = null;
500 if (!empty($autoloads['exclude-from-classmap'])) {
501 $blacklist = '{(' . implode('|', $autoloads['exclude-from-classmap']) . ')}';
502 }
503
504 foreach ($autoloads['classmap'] as $dir) {
505 try {
506 $loader->addClassMap($this->generateClassMap($dir, $blacklist, null, false));
507 } catch (\RuntimeException $e) {
508 $this->io->writeError('<warning>'.$e->getMessage().'</warning>');
509 }
510 }
511 }
512
513 return $loader;
514 }
515
516 protected function getIncludePathsFile(array $packageMap, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
517 {
518 $includePaths = array();
519
520 foreach ($packageMap as $item) {
521 list($package, $installPath) = $item;
522
523 if (null !== $package->getTargetDir() && strlen($package->getTargetDir()) > 0) {
524 $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir()));
525 }
526
527 foreach ($package->getIncludePaths() as $includePath) {
528 $includePath = trim($includePath, '/');
529 $includePaths[] = empty($installPath) ? $includePath : $installPath.'/'.$includePath;
530 }
531 }
532
533 if (!$includePaths) {
534 return;
535 }
536
537 $includePathsCode = '';
538 foreach ($includePaths as $path) {
539 $includePathsCode .= "    " . $this->getPathCode($filesystem, $basePath, $vendorPath, $path) . ",\n";
540 }
541
542 return <<<EOF
543 <?php
544
545 // include_paths.php @generated by Composer
546
547 \$vendorDir = $vendorPathCode;
548 \$baseDir = $appBaseDirCode;
549
550 return array(
551 $includePathsCode);
552
553 EOF;
554 }
555
556 protected function getIncludeFilesFile(array $files, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
557 {
558 $filesCode = '';
559 foreach ($files as $fileIdentifier => $functionFile) {
560 $filesCode .= '    ' . var_export($fileIdentifier, true) . ' => '
561 . $this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile) . ",\n";
562 }
563
564 if (!$filesCode) {
565 return false;
566 }
567
568 return <<<EOF
569 <?php
570
571 // autoload_files.php @generated by Composer
572
573 \$vendorDir = $vendorPathCode;
574 \$baseDir = $appBaseDirCode;
575
576 return array(
577 $filesCode);
578
579 EOF;
580 }
581
582 protected function getPathCode(Filesystem $filesystem, $basePath, $vendorPath, $path)
583 {
584 if (!$filesystem->isAbsolutePath($path)) {
585 $path = $basePath . '/' . $path;
586 }
587 $path = $filesystem->normalizePath($path);
588
589 $baseDir = '';
590 if (strpos($path.'/', $vendorPath.'/') === 0) {
591 $path = substr($path, strlen($vendorPath));
592 $baseDir = '$vendorDir';
593
594 if ($path !== false) {
595 $baseDir .= " . ";
596 }
597 } else {
598 $path = $filesystem->normalizePath($filesystem->findShortestPath($basePath, $path, true));
599 if (!$filesystem->isAbsolutePath($path)) {
600 $baseDir = '$baseDir . ';
601 $path = '/' . $path;
602 }
603 }
604
605 if (preg_match('/\.phar.+$/', $path)) {
606 $baseDir = "'phar://' . " . $baseDir;
607 }
608
609 return $baseDir . (($path !== false) ? var_export($path, true) : "");
610 }
611
612 protected function getAutoloadFile($vendorPathToTargetDirCode, $suffix)
613 {
614 $lastChar = $vendorPathToTargetDirCode[strlen($vendorPathToTargetDirCode) - 1];
615 if ("'" === $lastChar || '"' === $lastChar) {
616 $vendorPathToTargetDirCode = substr($vendorPathToTargetDirCode, 0, -1).'/autoload_real.php'.$lastChar;
617 } else {
618 $vendorPathToTargetDirCode .= " . '/autoload_real.php'";
619 }
620
621 return <<<AUTOLOAD
622 <?php
623
624 // autoload.php @generated by Composer
625
626 require_once $vendorPathToTargetDirCode;
627
628 return ComposerAutoloaderInit$suffix::getLoader();
629
630 AUTOLOAD;
631 }
632
633 protected function getAutoloadRealFile($useClassMap, $useIncludePath, $targetDirLoader, $useIncludeFiles, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath, $prependAutoloader, $staticPhpVersion = 70000)
634 {
635 $file = <<<HEADER
636 <?php
637
638 // autoload_real.php @generated by Composer
639
640 class ComposerAutoloaderInit$suffix
641 {
642     private static \$loader;
643
644     public static function loadClassLoader(\$class)
645     {
646         if ('Composer\\Autoload\\ClassLoader' === \$class) {
647             require __DIR__ . '/ClassLoader.php';
648         }
649     }
650
651     public static function getLoader()
652     {
653         if (null !== self::\$loader) {
654             return self::\$loader;
655         }
656
657         spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'), true, $prependAutoloader);
658         self::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader();
659         spl_autoload_unregister(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'));
660
661
662 HEADER;
663
664 if ($useIncludePath) {
665 $file .= <<<'INCLUDE_PATH'
666         $includePaths = require __DIR__ . '/include_paths.php';
667         array_push($includePaths, get_include_path());
668         set_include_path(implode(PATH_SEPARATOR, $includePaths));
669
670
671 INCLUDE_PATH;
672 }
673
674 $file .= <<<STATIC_INIT
675         \$useStaticLoader = PHP_VERSION_ID >= $staticPhpVersion && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
676         if (\$useStaticLoader) {
677             require_once __DIR__ . '/autoload_static.php';
678
679             call_user_func(\Composer\Autoload\ComposerStaticInit$suffix::getInitializer(\$loader));
680         } else {
681
682 STATIC_INIT;
683
684 if (!$this->classMapAuthoritative) {
685 $file .= <<<'PSR04'
686             $map = require __DIR__ . '/autoload_namespaces.php';
687             foreach ($map as $namespace => $path) {
688                 $loader->set($namespace, $path);
689             }
690
691             $map = require __DIR__ . '/autoload_psr4.php';
692             foreach ($map as $namespace => $path) {
693                 $loader->setPsr4($namespace, $path);
694             }
695
696
697 PSR04;
698 }
699
700 if ($useClassMap) {
701 $file .= <<<'CLASSMAP'
702             $classMap = require __DIR__ . '/autoload_classmap.php';
703             if ($classMap) {
704                 $loader->addClassMap($classMap);
705             }
706
707 CLASSMAP;
708 }
709
710 $file .= "        }\n\n";
711
712 if ($this->classMapAuthoritative) {
713 $file .= <<<'CLASSMAPAUTHORITATIVE'
714         $loader->setClassMapAuthoritative(true);
715
716 CLASSMAPAUTHORITATIVE;
717 }
718
719 if ($this->apcu) {
720 $apcuPrefix = substr(base64_encode(md5(uniqid('', true), true)), 0, -3);
721 $file .= <<<APCU
722         \$loader->setApcuPrefix('$apcuPrefix');
723
724 APCU;
725 }
726
727 if ($useGlobalIncludePath) {
728 $file .= <<<'INCLUDEPATH'
729         $loader->setUseIncludePath(true);
730
731 INCLUDEPATH;
732 }
733
734 if ($targetDirLoader) {
735 $file .= <<<REGISTER_TARGET_DIR_AUTOLOAD
736         spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'autoload'), true, true);
737
738
739 REGISTER_TARGET_DIR_AUTOLOAD;
740 }
741
742 $file .= <<<REGISTER_LOADER
743         \$loader->register($prependAutoloader);
744
745
746 REGISTER_LOADER;
747
748 if ($useIncludeFiles) {
749 $file .= <<<INCLUDE_FILES
750         if (\$useStaticLoader) {
751             \$includeFiles = Composer\Autoload\ComposerStaticInit$suffix::\$files;
752         } else {
753             \$includeFiles = require __DIR__ . '/autoload_files.php';
754         }
755         foreach (\$includeFiles as \$fileIdentifier => \$file) {
756             composerRequire$suffix(\$fileIdentifier, \$file);
757         }
758
759
760 INCLUDE_FILES;
761 }
762
763 $file .= <<<METHOD_FOOTER
764         return \$loader;
765     }
766
767 METHOD_FOOTER;
768
769 $file .= $targetDirLoader;
770
771 if ($useIncludeFiles) {
772 return $file . <<<FOOTER
773 }
774
775 function composerRequire$suffix(\$fileIdentifier, \$file)
776 {
777     if (empty(\$GLOBALS['__composer_autoload_files'][\$fileIdentifier])) {
778         require \$file;
779
780         \$GLOBALS['__composer_autoload_files'][\$fileIdentifier] = true;
781     }
782 }
783
784 FOOTER;
785 }
786
787 return $file . <<<FOOTER
788 }
789
790 FOOTER;
791 }
792
793 protected function getStaticFile($suffix, $targetDir, $vendorPath, $basePath, &$staticPhpVersion)
794 {
795 $staticPhpVersion = 50600;
796
797 $file = <<<HEADER
798 <?php
799
800 // autoload_static.php @generated by Composer
801
802 namespace Composer\Autoload;
803
804 class ComposerStaticInit$suffix
805 {
806
807 HEADER;
808
809 $loader = new ClassLoader();
810
811 $map = require $targetDir . '/autoload_namespaces.php';
812 foreach ($map as $namespace => $path) {
813 $loader->set($namespace, $path);
814 }
815
816 $map = require $targetDir . '/autoload_psr4.php';
817 foreach ($map as $namespace => $path) {
818 $loader->setPsr4($namespace, $path);
819 }
820
821 $classMap = require $targetDir . '/autoload_classmap.php';
822 if ($classMap) {
823 $loader->addClassMap($classMap);
824 }
825
826 $filesystem = new Filesystem();
827
828 $vendorPathCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true, true) . " . '/";
829 $appBaseDirCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $basePath, true, true) . " . '/";
830
831 $absoluteVendorPathCode = ' => ' . substr(var_export(rtrim($vendorDir, '\\/') . '/', true), 0, -1);
832 $absoluteAppBaseDirCode = ' => ' . substr(var_export(rtrim($baseDir, '\\/') . '/', true), 0, -1);
833
834 $initializer = '';
835 $prefix = "\0Composer\Autoload\ClassLoader\0";
836 $prefixLen = strlen($prefix);
837 if (file_exists($targetDir . '/autoload_files.php')) {
838 $maps = array('files' => require $targetDir . '/autoload_files.php');
839 } else {
840 $maps = array();
841 }
842
843 foreach ((array) $loader as $prop => $value) {
844 if ($value && 0 === strpos($prop, $prefix)) {
845 $maps[substr($prop, $prefixLen)] = $value;
846 }
847 }
848
849 foreach ($maps as $prop => $value) {
850 if (count($value) > 32767) {
851
852  
853  $staticPhpVersion = 70000;
854 }
855 $value = var_export($value, true);
856 $value = str_replace($absoluteVendorPathCode, $vendorPathCode, $value);
857 $value = str_replace($absoluteAppBaseDirCode, $appBaseDirCode, $value);
858 $value = ltrim(preg_replace('/^ */m', '    $0$0', $value));
859
860 $file .= sprintf("    public static $%s = %s;\n\n", $prop, $value);
861 if ('files' !== $prop) {
862 $initializer .= "            \$loader->$prop = ComposerStaticInit$suffix::\$$prop;\n";
863 }
864 }
865
866 return $file . <<<INITIALIZER
867     public static function getInitializer(ClassLoader \$loader)
868     {
869         return \Closure::bind(function () use (\$loader) {
870 $initializer
871         }, null, ClassLoader::class);
872     }
873 }
874
875 INITIALIZER;
876 }
877
878 protected function parseAutoloadsType(array $packageMap, $type, PackageInterface $mainPackage)
879 {
880 $autoloads = array();
881
882 foreach ($packageMap as $item) {
883 list($package, $installPath) = $item;
884
885 $autoload = $package->getAutoload();
886 if ($this->devMode && $package === $mainPackage) {
887 $autoload = array_merge_recursive($autoload, $package->getDevAutoload());
888 }
889
890
891  if (!isset($autoload[$type]) || !is_array($autoload[$type])) {
892 continue;
893 }
894 if (null !== $package->getTargetDir() && $package !== $mainPackage) {
895 $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir()));
896 }
897
898 foreach ($autoload[$type] as $namespace => $paths) {
899 foreach ((array) $paths as $path) {
900 if (($type === 'files' || $type === 'classmap' || $type === 'exclude-from-classmap') && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
901
902  if ($package === $mainPackage) {
903 $targetDir = str_replace('\\<dirsep\\>', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '<dirsep>', $package->getTargetDir())));
904 $path = ltrim(preg_replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/');
905 } else {
906
907  $path = $package->getTargetDir() . '/' . $path;
908 }
909 }
910
911 if ($type === 'exclude-from-classmap') {
912
913  $path = preg_replace('{/+}', '/', preg_quote(trim(strtr($path, '\\', '/'), '/')));
914
915
916  $path = str_replace('\\*\\*', '.+?', $path);
917 $path = str_replace('\\*', '[^/]+?', $path);
918
919
920  $updir = null;
921 $path = preg_replace_callback(
922 '{^((?:(?:\\\\\\.){1,2}+/)+)}',
923 function ($matches) use (&$updir) {
924 if (isset($matches[1])) {
925
926  $updir = str_replace('\\.', '.', $matches[1]);
927 }
928
929 return '';
930 },
931 $path
932 );
933 if (empty($installPath)) {
934 $installPath = strtr(getcwd(), '\\', '/');
935 }
936
937 $resolvedPath = realpath($installPath . '/' . $updir);
938 $autoloads[] = preg_quote(strtr($resolvedPath, '\\', '/')) . '/' . $path;
939 continue;
940 }
941
942 $relativePath = empty($installPath) ? (empty($path) ? '.' : $path) : $installPath.'/'.$path;
943
944 if ($type === 'files') {
945 $autoloads[$this->getFileIdentifier($package, $path)] = $relativePath;
946 continue;
947 } elseif ($type === 'classmap') {
948 $autoloads[] = $relativePath;
949 continue;
950 }
951
952 $autoloads[$namespace][] = $relativePath;
953 }
954 }
955 }
956
957 return $autoloads;
958 }
959
960 protected function getFileIdentifier(PackageInterface $package, $path)
961 {
962 return md5($package->getName() . ':' . $path);
963 }
964
965
966
967
968
969
970
971
972
973 protected function sortPackageMap(array $packageMap)
974 {
975 $packages = array();
976 $paths = array();
977 $usageList = array();
978
979 foreach ($packageMap as $item) {
980 list($package, $path) = $item;
981 $name = $package->getName();
982 $packages[$name] = $package;
983 $paths[$name] = $path;
984
985 foreach (array_merge($package->getRequires(), $package->getDevRequires()) as $link) {
986 $target = $link->getTarget();
987 $usageList[$target][] = $name;
988 }
989 }
990
991 $computing = array();
992 $computed = array();
993 $computeImportance = function ($name) use (&$computeImportance, &$computing, &$computed, $usageList) {
994
995  if (isset($computed[$name])) {
996 return $computed[$name];
997 }
998
999
1000  if (isset($computing[$name])) {
1001 return 0;
1002 }
1003
1004 $computing[$name] = true;
1005 $weight = 0;
1006
1007 if (isset($usageList[$name])) {
1008 foreach ($usageList[$name] as $user) {
1009 $weight -= 1 - $computeImportance($user);
1010 }
1011 }
1012
1013 unset($computing[$name]);
1014 $computed[$name] = $weight;
1015
1016 return $weight;
1017 };
1018
1019 $weightList = array();
1020
1021 foreach ($packages as $name => $package) {
1022 $weight = $computeImportance($name);
1023 $weightList[$name] = $weight;
1024 }
1025
1026 $stable_sort = function (&$array) {
1027 static $transform, $restore;
1028
1029 $i = 0;
1030
1031 if (!$transform) {
1032 $transform = function (&$v, $k) use (&$i) {
1033 $v = array($v, ++$i, $k, $v);
1034 };
1035
1036 $restore = function (&$v, $k) {
1037 $v = $v[3];
1038 };
1039 }
1040
1041 array_walk($array, $transform);
1042 asort($array);
1043 array_walk($array, $restore);
1044 };
1045
1046 $stable_sort($weightList);
1047
1048 $sortedPackageMap = array();
1049
1050 foreach (array_keys($weightList) as $name) {
1051 $sortedPackageMap[] = array($packages[$name], $paths[$name]);
1052 }
1053
1054 return $sortedPackageMap;
1055 }
1056
1057
1058
1059
1060
1061
1062
1063 protected function safeCopy($source, $target)
1064 {
1065 $source = fopen($source, 'r');
1066 $target = fopen($target, 'w+');
1067
1068 stream_copy_to_stream($source, $target);
1069 fclose($source);
1070 fclose($target);
1071 }
1072 }
1073 <?php
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091 namespace Composer\Autoload;
1092
1093 use Symfony\Component\Finder\Finder;
1094 use Composer\IO\IOInterface;
1095 use Composer\Util\Filesystem;
1096
1097
1098
1099
1100
1101
1102
1103 class ClassMapGenerator
1104 {
1105
1106
1107
1108
1109
1110
1111 public static function dump($dirs, $file)
1112 {
1113 $maps = array();
1114
1115 foreach ($dirs as $dir) {
1116 $maps = array_merge($maps, static::createMap($dir));
1117 }
1118
1119 file_put_contents($file, sprintf('<?php return %s;', var_export($maps, true)));
1120 }
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133 public static function createMap($path, $blacklist = null, IOInterface $io = null, $namespace = null)
1134 {
1135 if (is_string($path)) {
1136 if (is_file($path)) {
1137 $path = array(new \SplFileInfo($path));
1138 } elseif (is_dir($path)) {
1139 $path = Finder::create()->files()->followLinks()->name('/\.(php|inc|hh)$/')->in($path);
1140 } else {
1141 throw new \RuntimeException(
1142 'Could not scan for classes inside "'.$path.
1143 '" which does not appear to be a file nor a folder'
1144 );
1145 }
1146 }
1147
1148 $map = array();
1149 $filesystem = new Filesystem();
1150 $cwd = realpath(getcwd());
1151
1152 foreach ($path as $file) {
1153 $filePath = $file->getPathname();
1154 if (!in_array(pathinfo($filePath, PATHINFO_EXTENSION), array('php', 'inc', 'hh'))) {
1155 continue;
1156 }
1157
1158 if (!$filesystem->isAbsolutePath($filePath)) {
1159 $filePath = $cwd . '/' . $filePath;
1160 $filePath = $filesystem->normalizePath($filePath);
1161 } else {
1162 $filePath = preg_replace('{[\\\\/]{2,}}', '/', $filePath);
1163 }
1164
1165
1166  if ($blacklist && preg_match($blacklist, strtr(realpath($filePath), '\\', '/'))) {
1167 continue;
1168 }
1169
1170 $classes = self::findClasses($filePath);
1171
1172 foreach ($classes as $class) {
1173
1174  if (null !== $namespace && 0 !== strpos($class, $namespace)) {
1175 continue;
1176 }
1177
1178 if (!isset($map[$class])) {
1179 $map[$class] = $filePath;
1180 } elseif ($io && $map[$class] !== $filePath && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($map[$class].' '.$filePath, '\\', '/'))) {
1181 $io->writeError(
1182 '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
1183 ' was found in both "'.$map[$class].'" and "'.$filePath.'", the first will be used.</warning>'
1184 );
1185 }
1186 }
1187 }
1188
1189 return $map;
1190 }
1191
1192
1193
1194
1195
1196
1197
1198
1199 private static function findClasses($path)
1200 {
1201 $extraTypes = PHP_VERSION_ID < 50400 ? '' : '|trait';
1202 if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '3.3', '>=')) {
1203 $extraTypes .= '|enum';
1204 }
1205
1206
1207  
1208  $contents = @php_strip_whitespace($path);
1209 if (!$contents) {
1210 if (!file_exists($path)) {
1211 $message = 'File at "%s" does not exist, check your classmap definitions';
1212 } elseif (!is_readable($path)) {
1213 $message = 'File at "%s" is not readable, check its permissions';
1214 } elseif ('' === trim(file_get_contents($path))) {
1215
1216  return array();
1217 } else {
1218 $message = 'File at "%s" could not be parsed as PHP, it may be binary or corrupted';
1219 }
1220 $error = error_get_last();
1221 if (isset($error['message'])) {
1222 $message .= PHP_EOL . 'The following message may be helpful:' . PHP_EOL . $error['message'];
1223 }
1224 throw new \RuntimeException(sprintf($message, $path));
1225 }
1226
1227
1228  if (!preg_match('{\b(?:class|interface'.$extraTypes.')\s}i', $contents)) {
1229 return array();
1230 }
1231
1232
1233  $contents = preg_replace('{<<<\s*(\'?)(\w+)\\1(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\2(?=\r\n|\n|\r|;)}s', 'null', $contents);
1234
1235  $contents = preg_replace('{"[^"\\\\]*+(\\\\.[^"\\\\]*+)*+"|\'[^\'\\\\]*+(\\\\.[^\'\\\\]*+)*+\'}s', 'null', $contents);
1236
1237  if (substr($contents, 0, 2) !== '<?') {
1238 $contents = preg_replace('{^.+?<\?}s', '<?', $contents, 1, $replacements);
1239 if ($replacements === 0) {
1240 return array();
1241 }
1242 }
1243
1244  $contents = preg_replace('{\?>.+<\?}s', '?><?', $contents);
1245
1246  $pos = strrpos($contents, '?>');
1247 if (false !== $pos && false === strpos(substr($contents, $pos), '<?')) {
1248 $contents = substr($contents, 0, $pos);
1249 }
1250
1251 preg_match_all('{
1252             (?:
1253                  \b(?<![\$:>])(?P<type>class|interface'.$extraTypes.') \s++ (?P<name>[a-zA-Z_\x7f-\xff:][a-zA-Z0-9_\x7f-\xff:\-]*+)
1254                | \b(?<![\$:>])(?P<ns>namespace) (?P<nsname>\s++[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\s*+\\\\\s*+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+)? \s*+ [\{;]
1255             )
1256         }ix', $contents, $matches);
1257
1258 $classes = array();
1259 $namespace = '';
1260
1261 for ($i = 0, $len = count($matches['type']); $i < $len; $i++) {
1262 if (!empty($matches['ns'][$i])) {
1263 $namespace = str_replace(array(' ', "\t", "\r", "\n"), '', $matches['nsname'][$i]) . '\\';
1264 } else {
1265 $name = $matches['name'][$i];
1266
1267  if ($name === 'extends' || $name === 'implements') {
1268 continue;
1269 }
1270 if ($name[0] === ':') {
1271
1272  $name = 'xhp'.substr(str_replace(array('-', ':'), array('_', '__'), $name), 1);
1273 } elseif ($matches['type'][$i] === 'enum') {
1274
1275  
1276  
1277  
1278  $name = rtrim($name, ':');
1279 }
1280 $classes[] = ltrim($namespace . $name, '\\');
1281 }
1282 }
1283
1284 return $classes;
1285 }
1286 }
1287 <?php
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299 namespace Composer;
1300
1301 use Composer\IO\IOInterface;
1302 use Composer\Util\Filesystem;
1303 use Composer\Util\Silencer;
1304 use Symfony\Component\Finder\Finder;
1305
1306
1307
1308
1309
1310
1311 class Cache
1312 {
1313 private static $cacheCollected = false;
1314 private $io;
1315 private $root;
1316 private $enabled = true;
1317 private $whitelist;
1318 private $filesystem;
1319
1320
1321
1322
1323
1324
1325
1326 public function __construct(IOInterface $io, $cacheDir, $whitelist = 'a-z0-9.', Filesystem $filesystem = null)
1327 {
1328 $this->io = $io;
1329 $this->root = rtrim($cacheDir, '/\\') . '/';
1330 $this->whitelist = $whitelist;
1331 $this->filesystem = $filesystem ?: new Filesystem();
1332
1333 if (preg_match('{(^|[\\\\/])(\$null|NUL|/dev/null)([\\\\/]|$)}', $cacheDir)) {
1334 $this->enabled = false;
1335
1336 return;
1337 }
1338
1339 if (
1340 (!is_dir($this->root) && !Silencer::call('mkdir', $this->root, 0777, true))
1341 || !is_writable($this->root)
1342 ) {
1343 $this->io->writeError('<warning>Cannot create cache directory ' . $this->root . ', or directory is not writable. Proceeding without cache</warning>');
1344 $this->enabled = false;
1345 }
1346 }
1347
1348 public function isEnabled()
1349 {
1350 return $this->enabled;
1351 }
1352
1353 public function getRoot()
1354 {
1355 return $this->root;
1356 }
1357
1358 public function read($file)
1359 {
1360 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1361 if ($this->enabled && file_exists($this->root . $file)) {
1362 $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG);
1363
1364 return file_get_contents($this->root . $file);
1365 }
1366
1367 return false;
1368 }
1369
1370 public function write($file, $contents)
1371 {
1372 if ($this->enabled) {
1373 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1374
1375 $this->io->writeError('Writing '.$this->root . $file.' into cache', true, IOInterface::DEBUG);
1376
1377 try {
1378 return file_put_contents($this->root . $file, $contents);
1379 } catch (\ErrorException $e) {
1380 $this->io->writeError('<warning>Failed to write into cache: '.$e->getMessage().'</warning>', true, IOInterface::DEBUG);
1381 if (preg_match('{^file_put_contents\(\): Only ([0-9]+) of ([0-9]+) bytes written}', $e->getMessage(), $m)) {
1382
1383  unlink($this->root . $file);
1384
1385 $message = sprintf(
1386 '<warning>Writing %1$s into cache failed after %2$u of %3$u bytes written, only %4$u bytes of free space available</warning>',
1387 $this->root . $file,
1388 $m[1],
1389 $m[2],
1390 @disk_free_space($this->root . dirname($file))
1391 );
1392
1393 $this->io->writeError($message);
1394
1395 return false;
1396 }
1397
1398 throw $e;
1399 }
1400 }
1401
1402 return false;
1403 }
1404
1405
1406
1407
1408 public function copyFrom($file, $source)
1409 {
1410 if ($this->enabled) {
1411 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1412 $this->filesystem->ensureDirectoryExists(dirname($this->root . $file));
1413
1414 if (!file_exists($source)) {
1415 $this->io->writeError('<error>'.$source.' does not exist, can not write into cache</error>');
1416 } elseif ($this->io->isDebug()) {
1417 $this->io->writeError('Writing '.$this->root . $file.' into cache from '.$source);
1418 }
1419
1420 return copy($source, $this->root . $file);
1421 }
1422
1423 return false;
1424 }
1425
1426
1427
1428
1429 public function copyTo($file, $target)
1430 {
1431 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1432 if ($this->enabled && file_exists($this->root . $file)) {
1433 try {
1434 touch($this->root . $file, filemtime($this->root . $file), time());
1435 } catch (\ErrorException $e) {
1436
1437  
1438  Silencer::call('touch', $this->root . $file);
1439 }
1440
1441 $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG);
1442
1443 return copy($this->root . $file, $target);
1444 }
1445
1446 return false;
1447 }
1448
1449 public function gcIsNecessary()
1450 {
1451 return (!self::$cacheCollected && !mt_rand(0, 50));
1452 }
1453
1454 public function remove($file)
1455 {
1456 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1457 if ($this->enabled && file_exists($this->root . $file)) {
1458 return $this->filesystem->unlink($this->root . $file);
1459 }
1460
1461 return false;
1462 }
1463
1464 public function clear()
1465 {
1466 if ($this->enabled) {
1467 return $this->filesystem->removeDirectory($this->root);
1468 }
1469
1470 return false;
1471 }
1472
1473 public function gc($ttl, $maxSize)
1474 {
1475 if ($this->enabled) {
1476 $expire = new \DateTime();
1477 $expire->modify('-'.$ttl.' seconds');
1478
1479 $finder = $this->getFinder()->date('until '.$expire->format('Y-m-d H:i:s'));
1480 foreach ($finder as $file) {
1481 $this->filesystem->unlink($file->getPathname());
1482 }
1483
1484 $totalSize = $this->filesystem->size($this->root);
1485 if ($totalSize > $maxSize) {
1486 $iterator = $this->getFinder()->sortByAccessedTime()->getIterator();
1487 while ($totalSize > $maxSize && $iterator->valid()) {
1488 $filepath = $iterator->current()->getPathname();
1489 $totalSize -= $this->filesystem->size($filepath);
1490 $this->filesystem->unlink($filepath);
1491 $iterator->next();
1492 }
1493 }
1494
1495 self::$cacheCollected = true;
1496
1497 return true;
1498 }
1499
1500 return false;
1501 }
1502
1503 public function sha1($file)
1504 {
1505 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1506 if ($this->enabled && file_exists($this->root . $file)) {
1507 return sha1_file($this->root . $file);
1508 }
1509
1510 return false;
1511 }
1512
1513 public function sha256($file)
1514 {
1515 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1516 if ($this->enabled && file_exists($this->root . $file)) {
1517 return hash_file('sha256', $this->root . $file);
1518 }
1519
1520 return false;
1521 }
1522
1523 protected function getFinder()
1524 {
1525 return Finder::create()->in($this->root)->files();
1526 }
1527 }
1528 <?php
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540 namespace Composer\Command;
1541
1542 use Symfony\Component\Console\Input\InputInterface;
1543 use Symfony\Component\Console\Output\OutputInterface;
1544
1545
1546
1547
1548 class AboutCommand extends BaseCommand
1549 {
1550 protected function configure()
1551 {
1552 $this
1553 ->setName('about')
1554 ->setDescription('Shows the short information about Composer.')
1555 ->setHelp(<<<EOT
1556 <info>php composer.phar about</info>
1557 EOT
1558 )
1559 ;
1560 }
1561
1562 protected function execute(InputInterface $input, OutputInterface $output)
1563 {
1564 $this->getIO()->write(<<<EOT
1565 <info>Composer - Package Management for PHP</info>
1566 <comment>Composer is a dependency manager tracking local dependencies of your projects and libraries.
1567 See https://getcomposer.org/ for more information.</comment>
1568 EOT
1569 );
1570 }
1571 }
1572 <?php
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584 namespace Composer\Command;
1585
1586 use Composer\Factory;
1587 use Composer\IO\IOInterface;
1588 use Composer\Config;
1589 use Composer\Composer;
1590 use Composer\Repository\CompositeRepository;
1591 use Composer\Repository\RepositoryFactory;
1592 use Composer\Script\ScriptEvents;
1593 use Composer\Plugin\CommandEvent;
1594 use Composer\Plugin\PluginEvents;
1595 use Composer\Util\Filesystem;
1596 use Symfony\Component\Console\Input\InputArgument;
1597 use Symfony\Component\Console\Input\InputInterface;
1598 use Symfony\Component\Console\Input\InputOption;
1599 use Symfony\Component\Console\Output\OutputInterface;
1600
1601
1602
1603
1604
1605
1606 class ArchiveCommand extends BaseCommand
1607 {
1608 protected function configure()
1609 {
1610 $this
1611 ->setName('archive')
1612 ->setDescription('Creates an archive of this composer package.')
1613 ->setDefinition(array(
1614 new InputArgument('package', InputArgument::OPTIONAL, 'The package to archive instead of the current project'),
1615 new InputArgument('version', InputArgument::OPTIONAL, 'A version constraint to find the package to archive'),
1616 new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the resulting archive: tar or zip'),
1617 new InputOption('dir', null, InputOption::VALUE_REQUIRED, 'Write the archive to this directory'),
1618 new InputOption('file', null, InputOption::VALUE_REQUIRED, 'Write the archive with the given file name.'
1619 .' Note that the format will be appended.'),
1620 new InputOption('ignore-filters', false, InputOption::VALUE_NONE, 'Ignore filters when saving package'),
1621 ))
1622 ->setHelp(<<<EOT
1623 The <info>archive</info> command creates an archive of the specified format
1624 containing the files and directories of the Composer project or the specified
1625 package in the specified version and writes it to the specified directory.
1626
1627 <info>php composer.phar archive [--format=zip] [--dir=/foo] [package [version]]</info>
1628
1629 EOT
1630 )
1631 ;
1632 }
1633
1634 protected function execute(InputInterface $input, OutputInterface $output)
1635 {
1636 $config = Factory::createConfig();
1637 $composer = $this->getComposer(false);
1638 if ($composer) {
1639 $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'archive', $input, $output);
1640 $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
1641 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::PRE_ARCHIVE_CMD);
1642 }
1643
1644 if (null === $input->getOption('format')) {
1645 $input->setOption('format', $config->get('archive-format'));
1646 }
1647 if (null === $input->getOption('dir')) {
1648 $input->setOption('dir', $config->get('archive-dir'));
1649 }
1650
1651 $returnCode = $this->archive(
1652 $this->getIO(),
1653 $config,
1654 $input->getArgument('package'),
1655 $input->getArgument('version'),
1656 $input->getOption('format'),
1657 $input->getOption('dir'),
1658 $input->getOption('file'),
1659 $input->getOption('ignore-filters'),
1660 $composer
1661 );
1662
1663 if (0 === $returnCode && $composer) {
1664 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ARCHIVE_CMD);
1665 }
1666
1667 return $returnCode;
1668 }
1669
1670 protected function archive(IOInterface $io, Config $config, $packageName = null, $version = null, $format = 'tar', $dest = '.', $fileName = null, $ignoreFilters = false, Composer $composer = null)
1671 {
1672 if ($composer) {
1673 $archiveManager = $composer->getArchiveManager();
1674 } else {
1675 $factory = new Factory;
1676 $downloadManager = $factory->createDownloadManager($io, $config);
1677 $archiveManager = $factory->createArchiveManager($config, $downloadManager);
1678 }
1679
1680 if ($packageName) {
1681 $package = $this->selectPackage($io, $packageName, $version);
1682
1683 if (!$package) {
1684 return 1;
1685 }
1686 } else {
1687 $package = $this->getComposer()->getPackage();
1688 }
1689
1690 $io->writeError('<info>Creating the archive into "'.$dest.'".</info>');
1691 $packagePath = $archiveManager->archive($package, $format, $dest, $fileName, $ignoreFilters);
1692 $fs = new Filesystem;
1693 $shortPath = $fs->findShortestPath(getcwd(), $packagePath, true);
1694
1695 $io->writeError('Created: ', false);
1696 $io->write(strlen($shortPath) < strlen($packagePath) ? $shortPath : $packagePath);
1697
1698 return 0;
1699 }
1700
1701 protected function selectPackage(IOInterface $io, $packageName, $version = null)
1702 {
1703 $io->writeError('<info>Searching for the specified package.</info>');
1704
1705 if ($composer = $this->getComposer(false)) {
1706 $localRepo = $composer->getRepositoryManager()->getLocalRepository();
1707 $repo = new CompositeRepository(array_merge(array($localRepo), $composer->getRepositoryManager()->getRepositories()));
1708 } else {
1709 $defaultRepos = RepositoryFactory::defaultRepos($this->getIO());
1710 $io->writeError('No composer.json found in the current directory, searching packages from ' . implode(', ', array_keys($defaultRepos)));
1711 $repo = new CompositeRepository($defaultRepos);
1712 }
1713
1714 $packages = $repo->findPackages($packageName, $version);
1715
1716 if (count($packages) > 1) {
1717 $package = reset($packages);
1718 $io->writeError('<info>Found multiple matches, selected '.$package->getPrettyString().'.</info>');
1719 $io->writeError('Alternatives were '.implode(', ', array_map(function ($p) {
1720 return $p->getPrettyString();
1721 }, $packages)).'.');
1722 $io->writeError('<comment>Please use a more specific constraint to pick a different package.</comment>');
1723 } elseif ($packages) {
1724 $package = reset($packages);
1725 $io->writeError('<info>Found an exact match '.$package->getPrettyString().'.</info>');
1726 } else {
1727 $io->writeError('<error>Could not find a package matching '.$packageName.'.</error>');
1728
1729 return false;
1730 }
1731
1732 return $package;
1733 }
1734 }
1735 <?php
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747 namespace Composer\Command;
1748
1749 use Composer\Composer;
1750 use Composer\Config;
1751 use Composer\Console\Application;
1752 use Composer\IO\IOInterface;
1753 use Composer\IO\NullIO;
1754 use Symfony\Component\Console\Input\InputInterface;
1755 use Symfony\Component\Console\Output\OutputInterface;
1756 use Symfony\Component\Console\Command\Command;
1757
1758
1759
1760
1761
1762
1763
1764 abstract class BaseCommand extends Command
1765 {
1766
1767
1768
1769 private $composer;
1770
1771
1772
1773
1774 private $io;
1775
1776
1777
1778
1779
1780
1781
1782 public function getComposer($required = true, $disablePlugins = null)
1783 {
1784 if (null === $this->composer) {
1785 $application = $this->getApplication();
1786 if ($application instanceof Application) {
1787
1788 $this->composer = $application->getComposer($required, $disablePlugins);
1789 } elseif ($required) {
1790 throw new \RuntimeException(
1791 'Could not create a Composer\Composer instance, you must inject '.
1792 'one if this command is not used with a Composer\Console\Application instance'
1793 );
1794 }
1795 }
1796
1797 return $this->composer;
1798 }
1799
1800
1801
1802
1803 public function setComposer(Composer $composer)
1804 {
1805 $this->composer = $composer;
1806 }
1807
1808
1809
1810
1811 public function resetComposer()
1812 {
1813 $this->composer = null;
1814 $this->getApplication()->resetComposer();
1815 }
1816
1817
1818
1819
1820
1821
1822
1823
1824 public function isProxyCommand()
1825 {
1826 return false;
1827 }
1828
1829
1830
1831
1832 public function getIO()
1833 {
1834 if (null === $this->io) {
1835 $application = $this->getApplication();
1836 if ($application instanceof Application) {
1837
1838 $this->io = $application->getIO();
1839 } else {
1840 $this->io = new NullIO();
1841 }
1842 }
1843
1844 return $this->io;
1845 }
1846
1847
1848
1849
1850 public function setIO(IOInterface $io)
1851 {
1852 $this->io = $io;
1853 }
1854
1855
1856
1857
1858 protected function initialize(InputInterface $input, OutputInterface $output)
1859 {
1860 if (true === $input->hasParameterOption(array('--no-ansi')) && $input->hasOption('no-progress')) {
1861 $input->setOption('no-progress', true);
1862 }
1863
1864 parent::initialize($input, $output);
1865 }
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876 protected function getPreferredInstallOptions(Config $config, InputInterface $input, $keepVcsRequiresPreferSource = false)
1877 {
1878 $preferSource = false;
1879 $preferDist = false;
1880
1881 switch ($config->get('preferred-install')) {
1882 case 'source':
1883 $preferSource = true;
1884 break;
1885 case 'dist':
1886 $preferDist = true;
1887 break;
1888 case 'auto':
1889 default:
1890
1891  break;
1892 }
1893
1894 if ($input->getOption('prefer-source') || $input->getOption('prefer-dist') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'))) {
1895 $preferSource = $input->getOption('prefer-source') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'));
1896 $preferDist = $input->getOption('prefer-dist');
1897 }
1898
1899 return array($preferSource, $preferDist);
1900 }
1901 }
1902 <?php
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912
1913
1914 namespace Composer\Command;
1915
1916 use Composer\DependencyResolver\Pool;
1917 use Composer\Package\Link;
1918 use Composer\Package\PackageInterface;
1919 use Composer\Repository\ArrayRepository;
1920 use Composer\Repository\CompositeRepository;
1921 use Composer\Repository\PlatformRepository;
1922 use Composer\Repository\RepositoryFactory;
1923 use Composer\Plugin\CommandEvent;
1924 use Composer\Plugin\PluginEvents;
1925 use Symfony\Component\Console\Formatter\OutputFormatterStyle;
1926 use Composer\Package\Version\VersionParser;
1927 use Symfony\Component\Console\Helper\Table;
1928 use Symfony\Component\Console\Input\InputArgument;
1929 use Symfony\Component\Console\Input\InputInterface;
1930 use Symfony\Component\Console\Input\InputOption;
1931 use Symfony\Component\Console\Output\OutputInterface;
1932
1933
1934
1935
1936
1937
1938 class BaseDependencyCommand extends BaseCommand
1939 {
1940 const ARGUMENT_PACKAGE = 'package';
1941 const ARGUMENT_CONSTRAINT = 'constraint';
1942 const OPTION_RECURSIVE = 'recursive';
1943 const OPTION_TREE = 'tree';
1944
1945 protected $colors;
1946
1947
1948
1949
1950 protected function configure()
1951 {
1952 $this->setDefinition(array(
1953 new InputArgument(self::ARGUMENT_PACKAGE, InputArgument::REQUIRED, 'Package to inspect'),
1954 new InputArgument(self::ARGUMENT_CONSTRAINT, InputArgument::OPTIONAL, 'Optional version constraint', '*'),
1955 new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'),
1956 new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'),
1957 ));
1958 }
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968 protected function doExecute(InputInterface $input, OutputInterface $output, $inverted = false)
1969 {
1970
1971  $composer = $this->getComposer();
1972 $commandEvent = new CommandEvent(PluginEvents::COMMAND, $this->getName(), $input, $output);
1973 $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
1974
1975
1976  $platformOverrides = $composer->getConfig()->get('platform') ?: array();
1977 $repository = new CompositeRepository(array(
1978 new ArrayRepository(array($composer->getPackage())),
1979 $composer->getRepositoryManager()->getLocalRepository(),
1980 new PlatformRepository(array(), $platformOverrides),
1981 ));
1982 $pool = new Pool();
1983 $pool->addRepository($repository);
1984
1985
1986  list($needle, $textConstraint) = array_pad(
1987 explode(':', $input->getArgument(self::ARGUMENT_PACKAGE)),
1988 2,
1989 $input->getArgument(self::ARGUMENT_CONSTRAINT)
1990 );
1991
1992
1993  $packages = $pool->whatProvides($needle);
1994 if (empty($packages)) {
1995 throw new \InvalidArgumentException(sprintf('Could not find package "%s" in your project', $needle));
1996 }
1997
1998
1999  
2000  if (!$repository->findPackage($needle, $textConstraint)) {
2001 $defaultRepos = new CompositeRepository(RepositoryFactory::defaultRepos($this->getIO()));
2002 if ($match = $defaultRepos->findPackage($needle, $textConstraint)) {
2003 $repository->addRepository(new ArrayRepository(array(clone $match)));
2004 }
2005 }
2006
2007
2008  $needles = array($needle);
2009 if ($inverted) {
2010 foreach ($packages as $package) {
2011 $needles = array_merge($needles, array_map(function (Link $link) {
2012 return $link->getTarget();
2013 }, $package->getReplaces()));
2014 }
2015 }
2016
2017
2018  if ('*' !== $textConstraint) {
2019 $versionParser = new VersionParser();
2020 $constraint = $versionParser->parseConstraints($textConstraint);
2021 } else {
2022 $constraint = null;
2023 }
2024
2025
2026  $renderTree = $input->getOption(self::OPTION_TREE);
2027 $recursive = $renderTree || $input->getOption(self::OPTION_RECURSIVE);
2028
2029
2030  $results = $repository->getDependents($needles, $constraint, $inverted, $recursive);
2031 if (empty($results)) {
2032 $extra = (null !== $constraint) ? sprintf(' in versions %smatching %s', $inverted ? 'not ' : '', $textConstraint) : '';
2033 $this->getIO()->writeError(sprintf('<info>There is no installed package depending on "%s"%s</info>',
2034 $needle, $extra));
2035 } elseif ($renderTree) {
2036 $this->initStyles($output);
2037 $root = $packages[0];
2038 $this->getIO()->write(sprintf('<info>%s</info> %s %s', $root->getPrettyName(), $root->getPrettyVersion(), $root->getDescription()));
2039 $this->printTree($results);
2040 } else {
2041 $this->printTable($output, $results);
2042 }
2043
2044 return 0;
2045 }
2046
2047
2048
2049
2050
2051
2052
2053 protected function printTable(OutputInterface $output, $results)
2054 {
2055 $table = array();
2056 $doubles = array();
2057 do {
2058 $queue = array();
2059 $rows = array();
2060 foreach ($results as $result) {
2061
2062
2063
2064
2065 list($package, $link, $children) = $result;
2066 $unique = (string) $link;
2067 if (isset($doubles[$unique])) {
2068 continue;
2069 }
2070 $doubles[$unique] = true;
2071 $version = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '-' : $package->getPrettyVersion();
2072 $rows[] = array($package->getPrettyName(), $version, $link->getDescription(), sprintf('%s (%s)', $link->getTarget(), $link->getPrettyConstraint()));
2073 if ($children) {
2074 $queue = array_merge($queue, $children);
2075 }
2076 }
2077 $results = $queue;
2078 $table = array_merge($rows, $table);
2079 } while (!empty($results));
2080
2081
2082  $renderer = new Table($output);
2083 $renderer->setStyle('compact');
2084 $renderer->getStyle()->setVerticalBorderChar('');
2085 $renderer->getStyle()->setCellRowContentFormat('%s  ');
2086 $renderer->setRows($table)->render();
2087 }
2088
2089
2090
2091
2092
2093
2094 protected function initStyles(OutputInterface $output)
2095 {
2096 $this->colors = array(
2097 'green',
2098 'yellow',
2099 'cyan',
2100 'magenta',
2101 'blue',
2102 );
2103
2104 foreach ($this->colors as $color) {
2105 $style = new OutputFormatterStyle($color);
2106 $output->getFormatter()->setStyle($color, $style);
2107 }
2108 }
2109
2110
2111
2112
2113
2114
2115
2116
2117 protected function printTree($results, $prefix = '', $level = 1)
2118 {
2119 $count = count($results);
2120 $idx = 0;
2121 foreach ($results as $result) {
2122
2123
2124
2125
2126
2127 list($package, $link, $children) = $result;
2128
2129 $color = $this->colors[$level % count($this->colors)];
2130 $prevColor = $this->colors[($level - 1) % count($this->colors)];
2131 $isLast = (++$idx == $count);
2132 $versionText = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '' : $package->getPrettyVersion();
2133 $packageText = rtrim(sprintf('<%s>%s</%1$s> %s', $color, $package->getPrettyName(), $versionText));
2134 $linkText = sprintf('%s <%s>%s</%2$s> %s', $link->getDescription(), $prevColor, $link->getTarget(), $link->getPrettyConstraint());
2135 $circularWarn = $children === false ? '(circular dependency aborted here)' : '';
2136 $this->writeTreeLine(rtrim(sprintf("%s%s%s (%s) %s", $prefix, $isLast ? '└──' : '├──', $packageText, $linkText, $circularWarn)));
2137 if ($children) {
2138 $this->printTree($children, $prefix . ($isLast ? '   ' : '│  '), $level + 1);
2139 }
2140 }
2141 }
2142
2143 private function writeTreeLine($line)
2144 {
2145 $io = $this->getIO();
2146 if (!$io->isDecorated()) {
2147 $line = str_replace(array('└', '├', '──', '│'), array('`-', '|-', '-', '|'), $line);
2148 }
2149
2150 $io->write($line);
2151 }
2152 }
2153 <?php
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163
2164
2165 namespace Composer\Command;
2166
2167 use Composer\Cache;
2168 use Composer\Factory;
2169 use Symfony\Component\Console\Input\InputInterface;
2170 use Symfony\Component\Console\Output\OutputInterface;
2171
2172
2173
2174
2175 class ClearCacheCommand extends BaseCommand
2176 {
2177 protected function configure()
2178 {
2179 $this
2180 ->setName('clear-cache')
2181 ->setAliases(array('clearcache'))
2182 ->setDescription('Clears composer\'s internal package cache.')
2183 ->setHelp(<<<EOT
2184 The <info>clear-cache</info> deletes all cached packages from composer's
2185 cache directory.
2186 EOT
2187 )
2188 ;
2189 }
2190
2191 protected function execute(InputInterface $input, OutputInterface $output)
2192 {
2193 $config = Factory::createConfig();
2194 $io = $this->getIO();
2195
2196 $cachePaths = array(
2197 'cache-vcs-dir' => $config->get('cache-vcs-dir'),
2198 'cache-repo-dir' => $config->get('cache-repo-dir'),
2199 'cache-files-dir' => $config->get('cache-files-dir'),
2200 'cache-dir' => $config->get('cache-dir'),
2201 );
2202
2203 foreach ($cachePaths as $key => $cachePath) {
2204 $cachePath = realpath($cachePath);
2205 if (!$cachePath) {
2206 $io->writeError("<info>Cache directory does not exist ($key): $cachePath</info>");
2207
2208 continue;
2209 }
2210 $cache = new Cache($io, $cachePath);
2211 if (!$cache->isEnabled()) {
2212 $io->writeError("<info>Cache is not enabled ($key): $cachePath</info>");
2213
2214 continue;
2215 }
2216
2217 $io->writeError("<info>Clearing cache ($key): $cachePath</info>");
2218 $cache->clear();
2219 }
2220
2221 $io->writeError('<info>All caches cleared.</info>');
2222 }
2223 }
2224 <?php
2225
2226
2227
2228
2229
2230
2231
2232
2233
2234
2235
2236 namespace Composer\Command;
2237
2238 use Composer\Util\Platform;
2239 use Composer\Util\Silencer;
2240 use Symfony\Component\Console\Input\InputInterface;
2241 use Symfony\Component\Console\Input\InputArgument;
2242 use Symfony\Component\Console\Input\InputOption;
2243 use Symfony\Component\Console\Output\OutputInterface;
2244 use Composer\Config;
2245 use Composer\Config\JsonConfigSource;
2246 use Composer\Factory;
2247 use Composer\Json\JsonFile;
2248 use Composer\Semver\VersionParser;
2249 use Composer\Package\BasePackage;
2250
2251
2252
2253
2254
2255 class ConfigCommand extends BaseCommand
2256 {
2257
2258
2259
2260 protected $config;
2261
2262
2263
2264
2265 protected $configFile;
2266
2267
2268
2269
2270 protected $configSource;
2271
2272
2273
2274
2275 protected $authConfigFile;
2276
2277
2278
2279
2280 protected $authConfigSource;
2281
2282
2283
2284
2285 protected function configure()
2286 {
2287 $this
2288 ->setName('config')
2289 ->setDescription('Sets config options.')
2290 ->setDefinition(array(
2291 new InputOption('global', 'g', InputOption::VALUE_NONE, 'Apply command to the global config file'),
2292 new InputOption('editor', 'e', InputOption::VALUE_NONE, 'Open editor'),
2293 new InputOption('auth', 'a', InputOption::VALUE_NONE, 'Affect auth config file (only used for --editor)'),
2294 new InputOption('unset', null, InputOption::VALUE_NONE, 'Unset the given setting-key'),
2295 new InputOption('list', 'l', InputOption::VALUE_NONE, 'List configuration settings'),
2296 new InputOption('file', 'f', InputOption::VALUE_REQUIRED, 'If you want to choose a different composer.json or config.json'),
2297 new InputOption('absolute', null, InputOption::VALUE_NONE, 'Returns absolute paths when fetching *-dir config values instead of relative'),
2298 new InputArgument('setting-key', null, 'Setting key'),
2299 new InputArgument('setting-value', InputArgument::IS_ARRAY, 'Setting value'),
2300 ))
2301 ->setHelp(<<<EOT
2302 This command allows you to edit composer config settings and repositories
2303 in either the local composer.json file or the global config.json file.
2304
2305 Additionally it lets you edit most properties in the local composer.json.
2306
2307 To set a config setting:
2308
2309     <comment>%command.full_name% bin-dir bin/</comment>
2310
2311 To read a config setting:
2312
2313     <comment>%command.full_name% bin-dir</comment>
2314     Outputs: <info>bin</info>
2315
2316 To edit the global config.json file:
2317
2318     <comment>%command.full_name% --global</comment>
2319
2320 To add a repository:
2321
2322     <comment>%command.full_name% repositories.foo vcs https://bar.com</comment>
2323
2324 To remove a repository (repo is a short alias for repositories):
2325
2326     <comment>%command.full_name% --unset repo.foo</comment>
2327
2328 To disable packagist:
2329
2330     <comment>%command.full_name% repo.packagist false</comment>
2331
2332 You can alter repositories in the global config.json file by passing in the
2333 <info>--global</info> option.
2334
2335 To edit the file in an external editor:
2336
2337     <comment>%command.full_name% --editor</comment>
2338
2339 To choose your editor you can set the "EDITOR" env variable.
2340
2341 To get a list of configuration values in the file:
2342
2343     <comment>%command.full_name% --list</comment>
2344
2345 You can always pass more than one option. As an example, if you want to edit the
2346 global config.json file.
2347
2348     <comment>%command.full_name% --editor --global</comment>
2349 EOT
2350 )
2351 ;
2352 }
2353
2354
2355
2356
2357 protected function initialize(InputInterface $input, OutputInterface $output)
2358 {
2359 parent::initialize($input, $output);
2360
2361 if ($input->getOption('global') && null !== $input->getOption('file')) {
2362 throw new \RuntimeException('--file and --global can not be combined');
2363 }
2364
2365 $io = $this->getIO();
2366 $this->config = Factory::createConfig($io);
2367
2368
2369  
2370  $configFile = $input->getOption('global')
2371 ? ($this->config->get('home') . '/config.json')
2372 : ($input->getOption('file') ?: Factory::getComposerFile());
2373
2374
2375  if (
2376 ($configFile === 'composer.json' || $configFile === './composer.json')
2377 && !file_exists($configFile)
2378 && realpath(getcwd()) === realpath($this->config->get('home'))
2379 ) {
2380 file_put_contents($configFile, "{\n}\n");
2381 }
2382
2383 $this->configFile = new JsonFile($configFile, null, $io);
2384 $this->configSource = new JsonConfigSource($this->configFile);
2385
2386 $authConfigFile = $input->getOption('global')
2387 ? ($this->config->get('home') . '/auth.json')
2388 : dirname(realpath($configFile)) . '/auth.json';
2389
2390 $this->authConfigFile = new JsonFile($authConfigFile, null, $io);
2391 $this->authConfigSource = new JsonConfigSource($this->authConfigFile, true);
2392
2393
2394  if ($input->getOption('global') && !$this->configFile->exists()) {
2395 touch($this->configFile->getPath());
2396 $this->configFile->write(array('config' => new \ArrayObject));
2397 Silencer::call('chmod', $this->configFile->getPath(), 0600);
2398 }
2399 if ($input->getOption('global') && !$this->authConfigFile->exists()) {
2400 touch($this->authConfigFile->getPath());
2401 $this->authConfigFile->write(array('bitbucket-oauth' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject, 'gitlab-token' => new \ArrayObject, 'http-basic' => new \ArrayObject));
2402 Silencer::call('chmod', $this->authConfigFile->getPath(), 0600);
2403 }
2404
2405 if (!$this->configFile->exists()) {
2406 throw new \RuntimeException(sprintf('File "%s" cannot be found in the current directory', $configFile));
2407 }
2408 }
2409
2410
2411
2412
2413 protected function execute(InputInterface $input, OutputInterface $output)
2414 {
2415
2416  if ($input->getOption('editor')) {
2417 $editor = escapeshellcmd(getenv('EDITOR'));
2418 if (!$editor) {
2419 if (Platform::isWindows()) {
2420 $editor = 'notepad';
2421 } else {
2422 foreach (array('editor', 'vim', 'vi', 'nano', 'pico', 'ed') as $candidate) {
2423 if (exec('which '.$candidate)) {
2424 $editor = $candidate;
2425 break;
2426 }
2427 }
2428 }
2429 }
2430
2431 $file = $input->getOption('auth') ? $this->authConfigFile->getPath() : $this->configFile->getPath();
2432 system($editor . ' ' . $file . (Platform::isWindows() ? '' : ' > `tty`'));
2433
2434 return 0;
2435 }
2436
2437 if (!$input->getOption('global')) {
2438 $this->config->merge($this->configFile->read());
2439 $this->config->merge(array('config' => $this->authConfigFile->exists() ? $this->authConfigFile->read() : array()));
2440 }
2441
2442
2443  if ($input->getOption('list')) {
2444 $this->listConfiguration($this->config->all(), $this->config->raw(), $output);
2445
2446 return 0;
2447 }
2448
2449 $settingKey = $input->getArgument('setting-key');
2450 if (!$settingKey) {
2451 return 0;
2452 }
2453
2454
2455  if (array() !== $input->getArgument('setting-value') && $input->getOption('unset')) {
2456 throw new \RuntimeException('You can not combine a setting value with --unset');
2457 }
2458
2459
2460  if (array() === $input->getArgument('setting-value') && !$input->getOption('unset')) {
2461 $properties = array('name', 'type', 'description', 'homepage', 'version', 'minimum-stability', 'prefer-stable', 'keywords', 'license', 'extra');
2462 $rawData = $this->configFile->read();
2463 $data = $this->config->all();
2464 if (preg_match('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) {
2465 if (!isset($matches[1]) || $matches[1] === '') {
2466 $value = isset($data['repositories']) ? $data['repositories'] : array();
2467 } else {
2468 if (!isset($data['repositories'][$matches[1]])) {
2469 throw new \InvalidArgumentException('There is no '.$matches[1].' repository defined');
2470 }
2471
2472 $value = $data['repositories'][$matches[1]];
2473 }
2474 } elseif (strpos($settingKey, '.')) {
2475 $bits = explode('.', $settingKey);
2476 if ($bits[0] === 'extra') {
2477 $data = $rawData;
2478 } else {
2479 $data = $data['config'];
2480 }
2481 $match = false;
2482 foreach ($bits as $bit) {
2483 $key = isset($key) ? $key.'.'.$bit : $bit;
2484 $match = false;
2485 if (isset($data[$key])) {
2486 $match = true;
2487 $data = $data[$key];
2488 unset($key);
2489 }
2490 }
2491
2492 if (!$match) {
2493 throw new \RuntimeException($settingKey.' is not defined.');
2494 }
2495
2496 $value = $data;
2497 } elseif (isset($data['config'][$settingKey])) {
2498 $value = $this->config->get($settingKey, $input->getOption('absolute') ? 0 : Config::RELATIVE_PATHS);
2499 } elseif (in_array($settingKey, $properties, true) && isset($rawData[$settingKey])) {
2500 $value = $rawData[$settingKey];
2501 } else {
2502 throw new \RuntimeException($settingKey.' is not defined');
2503 }
2504
2505 if (is_array($value)) {
2506 $value = json_encode($value);
2507 }
2508
2509 $this->getIO()->write($value);
2510
2511 return 0;
2512 }
2513
2514 $values = $input->getArgument('setting-value'); 
2515
2516 $booleanValidator = function ($val) {
2517 return in_array($val, array('true', 'false', '1', '0'), true);
2518 };
2519 $booleanNormalizer = function ($val) {
2520 return $val !== 'false' && (bool) $val;
2521 };
2522
2523
2524  $uniqueConfigValues = array(
2525 'process-timeout' => array('is_numeric', 'intval'),
2526 'use-include-path' => array($booleanValidator, $booleanNormalizer),
2527 'preferred-install' => array(
2528 function ($val) {
2529 return in_array($val, array('auto', 'source', 'dist'), true);
2530 },
2531 function ($val) {
2532 return $val;
2533 },
2534 ),
2535 'store-auths' => array(
2536 function ($val) {
2537 return in_array($val, array('true', 'false', 'prompt'), true);
2538 },
2539 function ($val) {
2540 if ('prompt' === $val) {
2541 return 'prompt';
2542 }
2543
2544 return $val !== 'false' && (bool) $val;
2545 },
2546 ),
2547 'notify-on-install' => array($booleanValidator, $booleanNormalizer),
2548 'vendor-dir' => array('is_string', function ($val) {
2549 return $val;
2550 }),
2551 'bin-dir' => array('is_string', function ($val) {
2552 return $val;
2553 }),
2554 'archive-dir' => array('is_string', function ($val) {
2555 return $val;
2556 }),
2557 'archive-format' => array('is_string', function ($val) {
2558 return $val;
2559 }),
2560 'data-dir' => array('is_string', function ($val) {
2561 return $val;
2562 }),
2563 'cache-dir' => array('is_string', function ($val) {
2564 return $val;
2565 }),
2566 'cache-files-dir' => array('is_string', function ($val) {
2567 return $val;
2568 }),
2569 'cache-repo-dir' => array('is_string', function ($val) {
2570 return $val;
2571 }),
2572 'cache-vcs-dir' => array('is_string', function ($val) {
2573 return $val;
2574 }),
2575 'cache-ttl' => array('is_numeric', 'intval'),
2576 'cache-files-ttl' => array('is_numeric', 'intval'),
2577 'cache-files-maxsize' => array(
2578 function ($val) {
2579 return preg_match('/^\s*([0-9.]+)\s*(?:([kmg])(?:i?b)?)?\s*$/i', $val) > 0;
2580 },
2581 function ($val) {
2582 return $val;
2583 },
2584 ),
2585 'bin-compat' => array(
2586 function ($val) {
2587 return in_array($val, array('auto', 'full'));
2588 },
2589 function ($val) {
2590 return $val;
2591 },
2592 ),
2593 'discard-changes' => array(
2594 function ($val) {
2595 return in_array($val, array('stash', 'true', 'false', '1', '0'), true);
2596 },
2597 function ($val) {
2598 if ('stash' === $val) {
2599 return 'stash';
2600 }
2601
2602 return $val !== 'false' && (bool) $val;
2603 },
2604 ),
2605 'autoloader-suffix' => array('is_string', function ($val) {
2606 return $val === 'null' ? null : $val;
2607 }),
2608 'sort-packages' => array($booleanValidator, $booleanNormalizer),
2609 'optimize-autoloader' => array($booleanValidator, $booleanNormalizer),
2610 'classmap-authoritative' => array($booleanValidator, $booleanNormalizer),
2611 'apcu-autoloader' => array($booleanValidator, $booleanNormalizer),
2612 'prepend-autoloader' => array($booleanValidator, $booleanNormalizer),
2613 'disable-tls' => array($booleanValidator, $booleanNormalizer),
2614 'secure-http' => array($booleanValidator, $booleanNormalizer),
2615 'cafile' => array(
2616 function ($val) {
2617 return file_exists($val) && is_readable($val);
2618 },
2619 function ($val) {
2620 return $val === 'null' ? null : $val;
2621 },
2622 ),
2623 'capath' => array(
2624 function ($val) {
2625 return is_dir($val) && is_readable($val);
2626 },
2627 function ($val) {
2628 return $val === 'null' ? null : $val;
2629 },
2630 ),
2631 'github-expose-hostname' => array($booleanValidator, $booleanNormalizer),
2632 'htaccess-protect' => array($booleanValidator, $booleanNormalizer),
2633 );
2634 $multiConfigValues = array(
2635 'github-protocols' => array(
2636 function ($vals) {
2637 if (!is_array($vals)) {
2638 return 'array expected';
2639 }
2640
2641 foreach ($vals as $val) {
2642 if (!in_array($val, array('git', 'https', 'ssh'))) {
2643 return 'valid protocols include: git, https, ssh';
2644 }
2645 }
2646
2647 return true;
2648 },
2649 function ($vals) {
2650 return $vals;
2651 },
2652 ),
2653 'github-domains' => array(
2654 function ($vals) {
2655 if (!is_array($vals)) {
2656 return 'array expected';
2657 }
2658
2659 return true;
2660 },
2661 function ($vals) {
2662 return $vals;
2663 },
2664 ),
2665 'gitlab-domains' => array(
2666 function ($vals) {
2667 if (!is_array($vals)) {
2668 return 'array expected';
2669 }
2670
2671 return true;
2672 },
2673 function ($vals) {
2674 return $vals;
2675 },
2676 ),
2677 );
2678
2679 if ($input->getOption('unset') && (isset($uniqueConfigValues[$settingKey]) || isset($multiConfigValues[$settingKey]))) {
2680 return $this->configSource->removeConfigSetting($settingKey);
2681 }
2682 if (isset($uniqueConfigValues[$settingKey])) {
2683 return $this->handleSingleValue($settingKey, $uniqueConfigValues[$settingKey], $values, 'addConfigSetting');
2684 }
2685 if (isset($multiConfigValues[$settingKey])) {
2686 return $this->handleMultiValue($settingKey, $multiConfigValues[$settingKey], $values, 'addConfigSetting');
2687 }
2688
2689
2690  $uniqueProps = array(
2691 'name' => array('is_string', function ($val) {
2692 return $val;
2693 }),
2694 'type' => array('is_string', function ($val) {
2695 return $val;
2696 }),
2697 'description' => array('is_string', function ($val) {
2698 return $val;
2699 }),
2700 'homepage' => array('is_string', function ($val) {
2701 return $val;
2702 }),
2703 'version' => array('is_string', function ($val) {
2704 return $val;
2705 }),
2706 'minimum-stability' => array(
2707 function ($val) {
2708 return isset(BasePackage::$stabilities[VersionParser::normalizeStability($val)]);
2709 },
2710 function ($val) {
2711 return VersionParser::normalizeStability($val);
2712 },
2713 ),
2714 'prefer-stable' => array($booleanValidator, $booleanNormalizer),
2715 );
2716 $multiProps = array(
2717 'keywords' => array(
2718 function ($vals) {
2719 if (!is_array($vals)) {
2720 return 'array expected';
2721 }
2722
2723 return true;
2724 },
2725 function ($vals) {
2726 return $vals;
2727 },
2728 ),
2729 'license' => array(
2730 function ($vals) {
2731 if (!is_array($vals)) {
2732 return 'array expected';
2733 }
2734
2735 return true;
2736 },
2737 function ($vals) {
2738 return $vals;
2739 },
2740 ),
2741 );
2742
2743 if ($input->getOption('global') && (isset($uniqueProps[$settingKey]) || isset($multiProps[$settingKey]) || substr($settingKey, 0, 6) === 'extra.')) {
2744 throw new \InvalidArgumentException('The '.$settingKey.' property can not be set in the global config.json file. Use `composer global config` to apply changes to the global composer.json');
2745 }
2746 if ($input->getOption('unset') && (isset($uniqueProps[$settingKey]) || isset($multiProps[$settingKey]))) {
2747 return $this->configSource->removeProperty($settingKey);
2748 }
2749 if (isset($uniqueProps[$settingKey])) {
2750 return $this->handleSingleValue($settingKey, $uniqueProps[$settingKey], $values, 'addProperty');
2751 }
2752 if (isset($multiProps[$settingKey])) {
2753 return $this->handleMultiValue($settingKey, $multiProps[$settingKey], $values, 'addProperty');
2754 }
2755
2756
2757  if (preg_match('/^repos?(?:itories)?\.(.+)/', $settingKey, $matches)) {
2758 if ($input->getOption('unset')) {
2759 return $this->configSource->removeRepository($matches[1]);
2760 }
2761
2762 if (2 === count($values)) {
2763 return $this->configSource->addRepository($matches[1], array(
2764 'type' => $values[0],
2765 'url' => $values[1],
2766 ));
2767 }
2768
2769 if (1 === count($values)) {
2770 $value = strtolower($values[0]);
2771 if (true === $booleanValidator($value)) {
2772 if (false === $booleanNormalizer($value)) {
2773 return $this->configSource->addRepository($matches[1], false);
2774 }
2775 } else {
2776 $value = JsonFile::parseJson($values[0]);
2777
2778 return $this->configSource->addRepository($matches[1], $value);
2779 }
2780 }
2781
2782 throw new \RuntimeException('You must pass the type and a url. Example: php composer.phar config repositories.foo vcs https://bar.com');
2783 }
2784
2785
2786  if (preg_match('/^extra\.(.+)/', $settingKey, $matches)) {
2787 if ($input->getOption('unset')) {
2788 return $this->configSource->removeProperty($settingKey);
2789 }
2790
2791 return $this->configSource->addProperty($settingKey, $values[0]);
2792 }
2793
2794
2795  if (preg_match('/^platform\.(.+)/', $settingKey, $matches)) {
2796 if ($input->getOption('unset')) {
2797 return $this->configSource->removeConfigSetting($settingKey);
2798 }
2799
2800 return $this->configSource->addConfigSetting($settingKey, $values[0]);
2801 }
2802
2803
2804  if (preg_match('/^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|http-basic)\.(.+)/', $settingKey, $matches)) {
2805 if ($input->getOption('unset')) {
2806 $this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2807 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2808
2809 return;
2810 }
2811
2812 if ($matches[1] === 'bitbucket-oauth') {
2813 if (2 !== count($values)) {
2814 throw new \RuntimeException('Expected two arguments (consumer-key, consumer-secret), got '.count($values));
2815 }
2816 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2817 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('consumer-key' => $values[0], 'consumer-secret' => $values[1]));
2818 } elseif (in_array($matches[1], array('github-oauth', 'gitlab-oauth', 'gitlab-token'), true)) {
2819 if (1 !== count($values)) {
2820 throw new \RuntimeException('Too many arguments, expected only one token');
2821 }
2822 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2823 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], $values[0]);
2824 } elseif ($matches[1] === 'http-basic') {
2825 if (2 !== count($values)) {
2826 throw new \RuntimeException('Expected two arguments (username, password), got '.count($values));
2827 }
2828 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2829 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1]));
2830 }
2831
2832 return;
2833 }
2834
2835 throw new \InvalidArgumentException('Setting '.$settingKey.' does not exist or is not supported by this command');
2836 }
2837
2838 protected function handleSingleValue($key, array $callbacks, array $values, $method)
2839 {
2840 list($validator, $normalizer) = $callbacks;
2841 if (1 !== count($values)) {
2842 throw new \RuntimeException('You can only pass one value. Example: php composer.phar config process-timeout 300');
2843 }
2844
2845 if (true !== $validation = $validator($values[0])) {
2846 throw new \RuntimeException(sprintf(
2847 '"%s" is an invalid value'.($validation ? ' ('.$validation.')' : ''),
2848 $values[0]
2849 ));
2850 }
2851
2852 return call_user_func(array($this->configSource, $method), $key, $normalizer($values[0]));
2853 }
2854
2855 protected function handleMultiValue($key, array $callbacks, array $values, $method)
2856 {
2857 list($validator, $normalizer) = $callbacks;
2858 if (true !== $validation = $validator($values)) {
2859 throw new \RuntimeException(sprintf(
2860 '%s is an invalid value'.($validation ? ' ('.$validation.')' : ''),
2861 json_encode($values)
2862 ));
2863 }
2864
2865 return call_user_func(array($this->configSource, $method), $key, $normalizer($values));
2866 }
2867
2868
2869
2870
2871
2872
2873
2874
2875
2876 protected function listConfiguration(array $contents, array $rawContents, OutputInterface $output, $k = null)
2877 {
2878 $origK = $k;
2879 $io = $this->getIO();
2880 foreach ($contents as $key => $value) {
2881 if ($k === null && !in_array($key, array('config', 'repositories'))) {
2882 continue;
2883 }
2884
2885 $rawVal = isset($rawContents[$key]) ? $rawContents[$key] : null;
2886
2887 if (is_array($value) && (!is_numeric(key($value)) || ($key === 'repositories' && null === $k))) {
2888 $k .= preg_replace('{^config\.}', '', $key . '.');
2889 $this->listConfiguration($value, $rawVal, $output, $k);
2890 $k = $origK;
2891
2892 continue;
2893 }
2894
2895 if (is_array($value)) {
2896 $value = array_map(function ($val) {
2897 return is_array($val) ? json_encode($val) : $val;
2898 }, $value);
2899
2900 $value = '['.implode(', ', $value).']';
2901 }
2902
2903 if (is_bool($value)) {
2904 $value = var_export($value, true);
2905 }
2906
2907 if (is_string($rawVal) && $rawVal != $value) {
2908 $io->write('[<comment>' . $k . $key . '</comment>] <info>' . $rawVal . ' (' . $value . ')</info>');
2909 } else {
2910 $io->write('[<comment>' . $k . $key . '</comment>] <info>' . $value . '</info>');
2911 }
2912 }
2913 }
2914 }
2915 <?php
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927 namespace Composer\Command;
2928
2929 use Composer\Config;
2930 use Composer\Factory;
2931 use Composer\Installer;
2932 use Composer\Installer\ProjectInstaller;
2933 use Composer\Installer\InstallationManager;
2934 use Composer\Installer\SuggestedPackagesReporter;
2935 use Composer\IO\IOInterface;
2936 use Composer\Package\BasePackage;
2937 use Composer\DependencyResolver\Pool;
2938 use Composer\DependencyResolver\Operation\InstallOperation;
2939 use Composer\Package\Version\VersionSelector;
2940 use Composer\Package\AliasPackage;
2941 use Composer\Repository\RepositoryFactory;
2942 use Composer\Repository\CompositeRepository;
2943 use Composer\Repository\PlatformRepository;
2944 use Composer\Repository\InstalledFilesystemRepository;
2945 use Composer\Script\ScriptEvents;
2946 use Composer\Util\Silencer;
2947 use Symfony\Component\Console\Input\InputArgument;
2948 use Symfony\Component\Console\Input\InputInterface;