
    Mhk                       d Z ddlmZ ddlZddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZmZmZmZmZmZ ddlmZ ddlmZ ddlmZmZmZmZmZmZmZmZ dd	l m!Z! dd
l"m#Z# ddl$m%Z% ddl&m'Z' dgZ(ej)        *                    e+          Z,ej)        -                    ej)        .                    e,d                    Z/i de%j0        de%j1        de%j2        de%j3        de%j4        de%j5        de%j6        de%j7        de%j8        de%j9        de%j:        de%j;        de%j<        de%j=        de%j>        de%j?        d e%j@        i d!e%jA        d"e%jB        d#e%jC        d$e%jD        d%e%jE        d&e%jF        d'e%jG        d(e%jH        d)e%jI        d*e%jJ        d+e%jK        d,ejL        d-d. d/d0 d1d2 d3e%jM        d4e%jN        d5e%jO        iZPd6 ZQd7 ZR G d8 d9e          ZS G d: d;e'          ZTdS )<zThis module defines TemplateExporter, a highly configurable converter
that uses Jinja2 to export notebook files into different formats.
    )annotationsN)Path)
BaseLoaderChoiceLoader
DictLoaderEnvironmentFileSystemLoaderTemplateNotFound)jupyter_path)NotebookNode)BoolDict	HasTraitsListUnicodedefaultobservevalidate)Config)import_itemfilters   )Exporterzjinja2.ext.loopcontrolsz
../../.gitindentmarkdown2htmlmarkdown2asciidoc	ansi2htmlfilter_data_type	get_lineshighlight2htmlhighlight2latexipython2python
posix_pathmarkdown2latexmarkdown2rstcomment_lines
strip_ansistrip_dollarsstrip_files_prefix	html2text
add_anchor
ansi2latex	wrap_textescape_latexcitation2latexpath2urladd_prompts
ascii_onlyprevent_list_blocksget_metadataconvert_pandoc
json_dumpsescape_htmlc                D    t          j        t          |                     S Nhtmlescapestrss    d/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/nbconvert/exporters/templateexporter.py<lambda>rB   I   s    T[Q00     escape_html_keep_quotesc                H    t          j        t          |           d          S )NF)quoter;   r?   s    rA   rB   rB   J   s    SVV5)I)I)I rC   escape_html_scriptc                .    |                      dd          S )N/z\/)replacer?   s    rA   rB   rB   K   s    AIIc5$9$9 rC   
clean_htmlstrip_trailing_newlinetext_base64c                    |                                 D ]c\  }}t          |t                    r+|| vri | |<   t          | |         |           | |         s| |= E||                     |d           ^|| |<   d| S )z]Recursively update one dictionary using another.
    None values will delete their keys.
    N)items
