
    -Ph6_                    (   U d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ dd	lmZmZ dd
l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dlmZ ddl m!Z! ddl"m#Z# ddl$m%Z% erddl&Z&ddl'm(Z(m)Z)m*Z*m+Z+ ddl
m,Z,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6mZ ddl7m8Z8 ddl9m:Z: ddl;m<Z< ddl=m>Z> ddl?m@Z@ ddlAmBZB ddlmCZCmDZD ddlEmFZF dd lGmHZH dd!lImJZJ dd"lKmLZLmMZMmNZNmOZO dd#lPmQZQ e(e,e,gdf         ZRd$eSd%<   eTeReRdz  f         ZUd$eSd&<   e(eQe/jV        gdf         ZWd$eSd'<   e(eQe/jX        gdf         ZYd$eSd(<   eTeWeWdz  f         ZZd$eSd)<   eTeYeYdz  f         Z[d$eSd*<    e!j\        e]          Z^d+d,d-d.Z_ G d/ d0          Z`d:d7Zad;d9ZbdS )<zSphinx component registry.    )annotationsN)import_module)entry_points)
MethodType)TYPE_CHECKING)ObjType)GenericObjectTarget)ExtensionErrorSphinxErrorVersionRequirementError)	Extension)create_publisher)__)Parser)XRefRole)logging)_StrPath)prefixed_warnings)CallableIteratorMappingSequence)Any	TypeAlias)nodes)	Publisher)ElementNodeTextElement)	Directive)	Transform)addnodes)Sphinx)Builder)Config)DomainIndex)BuildEnvironment)
Documenter)Field)ExtensionMetadataRoleFunctionTitleGetter_ExtensionSetupFunc)HTML5Translatorr   _NodeHandler_NodeHandlerPair_MathsRenderer_MathsBlockRenderer_MathsInlineRenderers_MathsBlockRenderersz1.2z1.3z2.0.0)zsphinxjp.themecorezsphinxcontrib-napoleonsphinxprettysearchresultsc                     e Zd ZdwdZedxd            ZdydzdZd{dZd|dZdyd}dZ	d~dZ
ddZ	 dyddZ	 dydd Z	 dydd#Z	 	 	 	 	 	 ddd1Z	 	 	 	 ddd2Z	 dydd5Zdydd8Zdd9Zdd;Zdd>Z	 dyddAZddFZddGZddKZddNZddPZddQZddRZddVZdd[Zdd]Z dd_Z!dd`Z"	 dyddcZ#	 	 dddhZ$ddmZ%ddpZ&ddrZ'ddtZ(ddvZ)d%S )SphinxComponentRegistryreturnNonec                V   i | _         i | _        i | _        g | _        i | _        i | _        i | _        i | _        i | _        i | _	        i | _
        i | _        d| _        i | _        g | _        g | _        g | _        g | _        i | _        i | _        i | _        i | _        g | _        i | _        d S )Nper_page)autodoc_attrgettersbuildersdocumenters	css_filesdomainsdomain_directivesdomain_indicesdomain_object_typesdomain_rolesenumerable_nodeshtml_inline_math_renderershtml_block_math_renderershtml_assets_policyhtml_themesjs_fileslatex_packageslatex_packages_after_hyperrefpost_transformssource_parserssource_suffixtranslatorstranslation_handlers
