| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Smarty Resource Plugin | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |  * @package    Smarty | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |  * @subpackage TemplateResources | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |  * @author     Rodney Rehm | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Smarty Resource Plugin | 
					
						
							|  |  |  |  * Base implementation for resource plugins | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |  * @package    Smarty | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |  * @subpackage TemplateResources | 
					
						
							| 
									
										
										
										
											2016-05-15 11:13:31 +02:00
										 |  |  |  * | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |  * @method renderUncompiled(Smarty_Template_Source $source, Smarty_Internal_Template $_template) | 
					
						
							|  |  |  |  * @method populateCompiledFilepath(Smarty_Template_Compiled $compiled, Smarty_Internal_Template $_template) | 
					
						
							| 
									
										
										
										
											2016-05-15 11:13:31 +02:00
										 |  |  |  * @method process(Smarty_Internal_Template $_smarty_tpl) | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |  */ | 
					
						
							| 
									
										
										
										
											2013-07-14 22:15:45 +00:00
										 |  |  | abstract class Smarty_Resource | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * resource types provided by the core | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var array | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public static $sysplugins = array('file'    => 'smarty_internal_resource_file.php', | 
					
						
							|  |  |  |                                       'string'  => 'smarty_internal_resource_string.php', | 
					
						
							|  |  |  |                                       'extends' => 'smarty_internal_resource_extends.php', | 
					
						
							|  |  |  |                                       'stream'  => 'smarty_internal_resource_stream.php', | 
					
						
							|  |  |  |                                       'eval'    => 'smarty_internal_resource_eval.php', | 
					
						
							|  |  |  |                                       'php'     => 'smarty_internal_resource_php.php'); | 
					
						
							| 
									
										
										
										
											2015-01-01 23:34:29 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Source is bypassing compiler | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var boolean | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public $uncompiled = false; | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Source must be recompiled on every occasion | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var boolean | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public $recompiled = false; | 
					
						
							| 
									
										
										
										
											2015-08-23 01:25:57 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Flag if resource does implement populateCompiledFilepath() method | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @var bool | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public $hasCompiledHandler = false; | 
					
						
							| 
									
										
										
										
											2016-05-15 11:13:31 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * Load Resource Handler | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * @param Smarty $smarty smarty object | 
					
						
							|  |  |  |      * @param string $type   name of the resource | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @throws SmartyException | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |      * @return Smarty_Resource Resource Handler | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2013-07-15 18:18:28 +00:00
										 |  |  |     public static function load(Smarty $smarty, $type) | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2011-10-15 10:46:03 +00:00
										 |  |  |         // try smarty's cache
 | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |         if (isset($smarty->_cache[ 'resource_handlers' ][ $type ])) { | 
					
						
							|  |  |  |             return $smarty->_cache[ 'resource_handlers' ][ $type ]; | 
					
						
							| 
									
										
										
										
											2011-09-17 16:29:10 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         // try registered resource
 | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |         if (isset($smarty->registered_resources[ $type ])) { | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |             return $smarty->_cache[ 'resource_handlers' ][ $type ] = | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |                 $smarty->registered_resources[ $type ] instanceof Smarty_Resource ? | 
					
						
							|  |  |  |                     $smarty->registered_resources[ $type ] : new Smarty_Internal_Resource_Registered(); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |         // try sysplugins dir
 | 
					
						
							| 
									
										
										
										
											2016-02-09 01:27:15 +01:00
										 |  |  |         if (isset(self::$sysplugins[ $type ])) { | 
					
						
							| 
									
										
										
										
											2015-01-01 23:34:29 +01:00
										 |  |  |             $_resource_class = 'Smarty_Internal_Resource_' . ucfirst($type); | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |             return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class(); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |         // try plugins dir
 | 
					
						
							| 
									
										
										
										
											2011-10-15 10:46:03 +00:00
										 |  |  |         $_resource_class = 'Smarty_Resource_' . ucfirst($type); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         if ($smarty->loadPlugin($_resource_class)) { | 
					
						
							|  |  |  |             if (class_exists($_resource_class, false)) { | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |                 return $smarty->_cache[ 'resource_handlers' ][ $type ] = new $_resource_class(); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |             } else { | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |                 $smarty->registerResource( | 
					
						
							|  |  |  |                     $type, | 
					
						
							|  |  |  |                     array("smarty_resource_{$type}_source", "smarty_resource_{$type}_timestamp", | 
					
						
							|  |  |  |                     "smarty_resource_{$type}_secure", "smarty_resource_{$type}_trusted") | 
					
						
							|  |  |  |                 ); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |                 // give it another try, now that the resource is registered properly
 | 
					
						
							| 
									
										
										
										
											2011-10-15 10:46:03 +00:00
										 |  |  |                 return self::load($smarty, $type); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         // try streams
 | 
					
						
							|  |  |  |         $_known_stream = stream_get_wrappers(); | 
					
						
							| 
									
										
										
										
											2011-10-15 10:46:03 +00:00
										 |  |  |         if (in_array($type, $_known_stream)) { | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |             // is known stream
 | 
					
						
							|  |  |  |             if (is_object($smarty->security_policy)) { | 
					
						
							| 
									
										
										
										
											2011-10-15 10:46:03 +00:00
										 |  |  |                 $smarty->security_policy->isTrustedStream($type); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |             } | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |             return $smarty->_cache[ 'resource_handlers' ][ $type ] = new Smarty_Internal_Resource_Stream(); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |         } | 
					
						
							|  |  |  |         // TODO: try default_(template|config)_handler
 | 
					
						
							|  |  |  |         // give up
 | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |         throw new SmartyException("Unknown resource type '{$type}'"); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-12-16 17:00:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-13 13:10:06 +00:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |      * extract resource_type and resource_name from template_resource and config_resource | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |      * @note "C:/foo.tpl" was forced to file resource up till Smarty 3.1.3 (including). | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * @param string $resource_name    template_resource or config_resource to parse | 
					
						
							|  |  |  |      * @param string $default_resource the default resource_type defined in $smarty | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |      * @return array with parsed resource name and type | 
					
						
							| 
									
										
										
										
											2011-10-13 13:10:06 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |     public static function parseResourceName($resource_name, $default_resource) | 
					
						
							| 
									
										
										
										
											2011-10-13 13:10:06 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |         if (preg_match('/^([A-Za-z0-9_\-]{2,})[:]/', $resource_name, $match)) { | 
					
						
							|  |  |  |             $type = $match[ 1 ]; | 
					
						
							|  |  |  |             $name = substr($resource_name, strlen($match[ 0 ])); | 
					
						
							| 
									
										
										
										
											2015-05-04 22:44:29 +02:00
										 |  |  |         } else { | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |             // no resource given, use default
 | 
					
						
							|  |  |  |             // or single character before the colon is not a resource type, but part of the filepath
 | 
					
						
							|  |  |  |             $type = $default_resource; | 
					
						
							|  |  |  |             $name = $resource_name; | 
					
						
							| 
									
										
										
										
											2011-10-13 13:10:06 +00:00
										 |  |  |         } | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |         return array($name, $type); | 
					
						
							| 
									
										
										
										
											2011-10-13 13:10:06 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-12-16 17:00:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-10-13 13:10:06 +00:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |      * modify template_resource according to resource handlers specifications | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:17 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * @param \Smarty_Internal_Template|\Smarty $obj               Smarty instance | 
					
						
							|  |  |  |      * @param string                            $template_resource template_resource to extract resource handler and name of | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:17 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |      * @return string unique resource name | 
					
						
							| 
									
										
										
										
											2017-10-26 10:25:41 +02:00
										 |  |  |      * @throws \SmartyException | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:17 +02:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |     public static function getUniqueTemplateName($obj, $template_resource) | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:17 +02:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |         $smarty = $obj->_getSmartyObj(); | 
					
						
							|  |  |  |         list($name, $type) = self::parseResourceName($template_resource, $smarty->default_resource_type); | 
					
						
							|  |  |  |         // TODO: optimize for Smarty's internal resource types
 | 
					
						
							|  |  |  |         $resource = Smarty_Resource::load($smarty, $type); | 
					
						
							|  |  |  |         // go relative to a given template?
 | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |         $_file_is_dotted = $name[ 0 ] === '.' && ($name[ 1 ] === '.' || $name[ 1 ] === '/'); | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |         if ($obj->_isTplObj() && $_file_is_dotted  | 
					
						
							|  |  |  |             && ($obj->source->type === 'file' || $obj->parent->source->type === 'extends') | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |         ) { | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |             $name = $smarty->_realpath(dirname($obj->parent->source->filepath) . DIRECTORY_SEPARATOR . $name); | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |         } | 
					
						
							|  |  |  |         return $resource->buildUniqueResourceName($smarty, $name); | 
					
						
							| 
									
										
										
										
											2011-10-13 13:10:06 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-12-16 17:00:51 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |      * initialize Source Object for given resource | 
					
						
							|  |  |  |      * wrapper for backward compatibility to versions < 3.1.22 | 
					
						
							|  |  |  |      * Either [$_template] or [$smarty, $template_resource] must be specified | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * @param Smarty_Internal_Template $_template         template object | 
					
						
							|  |  |  |      * @param Smarty                   $smarty            smarty object | 
					
						
							|  |  |  |      * @param string                   $template_resource resource identifier | 
					
						
							| 
									
										
										
										
											2014-06-06 02:40:04 +00:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2017-10-26 10:25:41 +02:00
										 |  |  |      * @return \Smarty_Template_Source Source Object | 
					
						
							|  |  |  |      * @throws \SmartyException | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |     public static function source(Smarty_Internal_Template $_template = null, | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |         Smarty $smarty = null, | 
					
						
							|  |  |  |         $template_resource = null | 
					
						
							|  |  |  |     ) { | 
					
						
							| 
									
										
										
										
											2017-10-26 04:37:31 +02:00
										 |  |  |         return Smarty_Template_Source::load($_template, $smarty, $template_resource); | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Load template's source into current template object | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * @param Smarty_Template_Source $source source object | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return string                 template source | 
					
						
							|  |  |  |      * @throws SmartyException        if source cannot be loaded | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     abstract public function getContent(Smarty_Template_Source $source); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * populate Source Object with meta data from Resource | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Smarty_Template_Source   $source    source object | 
					
						
							|  |  |  |      * @param Smarty_Internal_Template $_template template object | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     abstract public function populate(Smarty_Template_Source $source, Smarty_Internal_Template $_template = null); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * populate Source Object with timestamp and exists from Resource | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @param Smarty_Template_Source $source source object | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function populateTimestamp(Smarty_Template_Source $source) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // intentionally left blank
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * modify resource_name according to resource handlers specifications | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * @param Smarty  $smarty        Smarty instance | 
					
						
							|  |  |  |      * @param string  $resource_name resource_name to make unique | 
					
						
							|  |  |  |      * @param boolean $isConfig      flag for config resource | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return string unique resource name | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function buildUniqueResourceName(Smarty $smarty, $resource_name, $isConfig = false) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         if ($isConfig) { | 
					
						
							|  |  |  |             if (!isset($smarty->_joined_config_dir)) { | 
					
						
							|  |  |  |                 $smarty->getTemplateDir(null, true); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             return get_class($this) . '#' . $smarty->_joined_config_dir . '#' . $resource_name; | 
					
						
							|  |  |  |         } else { | 
					
						
							|  |  |  |             if (!isset($smarty->_joined_template_dir)) { | 
					
						
							|  |  |  |                 $smarty->getTemplateDir(); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |             return get_class($this) . '#' . $smarty->_joined_template_dir . '#' . $resource_name; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /* | 
					
						
							|  |  |  |      * Check if resource must check time stamps when when loading complied or cached templates. | 
					
						
							|  |  |  |      * Resources like 'extends' which use source components my disable timestamp checks on own resource. | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return bool | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * Determine basename for compiled filename | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2018-06-12 09:58:15 +02:00
										 |  |  |      * @param Smarty_Template_Source $source source object | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |      * | 
					
						
							|  |  |  |      * @return string                 resource's basename | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function getBasename(Smarty_Template_Source $source) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return basename(preg_replace('![^\w]+!', '_', $source->name)); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-10-26 10:25:41 +02:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @return bool | 
					
						
							|  |  |  |      */ | 
					
						
							| 
									
										
										
										
											2017-10-26 05:27:25 +02:00
										 |  |  |     public function checkTimestamps() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         return true; | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2011-09-16 14:19:56 +00:00
										 |  |  | } | 
					
						
							|  |  |  | 
 |