isinstancedictrecursive_updatepop)targetnewkvs       rA   rR   rR   T   s     		  1a 	q	VAY***!9 1IYJJq$ F1IIMrC   c                >    t          j        | t          d           dS )zEmit a deprecation warning.   
stacklevelN)warningswarnDeprecationWarning)msgs    rA   
deprecatedr`   j   s     M#)a888888rC   c                  $    e Zd ZdZd Zd Zd ZdS )ExtensionTolerantLoaderaN  A template loader which optionally adds a given extension when searching.

    Constructor takes two arguments: *loader* is another Jinja loader instance
    to wrap. *extension* is the extension, which will be added to the template
    name if finding the template without it fails. This should include the dot,
    e.g. '.tpl'.
    c                "    || _         || _        dS )zInitialize the loader.N)loader	extension)selfrd   re   s      rA   __init__z ExtensionTolerantLoader.__init__x   s    "rC   c                    	 | j                             ||          S # t          $ rP |                    | j                  rt          |          d| j                             ||| j        z             cY S w xY w)zGet the source for a template.N)rd   
get_sourcer
   endswithre   )rf   environmenttemplates      rA   ri   z"ExtensionTolerantLoader.get_source}   s    	R;))+x@@@ 	R 	R 	R  00 ;&x00d:;))+x$.7PQQQQQ	Rs    AA76A7c                4    | j                                         S )zList available templates.)rd   list_templatesrf   s    rA   rn   z&ExtensionTolerantLoader.list_templates   s    {))+++rC   N)__name__
__module____qualname____doc__rg   ri   rn    rC   rA   rb   rb   o   sN         # # #
R R R, , , , ,rC   rb   c            	          e Zd ZU dZerGe                    dd                     ee                                                    z             ndZdZ	dTdZ
ed             ZdZdTdZed	             Ze fd
            Z ed                              dd          Z eddd                              dd          Z edd                              d          Z edd                              d          ZdZdZ ed          d             Z ed          d             Z ed          d             Z ed          d             Z  e!dg                              dd          Z" e! e                                          dd          Z# e! e                                          dd          Z$ ed           d!             Z% e                                dd          Z& e! e'd"d#          d$                              d          Z( ed%          d&             Z) edd'                              d(          Z* edd)                              d(          Z+ edd*                              d(          Z, edd+                              d(          Z- edd,                              d(          Z. edd-                              d(          Z/ edd.                              d(          Z0 edd/                              d(          Z1 edd0                              d(          Z2 e!d1                              d          Z3d2e4d3<    e5d4                              dd          Z6 e! e            d5                              d(          Z7 ed6          d7             Z8dT fd8	Z9d9 Z:	 dTdU fdBZ;	 dTdV fdDZ<	 dTdW fdGZ=dH Z>dI Z?dJ ZdK Z@ fdLZAdM ZB edN          dXdO            ZCeDdP             ZEdQ ZFdR ZG fdSZH xZIS )YTemplateExportera  
    Exports notebooks into other file formats.  Uses Jinja 2 templating engine
    to output new formats.  Inherit from this class if you are creating a new
    template type along with new filters/preprocessors.  If the filters/
    preprocessors provided by default suffice, there is no need to inherit from
    this class.  Instead, override the template_file and file_extension
    traits via a config file.

    Filters available by default for templates:

    {filters}
    z- z
    - r   Nc                    d | _         d S r:   )_template_cachedrf   changes     rA   _invalidate_template_cachez+TemplateExporter._invalidate_template_cache   s     $rC   c                P    | j         |                                 | _         | j         S r:   )rx   _load_templatero   s    rA   rl   zTemplateExporter.template   s(     ($($7$7$9$9D!$$rC   c                <    d | _         |                                  d S r:   )_environment_cachedr{   ry   s     rA   _invalidate_environment_cachez.TemplateExporter._invalidate_environment_cache   s"    #' '')))))rC   c                P    | j         |                                 | _         | j         S r:   )r   _create_environmentro   s    rA   rk   zTemplateExporter.environment   s(    #+'+'?'?'A'AD$''rC   c                    t          ddiddid          }t                      j        r<t                      j                                        }|                    |           |}|S )NenabledT)RegexRemovePreprocessorTagRemovePreprocessor)r   superdefault_configcopymerge)rf   cc2	__class__s      rA   r   zTemplateExporter.default_config   sn    ,5t+<*3T): 
 
 77! 	',,..BHHQKKKArC   zName of the template to use)helpT)configaffects_templatez Name of the template file to use)
allow_noner    zraw template stringaffects_environmentFz%Enable Jinja async template executionz<memory>template_namec                   |d         }|r|                     d          rt          j        d| j         dt          d           t
          j                            | j                  \  }| _        |r"t
          j                            |          \  }}|r't
          j        	                    |          r|g| _
        |S )Nvalue.tplz 5.x style template name passed ''. Use --template-name for the template directory with a index.<ext>.j2 file and/or --template-file to denote a different template.rY   rZ   )rj   r\   r]   r   r^   ospathsplittemplate_fileisabsextra_template_basedirs)rf   rz   r   	directorys       rA   _template_name_validatez(TemplateExporter._template_name_validate   s    w 
	;]33F;; 
	;M K43E  K  K  K"   
 -/GMM$:L,M,M)It) D+-7==+C+C(	= ;RW]]955 ;09{,rC   r   c                   |d         }|dk    r| j         | _        d S t          j                            |          }t          j                            |          ryt          j                            |          \  }| _        |g| j        | _        | j        r>| j                            d          r&t          j
        d| dt          d           d S d S d S d S )NrU   r   r   z 5.x style template file passed 'r   rY   rZ   )default_templater   r   r   abspathisfiler   extra_template_pathsrj   r\   r]   r^   )rf   rz   rU   	full_pathr   s        rA   _template_file_changedz'TemplateExporter._template_file_changed   s   Um)!%!6DF GOOC((	7>>)$$ 		,.GMM),D,D)It))2(OT5N(OD%! d&8&A&A&&I&I  @s  @  @  @&      		 		   rC   c                (    | j         r
d| j         z   S d S )Nindex)template_extensionro   s    rA   _template_file_defaultz'TemplateExporter._template_file_default   s     " 	5T444trC   raw_templatec                V    |d         s| j         | _        |                                  d S )NrU   )_last_template_filer   r{   ry   s     rA   _raw_template_changedz&TemplateExporter._raw_template_changed   s1    e} 	:!%!9D'')))))rC   .)r   r   r   c                *    t          j                    gS r:   )r   getcwdro   s    rA    _default_extra_template_basedirsz1TemplateExporter._default_extra_template_basedirs
  s    	}rC   	nbconvert	templatesz*Path where templates can be installed too.r   c                2    | j         r
| j         dz   S | j         S )Nz.j2)file_extensionro   s    rA   _template_extension_defaultz,TemplateExporter._template_extension_default  s$     	/&..""rC   zNThis allows you to exclude code cell inputs from all templates if set to True.)r   zKThis allows you to exclude input prompts from all templates if set to True.zOThis allows you to exclude code cell outputs from all templates if set to True.zLThis allows you to exclude output prompts from all templates if set to True.zSThis allows you to exclude output of stdin stream from lab template if set to True.zHThis allows you to exclude code cells from all templates if set to True.zLThis allows you to exclude markdown cells from all templates if set to True.zGThis allows you to exclude raw cells from all templates if set to True.zKThis allows you to exclude unknown cells from all templates if set to True.z[Jinja loaders to find templates. Will be tried in order before the default FileSystem ones.zList[t.Any]extra_loaderszVDictionary of filters, by name and namespace, to add to the Jinja
        environment.z>formats of raw cells to be included in this Exporter's output.raw_mimetypesc                    | j         dgS )Nr   )output_mimetypero   s    rA   _raw_mimetypes_defaultz'TemplateExporter._raw_mimetypes_defaultO  s    $b))rC   c                .    t                      j        dd|i| |                     | j        t	          |                     d                               |                     | j        t	          |                     d                               dS )a  
        Public constructor

        Parameters
        ----------
        config : config
            User configuration instance.
        extra_loaders : list[of Jinja Loaders]
            ordered list of Jinja loader to find templates. Will be tried in order
            before the default FileSystem ones.
        template_file : str (optional, kw arg)
            Template to use when exporting.
        r   Tr   )r   Nrt   )r   rg   r   r   listtraitsr{   )rf   r   kwr   s      rA   rg   zTemplateExporter.__init__T  s     	---"---.T[[UY[5Z5Z0[0[	
 	
 	
 	T4d4;;X\;;];]6^6^_____rC   c                   |                                  5  | j        r| j        | j        k    r| j        | _        | j        r| j        | _        ddd           n# 1 swxY w Y   | j        sd}t          |          | j        }| j                            d|           | j                            dt          j	        
                    | j                             | j                            |          S )zLoad the Jinja template object from the template file

        This is triggered by various trait changes that would change the template.
        NzNo template_file specified!zAttempting to load template %sz    template_paths: %s)hold_trait_notificationsr   _raw_template_keyr   r   
ValueErrorlogdebugr   pathsepjointemplate_pathsrk   get_template)rf   r_   r   s      rA   r}   zTemplateExporter._load_templatei  s%    **,, 	< 	<! >t'9T=S'S'S+/+=(  <%)%;"		< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< ! 	"/CS//!
 *7GGG/AT1U1UVVV,,];;;s   7AAAfilenamer>   	resourcesdict[str, t.Any] | Noner   t.Anyreturntuple[str, dict[str, t.Any]]c                :     t                      j        ||fi |S )z#Convert a notebook from a filename.)r   from_filename)rf   r   r   r   r   s       rA   r   zTemplateExporter.from_filename  s&     %uww$Xy??B???rC   file_streamc                :     t                      j        ||fi |S )zConvert a notebook from a file.)r   	from_file)rf   r   r   r   r   s       rA   r   zTemplateExporter.from_file  s&     !uww i>>2>>>rC   nbr   c                    t                      j        ||fi |\  }}|                    d| j                   |                    d| j                   | j         | j         | j         | j         | j	         | j
         | j         | j         | j         | j        o| j        d
|d<   | j                            ||          }|                    d          }||fS )a5  
        Convert a notebook from a notebook node instance.

        Parameters
        ----------
        nb : :class:`~nbformat.NotebookNode`
            Notebook node
        resources : dict
            Additional resources that can be accessed read/write by
            preprocessors and filters.
        r   r   )
include_codeinclude_markdowninclude_rawinclude_unknowninclude_inputinclude_outputinclude_output_stdininclude_input_promptinclude_output_prompt	no_promptglobal_content_filter)r   r   z
)r   from_notebook_node
setdefaultr   r   exclude_code_cellexclude_markdownexclude_rawexclude_unknownexclude_inputexclude_outputexclude_output_stdinexclude_input_promptexclude_output_promptrl   renderlstrip)rf   r   r   r   nb_copyoutputr   s         rA   r   z#TemplateExporter.from_notebook_node  s    8UWW7ILLLL_d.@AAA.0DEEE $ 66$($9 9#//#'#77!%!33"&"55(,(A$A(,(A$A)-)C%C2Qt7Q.
 .
	)* %%I%FFv&&y  rC   c                   |d}t          |          t          |t                    }| }|r<t          |t          f          r&t	          |          }|                     |||          S |rt          |          r||j        |<   |S |r:t          |t                    r% ||           }|                     |||           dS |r# |            }|                     |||           dS d}t          |          )9  
        Register a filter.
        A filter is a function that accepts and acts on one string.
        The filters are accessible within the Jinja templating engine.

        Parameters
        ----------
        name : str
            name to give the filter in the Jinja engine
        filter : filter
        Nfilter)parent)
	TypeErrorrP   typer>   r   _register_filtercallabler   
issubclassr   )	rf   environnamejinja_filterr_   isclassconstructed
filter_clsfilter_instances	            rA   r   z!TemplateExporter._register_filter  s-    CC.. \400!k  	D:lSF;; 	D %\22J(($
CCC 	 8L11 	 $0GOD! 	z,	:: 	 +l$777O!!'4AAA4 	*lnnO!!'4AAA4 nnrC   c                :    |                      | j        ||          S )r   )r   rk   )rf   r   r   s      rA   register_filterz TemplateExporter.register_filter  s     $$T%5t\JJJrC   c                4    t                                           S )a|  Override in subclasses to provide extra filters.

        This should return an iterable of 2-tuples: (name, class-or-function).
        You should call the method on the parent class and include the filters
        it provides.

        If a name is repeated, the last filter provided wins. Filters from
        user-supplied config win over filters provided by classes.
        )default_filtersrO   ro   s    rA   r  z TemplateExporter.default_filters  s     $$&&&rC   c                R   | j         }| j                            dd                    |                     g | j        t          t          |          | j                  t          | j	        | j
        i          }t          t          |          t          | j                  }t          j        |j        d<   |                                 D ]\  }}|                     |||           | j        r6| j                                        D ]\  }}|                     |||           |S )z:
        Create the Jinja templating environment.
        zTemplate paths:
	%s
	)rd   
extensionsenable_asyncuuid4)r   r   r   r   r   rb   r	   r   r   r   r   r   r   JINJA_EXTENSIONSr  uuidr  globalsr  r   r   rO   )rf   pathsloadersrk   keyr   user_filters          rA   r   z$TemplateExporter._create_environment  sE    #.E0B0BCCC

#$4U$;$;T=TUU
 .0ABCC

 "(('*
 
 
 (,zG$ ..00 	; 	;JC!!+sE:::: < 	E$(L$6$6$8$8 E E [%%k3DDDDrC   c                   t                                                       |                                 }|                    di           }t	          |                                d           D ]\  }}||                                }|                    d          }t          |          }|j	        | j
        v r%|                    | j
        |j	                             |di |}|                     |           d S )Npreprocessorsc                    | d         S )Nr   rt   )xs    rA   rB   z6TemplateExporter._init_preprocessors.<locals>.<lambda>"  s
    1Q4 rC   )r  r   rt   )r   _init_preprocessors	_get_confgetsortedrO   r   rS   r   rp   r   updateregister_preprocessor)rf   confr  _preprocessorkwargspreprocessor_clsr   s          rA   r  z$TemplateExporter._init_preprocessors  s   ##%%%~~"55
  &m&9&9&;&;PPP 	9 	9OA|'%**,,#)::f#5#5 #./?#@#@ #,;;MM$+.>.G"HIII//99&99**<888	9 	9rC   c                   i }t          t          | j                  D ]i}|dz  }|                                rN|                                5 }t          |t          j        |                    }d d d            n# 1 swxY w Y   j|S )N	conf.json)mapr   r   existsopenrR   jsonload)rf   r  r   	conf_pathfs        rA   r  zTemplateExporter._get_conf,  s    !#d122 	@ 	@D{*I!! @^^%% @+D$)A,,??D@ @ @ @ @ @ @ @ @ @ @ @ @ @ @s   #A;;A?	A?	r   c                   g }|                                  }|                                 }|D ]}| j        D ]i}t          j                            ||          }	 |rt          j                            |          r|                    |           Z# t          $ r Y fw xY w|D ]}t          j                            |dd          }t          j                            ||          }	 |rt          j                            |          r|                    |           {# t          $ r Y w xY w|D ]}|                    |           t          j                            |dd          }|                    |           t          j                            |ddd          }	|                    |	           g }
| j	        D ]8}|rt          j                            |          r|
                    |           9|| j
        z   |
z   S )Nr   r   compatibility)get_prefix_root_dirsget_template_namesr   r   r   r   r&  appendPermissionErrortemplate_data_pathsr   )rf   prune	root_dirsr  template_namesr   base_dirr   root_dircompatibility_diradditional_pathss              rA   _template_pathsz TemplateExporter._template_paths5  s(   --//	0022+ 	 	M 8  w||Hm<<  +BGNN4$8$8 +T***&   D%  7<<+{KKw||Hm<<  +BGNN4$8$8 +T***&   D " 
	, 
	,H LL""" w||Hk;GGHLL""" "X{KQ` a aLL*++++, 	. 	.D .BGNN400 . ''---t003CCCs$   6B