transforms
publishersselfs    O/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/sphinx/registry.py__init__z SphinxComponentRegistry.__init__L   s    OQ  35 9; <> 13 IK =? CE  LN SU  	'  	& (2 13 BD =?KM* 79 8: .0 @B MO! 24 13    *dict[type, Callable[[Any, str, Any], Any]]c                    | j         S Nr>   rV   s    rX   autodoc_attrgettrsz*SphinxComponentRegistry.autodoc_attrgettrs   s    ''rZ   Fbuildertype[Builder]overrideboolc                N   t                               d|           t          |d          st          t	          d          |z            |j        | j        v r=|s;t          t	          d          |j        | j        |j                 j        fz            || j        |j        <   d S )Nz[app] adding builder: %rnamez(Builder class %s has no "name" attributez(Builder %r already exists (in module %s))loggerdebughasattrr   r   re   r?   
__module__)rW   r`   rb   s      rX   add_builderz#SphinxComponentRegistry.add_builder   s    /999w'' 	 =>>H   <4=((( =>><w|!<!GHI   '.gl###rZ   appr$   re   strc                    |d S || j         vrit          d          }	 ||         }n2# t          $ r%}t          t	          d          |z            |d }~ww xY w|                     ||j                   d S d S )Nzsphinx.builders)groupz?Builder name %s not registered or available through entry point)r?   r   KeyErrorr   r   load_extensionmodule)rW   rk   re   builder_entry_pointsentry_pointexcs         rX   preload_builderz'SphinxComponentRegistry.preload_builder   s    <Ft}$$#/6G#H#H#H 	248   !/  	   [%788888 %$s   ( 
A AAenvr)   r%   c                    || j         vrt          t          d          |z             | j         |         ||          S )NzBuilder name %s not registered)r?   r   r   )rW   rk   re   rv   s       rX   create_builderz&SphinxComponentRegistry.create_builder   sD    t}$$b!ABBTIJJJ"t}T"3,,,rZ   domaintype[Domain]c                    t                               d|           |j        | j        v r&|s$t	          t          d          |j        z            || j        |j        <   d S )Nz[app] adding domain: %rzdomain %s already registered)rf   rg   re   rB   r   r   )rW   ry   rb   s      rX   
add_domainz"SphinxComponentRegistry.add_domain   s]    .777;$,&&x& $B!C!Cfk!QRRR$*V[!!!rZ   c                    || j         v S r]   )rB   )rW   ry   s     rX   
has_domainz"SphinxComponentRegistry.has_domain   s    %%rZ   Iterator[Domain]c              #  P  K   | j                                         D ]} ||          }|j                            | j                            |j        i                      |j                            | j                            |j        i                      |j	        
                    | j                            |j        g                      | j                            |j        i                                           D ]\  }}|                    ||           |V  
d S r]   )rB   values
directivesupdaterC   getre   rolesrF   indicesextendrD   rE   itemsadd_object_type)rW   rv   DomainClassry   re   objtypes         rX   create_domainsz&SphinxComponentRegistry.create_domains   s     <..00 
	 
	K [%%F $$T%;%?%?R%P%PQQQL 1 5 5fk2 F FGGGN!!$"5"9"9&+r"J"JKKK!%!9!=!=fk2!N!N!T!T!V!V 6 6g&&tW5555LLLL
	 
	rZ   clstype[Directive]c                    t                               d|||f           || j        vrt          t	          d          |z            | j                            |i           }||v r#|s!t          t	          d          ||fz            |||<   d S )Nz$[app] adding directive to domain: %rdomain %s not yet registeredz3The %r directive is already registered to domain %s)rf   rg   rB   r   r   rC   
setdefault)rW   ry   re   r   rb   r   s         rX   add_directive_to_domainz/SphinxComponentRegistry.add_directive_to_domain   s     	;fdC=PQQQ%% $B!C!Cf!LMMM151G1R1RB2
 2

 :h HII.!   
4rZ   roleRoleFunction | XRefRolec                    t                               d|||f           || j        vrt          t	          d          |z            | j                            |i           }||v r#|s!t          t	          d          ||fz            |||<   d S )Nz[app] adding role to domain: %rr   z.The %r role is already registered to domain %s)rf   rg   rB   r   r   rF   r   )rW   ry   re   r   rb   r   s         rX   add_role_to_domainz*SphinxComponentRegistry.add_role_to_domain   s     	6t8LMMM%% $B!C!Cf!LMMM!,,VR885=== CDDf~U   drZ   indextype[Index]c                H   t                               d||f           || j        vrt          t	          d          |z            | j                            |g           }||v r(|s&t          t	          d          |j        |fz            |                    |           d S )Nz [app] adding index to domain: %rr   z/The %r index is already registered to domain %s)	rf   rg   rB   r   r   rD   r   re   append)rW   ry   r   rb   r   s        rX   add_index_to_domainz+SphinxComponentRegistry.add_index_to_domain  s     	7&%III%% $B!C!Cf!LMMM%00<<GH DEE:v&'   	urZ    N directivenamerolenameindextemplate
parse_nodeFCallable[[BuildEnvironment, str, addnodes.desc_signature], str] | Noneref_nodeclasstype[TextElement] | Noneobjnamedoc_field_typesSequence[Field]c	           
        t                               d|||||||f           t          |t          t          f||ot          |          |d          }	|                     d||	           |                     d|t          |                     | j	        
                    di           }
||
v r!|st          t          d          |z            t          |p||          |
|<   d S )Nz[app] adding object type: %r)r   r   r   stdinnernodeclassz(The %r object_type is already registered)rf   rg   typer	   objectstaticmethodr   r   r   rE   r   r   r   r   )rW   r   r   r   r   r   r   r   rb   	directiveobject_typess              rX   r   z'SphinxComponentRegistry.add_object_type  s    	*	
 	
 	
 F#!.(E\*-E-E#2 
 
	 	$$UM9EEEx1W1W1WXXX/::5"EEL((( =>>N   '.g.F&Q&Q]###rZ   c                   t                               d|||||f           t          |t          t          fd|i          }|                     d||           |                     d|t          |                     | j        	                    di           }||v r!|st          t          d          |z            t          |p||          ||<   d S )Nz[app] adding crossref type: %rr   r   r   z*The %r crossref_type is already registered)rf   rg   r   r
   r   r   r   r   rE   r   r   r   r   )	rW   r   r   r   r   r   rb   r   r   s	            rX   add_crossref_typez)SphinxComponentRegistry.add_crossref_type=  s     	,Hm]GL	
 	
 	
 Vm,
 
	 	$$UM9EEEx1W1W1WXXX/::5"EEL((( ?@@=P   '.g.F&Q&Q]###rZ   suffixfiletypec                    t                               d||           || j        v r!|st          t	          d          |z            || j        |<   d S )Nz"[app] adding source_suffix: %r, %rz&source_suffix %r is already registered)rf   rg   rQ   r   r   )rW   r   r   rb   s       rX   add_source_suffixz)SphinxComponentRegistry.add_source_suffix\  s^     	968LLLT'''' $L!M!MPV!VWWW%-6"""rZ   parsertype[Parser]c                    t                               d|           |j        D ]6}|| j        v r!|st	          t          d          |z            || j        |<   7d S )Nz%[app] adding search source_parser: %rz*source_parser for %r is already registered)rf   rg   	supportedrP   r   r   )rW   r   rb   r   s       rX   add_source_parserz)SphinxComponentRegistry.add_source_parserd  s}    <fEEE ( 	3 	3H4...x.$CDDxO   -3D))	3 	3rZ   c                    	 | j         |         S # t          $ r%}t          t          d          |z            |d }~ww xY w)Nz#Source parser for %s not registered)rP   ro   r   r   )rW   r   rt   s      rX   get_source_parserz)SphinxComponentRegistry.get_source_parsero  sZ    	&x00 	 	 	899HD 	s    
> 9>dict[str, type[Parser]]c                    | j         S r]   )rP   rV   s    rX   get_source_parsersz*SphinxComponentRegistry.get_source_parsersw  s    ""rZ   filenamer   c                    |                      |          } |            }t          |t                    r|                    |           |S r]   )r   
isinstanceSphinxParserset_application)rW   rk   r   parser_classr   s        rX   create_source_parserz,SphinxComponentRegistry.create_source_parserz  sK    --h77fl++ 	(""3'''rZ   
translatortype[nodes.NodeVisitor]c                    t                               d|           || j        v r!|st          t	          d          |z            || j        |<   d S )Nz.[app] Change of translator for the %s builder.z Translator for %r already exists)rf   rg   rR   r   r   )rW   re   r   rb   s       rX   add_translatorz&SphinxComponentRegistry.add_translator  s[     	EtLLL4###H# $F!G!G$!NOOO!+rZ   nodetype[Element]kwargsr2   c                4   t                               d||           |                                D ]f\  }}| j                            |i           }	 |\  }}||f||j        <   3# t          $ r'}t          t          d          ||fz            |d }~ww xY wd S )Nz)[app] adding translation_handlers: %r, %rzEkwargs for add_node() must be a (visit, depart) function tuple: %r=%r)	rf   rg   r   rS   r   __name__
ValueErrorr   r   )	rW   r   r   builder_namehandlersrS   visitdepartrt   s	            rX   add_translation_handlersz0SphinxComponentRegistry.add_translation_handlers  s     	@$OOO&,llnn 	 	"L(#'#<#G#Gb$ $ 
 (v7<fo$T]33   $0  $X.	/  	 	s   A$$
B."BBc                    	 | j         |j                 S # t          $ r7 	 |j        cY S # t          $ r}d|j         }t	          |          |d }~ww xY ww xY w)Nztranslator not found for )rR   re   ro   default_translator_classAttributeError)rW   r`   errmsgs       rX   get_translator_classz,SphinxComponentRegistry.get_translator_class  s    	3#GL11 	3 	3 	337777! 3 3 3@',@@$S))s23	3s(    
A(A
AAAAargsr   nodes.NodeVisitorc           	        |                      |          } || }| j                            |j        d           }| | j                            |j        i           }|                                D ]N\  }\  }}t          |d|z   t          ||                     |r"t          |d|z   t          ||                     O|S )Nvisit_depart_)r   rS   r   re   formatr   setattrr   )	rW   r`   r   translator_classr   r   re   r   r   s	            rX   create_translatorz)SphinxComponentRegistry.create_translator  s    44W==%%t,
 ,00tDD044W^RHHH%-^^%5%5 	V 	V!D/5&J4E:1N1NOOO V
