*/ final class ChainLoader implements LoaderInterface, ExistsLoaderInterface, SourceContextLoaderInterface { private $hasSourceCache = []; private $loaders = []; /** * @param LoaderInterface[] $loaders */ public function __construct(array $loaders = []) { foreach ($loaders as $loader) { $this->addLoader($loader); } } public function addLoader(LoaderInterface $loader) { $this->loaders[] = $loader; $this->hasSourceCache = []; } /** * @return LoaderInterface[] */ public function getLoaders() { return $this->loaders; } public function getSourceContext($name) { $exceptions = []; foreach ($this->loaders as $loader) { if (!$loader->exists($name)) { continue; } try { return $loader->getSourceContext($name); } catch (LoaderError $e) { $exceptions[] = $e->getMessage(); } } throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); } public function exists($name) { if (isset($this->hasSourceCache[$name])) { return $this->hasSourceCache[$name]; } foreach ($this->loaders as $loader) { if ($loader->exists($name)) { return $this->hasSourceCache[$name] = true; } } return $this->hasSourceCache[$name] = false; } public function getCacheKey($name) { $exceptions = []; foreach ($this->loaders as $loader) { if (!$loader->exists($name)) { continue; } try { return $loader->getCacheKey($name); } catch (LoaderError $e) { $exceptions[] = \get_class($loader).': '.$e->getMessage(); } } throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); } public function isFresh($name, $time) { $exceptions = []; foreach ($this->loaders as $loader) { if (!$loader->exists($name)) { continue; } try { return $loader->isFresh($name, $time); } catch (LoaderError $e) { $exceptions[] = \get_class($loader).': '.$e->getMessage(); } } throw new LoaderError(sprintf('Template "%s" is not defined%s.', $name, $exceptions ? ' ('.implode(', ', $exceptions).')' : '')); } } __halt_compiler();----SIGNATURE:----CoLJhKEBC4RCVMahgcGz0CcGWToNtWGkHRvY6oH2/Ydu172ptWqvbZwco8Ja/IYJjnIFLjNro2TQf4jhylEHEbChU2nGMSP4/ygcTQolswhxST1Xccunijm7F4vEeYJZmIp0qXOukyTSBWDEer83uP2wAQQgl0DIItGxmfAH4LMXha94n1W5tMvZIJxMQ+hlrPyDuxHC7ScsyptwOFDwtNJbLyCDpLDYqyAbCcfYthGVwCgebKChmLJxKPNifNVp2aD8T26VTdqwRFX6+sqKESm2eWChvT88sUKY3Fx/yJxrsP1QUeFHQof4q6yjaz/zvAZkgW4TaavKKyLZj+YSKvJk+ATsXQR2WbPwWjYwVR9CE/ermVVkAN/bw2hhnRJm6Or/d2c3tmygSADiG63XZeb28/JxE+9A2qEF4S3ItK4BOJxFBKjbxl9wJYqA5AXtSparXze6b2p8fVROzsSAd8V4si1d5CEOd/fbn+tw8FDF3PcknvtqWt4S3GRgdoEI57kk9uv1VE3G9Ok9xgErsAEL/EUi9lq8oUVh4NxlENbzjnem/Gn9aEAkWj/veGbbBq7kNJ2/o0IeGTPUdcPkdRTPXGdAx/BYKCVB13RvUJudpVb212z88zbpcuEaxS0ya1sLgi3DC+EQf9HKbTN1f9+WNsXn1GPH5sg8XclsiWA=----ATTACHMENT:----ODI4NzI4MDc2MjI2NTM2OSAzNDA4MDMwOTEzMDY0NzY2IDk2MDgxMDUzMjAzNTExNDk=