BB'6D
D+*D+c                4    |dk    rddiS |dk    rdddidS d	S )
zGet the base template config.display_prioritybase_templatebasefullclassicz	text/htmlT)r=  	mimetypesNrt   )clsr   s     rA   $get_compatibility_base_template_confz5TemplateExporter.get_compatibility_base_template_conf^  s<     %%%#V,,6>>%.k4=PQQQtrC   c                J   g }|                                  }| j        }i }||                    |           i }d}| j        D ]}t          j                            ||          }t          j                            |          rd}t          j                            |d          }	t          j                            |	          rIt          |	          5 }
t          t          j        |
          |          }ddd           n# 1 swxY w Y   |D ]}t          j                            |dd|          }t          j                            |          rd}t          j                            |d          }	t          j                            |	          rIt          |	          5 }
t          t          j        |
          |          }ddd           n# 1 swxY w Y   |s|D ]}|dz   }t          j                            |ddd|          }t          j                            |          rwd}t          j        d	| j         d
t          d           || _        |                     |          }t#          j        t&          |                    d                    | _         n|s,d                    |          }d|d| }t+          |          t          t-          |          |          }t#          j        t"          j        |                    d                    }||}d |                    di                                           D             }| j        rD| j        |vr;|r9d                    |          }d| j        d| j        d| }t+          |          |S )zWFinds a list of template names where each successive template name is the base templateNFTr$  r   r   r   r-  z5.x template name passed 'z1'. Use 'lab' or 'classic' for new template usage.rY   rZ   r=  r	  z$No template sub-directory with name z  found in the following paths:
	c                    g | ]	\  }}||