I$4j6T6TUUUrZ   	transformtype[Transform]c                p    t                               d|           | j                            |           d S )Nz[app] adding transform: %r)rf   rg   rT   r   rW   r   s     rX   add_transformz%SphinxComponentRegistry.add_transform  s3    19===y)))))rZ   list[type[Transform]]c                    | j         S r]   )rT   rV   s    rX   get_transformsz&SphinxComponentRegistry.get_transforms  s
    rZ   c                p    t                               d|           | j                            |           d S )Nz[app] adding post transform: %r)rf   rg   rO   r   r   s     rX   add_post_transformz*SphinxComponentRegistry.add_post_transform  s4    6	BBB##I.....rZ   c                    | j         S r]   )rO   rV   s    rX   get_post_transformsz+SphinxComponentRegistry.get_post_transforms  s    ##rZ   r   
documentertype[Documenter]c                    || j         |<   d S r]   )r@   )rW   r   r   s      rX   add_documenterz&SphinxComponentRegistry.add_documenter  s    $.!!!rZ   typr   
attrgetterCallable[[Any, str, Any], Any]c                    || j         |<   d S r]   r^   )rW   r   r   s      rX   add_autodoc_attrgetterz.SphinxComponentRegistry.add_autodoc_attrgetter  s     )3 %%%rZ   
attributesc                >    | j                             ||f           d S r]   )rA   r   rW   r   r   s      rX   add_css_filesz%SphinxComponentRegistry.add_css_files  s#    x455555rZ   
str | Nonec                v    t                               d||           | j                            ||f           d S )Nz[app] adding js_file: %r, %r)rf   rg   rL   r   r   s      rX   add_js_filez#SphinxComponentRegistry.add_js_file  s:    3XzJJJh
344444rZ   c                X    | j         | j        z   }t          fd|D                       S )Nc                ,    g | ]}|d          k    |S )r   r   ).0xre   s     rX   
<listcomp>z=SphinxComponentRegistry.has_latex_package.<locals>.<listcomp>  s"    9991AaDDLLQLLLrZ   )rM   rN   rc   )rW   re   packagess    ` rX   has_latex_packagez)SphinxComponentRegistry.has_latex_package  s6    &)KK9999999:::rZ   optionsafter_hyperrefc                   |                      |          rt                              d|           t                              d|           |r| j                            ||f           d S | j                            ||f           d S )Nz#latex package '%s' already includedz[app] adding latex package: %r)r  rf   warningrg   rN   r   rM   )rW   re   r	  r
  s       rX   add_latex_packagez)SphinxComponentRegistry.add_latex_package  s     !!$'' 	HNN@$GGG5t<<< 	8.55tWoFFFFF&&g77777rZ   
type[Node]figtypetitle_getterTitleGetter | Nonec                    t                               d|||           || j        v r!|st          t	          d          |z            ||f| j        |<   d S )Nz*[app] adding enumerable node: (%r, %r, %r)z%enumerable_node %r already registered)rf   rg   rG   r   r   )rW   r   r  r  rb   s        rX   add_enumerable_nodez+SphinxComponentRegistry.add_enumerable_node  sl     	8$	
 	
 	
 4(((( $K!L!Lt!STTT'.&=d###rZ   inline_renderers_MathsInlineRenderers | Noneblock_renderers_MathsBlockRenderers | Nonec                    t                               d|||           || j        v rt          t	          d          |z            |
|| j        |<   ||| j        |<   d S d S )Nz+[app] adding html_math_renderer: %s, %r, %rz&math renderer %s is already registered)rf   rg   rH   r   r   rI   )rW   re   r  r  s       rX   add_html_math_rendererz.SphinxComponentRegistry.add_html_math_renderer  s     	9		
 	
 	
 4222 $L!M!MPT!TUUU'4DD+D1&3BD*4000 '&rZ   
theme_pathstr | os.PathLike[str]c                4    t          |          | j        |<   d S r]   )r   rK   )rW   re   r  s      rX   add_html_themez&SphinxComponentRegistry.add_html_theme  s    !)*!5!5rZ   extnamec                   ||j         v rdS |t          v r6t                              t	          d          |t          |                    dS t	          d          |z  }t          |          5  	 t          |          }nn# t          $ ra}t                              t	          d          t          j
                    z              t          t	          d          |z  |          |d}~ww xY wt          |dd          }|+t                              t	          d          |           i }nA	  ||          }n4# t          $ r'}t          t	          d          ||fz            |d}~ww xY w|i }n?t          |t                    s*t                              t	          d	          |           i }t!          ||fi ||j         |<   ddd           dS # 1 swxY w Y   dS )