S rt   rt   ).0mimetyper   s      rA   
<listcomp>z7TemplateExporter.get_template_names.<locals>.<listcomp>  s#    ddd"3(G\cdXdddrC   rA  zUnsupported mimetype z for template z, mimetypes supported are: 
	)r.  r   r0  r   r   r   r   r&  r'  rR   r(  r)  r\   r]   r^   r   rC  tcastr>   r  r   rQ   AnyrO   r   )rf   r5  r4  r=  merged_confr  found_at_least_oner6  template_dir	conf_filer+  r7  compatibility_filecompatibility_pathr  r_   rA  supported_mimetypess                     rA   r/  z#TemplateExporter.get_template_namesh  sC   --//	$($6(*'!!-000%'D!& 8 D D!w||HmDD7>>,// .)-&GLL{CC	7>>),, Di DA/	!dCCD D D D D D D D D D D D D D D% D D!w||Hk;P]^^7>>,// .)-&GLL{CC	7>>),, Di DA/	!dCCD D D D D D D D D D D D D D D% * )  H)6)?&)+ +{OM_* *& w~~&899 
-1* ~9K~~~.'(   
 .@*#HHWW-.VC/9R9R-S-S*
 * *"KK	22E{{{ty{{C$S//)*4::{CCKF15$((?*C*CDDMW 'X ddtxxR7P7P7V7V7X7Xddd	 	"D$8	$I$Ii$I"(++i"8"8 [$*>  [  [PTPb  [  [  FY  [  [CS//!s$   #DD	
D	$#GG	G	c                
   g }t           rX|                    t          j                            t          j                            t          dddd                               |                    t                                 |S )zGet the prefix root dirs.z..sharejupyter)	DEV_MODEr0  r   r   r   r   ROOTextendr   )rf   r4  s     rA   r.  z%TemplateExporter.get_prefix_root_dirs  si     	 	bRW__RW\\$dGU^-_-_``aaa(((rC   c                ^    t                                          |          }t          |d<   |S )Nr`   )r   _init_resourcesr`   )rf   r   r   s     rA   rZ  z TemplateExporter._init_resources  s*    GG++I66	",	,rC   r:   )r   r>   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )TN)Jrp   rq   rr   rs   formatr   r  r  keysrx   r{   propertyrl   r   r   rk   r   r   tagr   r   r   r   r  r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r   r   r   r   r   r   r   r   r   r   r   __annotations__r   r   r   r   rg   r}   r   r   r   r   r  r   r  r  r:  classmethodrC  r/  r.  rZ  __classcell__)r   s   @rA   rv   rv      s           	tjooff_=Q=Q=S=S6T6T&U&UUVVV  % % % % % % X%
 * * * * ( ( X(
     X G!>???CCd D  M GDT8Z[[[__d `  M 72$9:::>>SW>XXL4$KLLLPP  Q  L "Xo   W_  & W_  
 W^* * *
 T3%[[__Dd_KKN"d7799oo11SW1XX4		??..dPT.UUW&''  (' !dMM$[+..5a  	cdc##  W!""# # #"#
 Dd  	cc   4a  	cc  T^   
cc 
 !Db  	cc   4b   
cc 
 ^  	cc  tb  	cc  $]  	cc  da  	cc  "&." " " 
cdc##  $ $ $ $
 d   
c4c00 
 D		\  	cc  W_* * *` ` ` ` ` `*< < <4 CG@ @ @ @ @ @ @ HL? ? ? ? ? ? ? FJ!! !! !! !! !! !! !!F. . .`K K K
' 
' 
'  >9 9 9 9 9$   W&D &D &D &DP   [8 8 8t          rC   rv   )Urs   
__future__r   r<   r(  r   typingrI  r  r\   pathlibr   jinja2r   r   r   r   r	   r
   jupyter_core.pathsr   nbformatr   	traitletsr   r   r   r   r   r   r   r   traitlets.configr   traitlets.utils.importstringr   r   r   exporterr   r  r   dirname__file__rW  r&  r   rV  r   r   r   r   DataTypeFilterr    Highlight2HTMLHighlight2Latexr#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   dumpsrK   rL   rM   r  rR   r`   rb   rv   rt   rC   rA   <module>rr     sZ    # " " " " "   				                            , + + + + + ! ! ! ! ! ! V V V V V V V V V V V V V V V V V V V V # # # # # # 4 4 4 4 4 4             .. 	wx  7>>"',,t\::;;&gn&W*& 2& "	&
 .& "& g,& w.& g,& '$& g,& G(& W*& '$& W*&  '4!&" "#& &$ '$%&& '$'&( ")&* G(+&, g,-&.  /&0 7&1&2 '$3&4 765&6 G(7&8 g,9&: $*;&> 00?&@ IIA&B 99C&F '$G&H g<I& &J 7&K& &T  ,9 9 9
, , , , ,j , , ,8d d d d dx d d d d drC   