zLoad a Sphinx extension.Nz\the extension %r was already merged with Sphinx since version %s; this extension is ignored.zwhile setting up extension %s:zOriginal exception:
zCould not import extension %ssetupzMextension %r has no setup() function; is it really a Sphinx extension module?zpThe %s extension used by this project needs at least Sphinx v%s; it therefore cannot be built with this version.zuextension %r returned an unsupported object from its setup() function; it should return None or a metadata dictionary)
extensionsEXTENSION_BLACKLISTrf   r  r   r   r   ImportErrorverbose	traceback
format_excr   getattrr   r   dictr   )rW   rk   r  prefixmodr   r   metadatas           rX   rp   z&SphinxComponentRegistry.load_extension
  s   cn$$F)))NN=  #G,   F 455?v&& .	J .	J#G,,   r"9::Y=Q=S=SSTTT$677'A3  18Wd0K0KE}5     /1$uSzzHH. 	 	 	1' 
 #C.)  	 $// 	. 
    &/&I&I&I&ICN7#].	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	J .	Js]   ,G.A>=G>
C)AC$$C))AG+D76G7
E("E##E((AGGGMapping[str, int]c                .    ddl m}  ||j                  S )Nr   )_get_env_version)sphinx.environmentr.  r!  )rW   rk   r.  s      rX   get_envversionz&SphinxComponentRegistry.get_envversionK  s'    777777///rZ   r   c                v    	 | j         |         S # t          $ r Y nw xY wt          ||          }|| j         |<   |S r]   )rU   ro   r   )rW   rk   r   	publishers       rX   get_publisherz%SphinxComponentRegistry.get_publisherP  sU    	?8,, 	 	 	D	$S(33	$-!s    
)r:   r;   )r:   r[   )F)r`   ra   rb   rc   r:   r;   )rk   r$   re   rl   r:   r;   )rk   r$   re   rl   rv   r)   r:   r%   )ry   rz   rb   rc   r:   r;   )ry   rl   r:   rc   )rv   r)   r:   r   )
ry   rl   re   rl   r   r   rb   rc   r:   r;   )
ry   rl   re   rl   r   r   rb   rc   r:   r;   )ry   rl   r   r   rb   rc   r:   r;   )r   NNr   r   F)r   rl   r   rl   r   rl   r   r   r   r   r   rl   r   r   rb   rc   r:   r;   )r   Nr   F)r   rl   r   rl   r   rl   r   r   r   rl   rb   rc   r:   r;   )r   rl   r   rl   rb   rc   r:   r;   )r   r   rb   rc   r:   r;   )r   rl   r:   r   )r:   r   )rk   r$   r   rl   r:   r   )re   rl   r   r   rb   rc   r:   r;   )r   r   r   r2   r:   r;   )r`   r%   r:   r   )r`   r%   r   r   r:   r   )r   r   r:   r;   )r:   r   )r   rl   r   r   r:   r;   )r   r   r   r   r:   r;   )r   rl   r   r   r:   r;   )r   r   r   r   r:   r;   )re   rl   r:   rc   )re   rl   r	  r   r
  rc   r:   r;   )NF)
r   r  r  rl   r  r  rb   rc   r:   r;   )re   rl   r  r  r  r  r:   r;   )re   rl   r  r  r:   r;   )rk   r$   r  rl   r:   r;   )rk   r$   r:   r,  )rk   r$   r   rl   r:   r   )*r   ri   __qualname__rY   propertyr_   rj   ru   rx   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  r  r  r  r  r  rp   r0  r3  r   rZ   rX   r9   r9   K   s       Q3 Q3 Q3 Q3f ( ( ( X(. . . . .9 9 9 9&- - - -+ + + + +& & & &    NS    ,     $ AF    $  26+-,R ,R ,R ,R ,Rd  26R R R R R@ <A. . . . .	3 	3 	3 	3 	3   # # # #    PU, , , , ,   (3 3 3 3   "* * * *   / / / /$ $ $ $/ / / /3 3 3 3
6 6 6 65 5 5 5; ; ; ;
 FK
8 
8 
8 
8 
8  ,0> > > > >C C C C(6 6 6 6?J ?J ?J ?JB0 0 0 0
     rZ   r9   rk   r$   configr&   r:   r;   c                   | j         j                                        D ]\  }}|| j        j        vr|| j        j        |<   #| j        j        |         dk    r|| j        j        |<   I| j        j        |         ;t	          d          |z  }t
                              |           || j        j        |<   | j        j        | j         _        dS )zDMerge any user-specified source_suffix with any added by extensions.restructuredtextNz&`None` is not a valid filetype for %r.)registryrQ   r   r6  r   rf   r  )rk   r6  r   r   r   s        rX   merge_source_suffixr:  Z  s    L6<<>> 
8 
8111/7CJ$V,,Z%f-1CCC 08CJ$V,,Z%f-5=>>GCNN3/7CJ$V, "%!9CLrZ   r,   c                H    |                      dt          d           ddddS )Nzconfig-initedi   )prioritybuiltinT)versionparallel_read_safeparallel_write_safe)connectr:  )rk   s    rX   r   r   l  s5    KK!4sKCCC "#  rZ   )rk   r$   r6  r&   r:   r;   )rk   r$   r:   r,   )c__doc__
__future__r   r%  	importlibr   importlib.metadatar   typesr   typingr   sphinx.domainsr   sphinx.domains.stdr	   r
   sphinx.errorsr   r   r   sphinx.extensionr   	sphinx.ior   sphinx.localer   sphinx.parsersr   r   sphinx.rolesr   sphinx.utilr   sphinx.util._pathlibr   sphinx.util.loggingr   oscollections.abcr   r   r   r   r   r   docutilsr   docutils.corer   docutils.nodesr   r   r    docutils.parsersdocutils.parsers.rstr!   docutils.transformsr"   sphinxr#   sphinx.applicationr$   sphinx.buildersr%   sphinx.configr&   r'   r(   r/  r)   sphinx.ext.autodocr*   sphinx.util.docfieldsr+   sphinx.util.typingr,   r-   r.   r/   sphinx.writers.html5r0   r1   __annotations__tupler2   mathr3   
math_blockr4   r5   r6   	getLoggerr   rf   r"  r9   r:  r   r   rZ   rX   <module>rh     s]         " " " " " "     # # # # # # + + + + + +                   " " " " " " 4 4 4 4 4 4 4 4 N N N N N N N N N N & & & & & & & & & & & &       1 1 1 1 1 1 ! ! ! ! ! !       ) ) ) ) ) ) 1 1 1 1 1 1 'IIIEEEEEEEEEEEE%%%%%%%%''''''9999999999''''''......------))))))''''''$$$$$$,,,,,,,,333333------++++++            544444
 'Sz4'78L8888"'lT6I(I"JJJJJ (/5:)F)L MNMMMM%-@P.QSW.W%XXXXX',^^d=R-R'SSSSS&+0477'     
	8	$	$
  #!(  L L L L L L L L^: : : :$     rZ   