
    jO                    2   S r SSKrSSKJr  SSKJr  SSKJr  SSK	J
r
  SSKJr  SSKJr  SS	KJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJr  S
SKJ r   S
SK!J"r"  \RF                  (       a
  SSK$r%S
SK&J'r'  \RP                  " S\RR                  S\RT                  4   S9r+SSSSSS S!S"S#.r,S$\+S%\+4S& jr-S'\.S%\RR                  S(\R^                  S)/S4   4S* jr0S'\.S%\RR                  S(\Rb                  S)/S4   4S+ jr2   SFS,\Rf                  S-S.S/\Rh                  \.   S0\Rh                  \.   S1\Rh                  \Rj                     S2\6S3\6S%\Rh                  \.   4S4 jjr7S5\RT                  S%\64S6 jr8S7\Rr                  \Rt                     S8\Rr                  \.   S%\Rv                  \.   4S9 jr< " S: S;5      r= " S< S)5      r> " S= S>\?5      r@ " S? S@\"5      rA " SA SB\"5      rB " SC SD\C5      rD " SE S(\"5      rEg)Gz0Compiles nodes from the parser into Python code.    N)contextmanager)update_wrapper)StringIO)chain)	iskeyword)escape)Markup   )nodes)TemplateAssertionError)Symbols)VAR_LOAD_ALIAS)VAR_LOAD_PARAMETER)VAR_LOAD_RESOLVE)VAR_LOAD_UNDEFINED)EvalContext)	Optimizer)_PassArg)concat)NodeVisitor)EnvironmentF.)boundz==z!=>z>=<z<=inznot in)eqnegtgteqltlteqr   notinfreturnc           
         ^  SSS[         R                  SSS[        R                  S[        R                  4
U 4S jjn[	        [        R
                  " [        U5      T 5      $ )	NselfCodeGeneratornodeframeFramekwargsr%   c                    > U R                   bV  UR                  R                  (       d;  U R                   R                  XR                  5      nXA:w  a  U R                  XB5      $ T" XU40 UD6$ N)	optimizereval_ctxvolatilevisit)r'   r)   r*   r,   new_noder$   s        L/var/www/reloj-farallon/venv/lib/python3.13/site-packages/jinja2/compiler.pynew_funcoptimizeconst.<locals>.new_func.   sZ     >>%enn.E.E~~++D..AHzz(22U-f--    )r   ExprtAnyr   castr   )r$   r5   s   ` r4   optimizeconstr<   -   sV    
.
.%*ZZ
.8?
.KL55
.	

. !&&H-q11r7   opr(   r+   c           	      ^   ^  [         SSS[        R                  S[        SS 4U 4S jj5       nU$ )Nr'   r(   r)   r*   r%   c                   > U R                   R                  (       az  TU R                   R                  ;   a`  U R                  ST< S35        U R	                  UR
                  U5        U R                  S5        U R	                  UR                  U5        O^U R                  S5        U R	                  UR
                  U5        U R                  ST S35        U R	                  UR                  U5        U R                  S5        g )Nz environment.call_binop(context, , ( ))environment	sandboxedintercepted_binopswriter2   leftrightr'   r)   r*   r=   s      r4   visitor_make_binop.<locals>.visitor>   s     &&21A1A1T1T+TJJ9"rBCJJtyy%(JJtJJtzz5)JJsOJJtyy%(JJ2$ay!JJtzz5)

3r7   )r<   r   BinExprr+   r=   rK   s   ` r4   _make_binoprO   =   s<    o U]] 5 T    Nr7   c           	      ^   ^  [         SSS[        R                  S[        SS 4U 4S jj5       nU$ )Nr'   r(   r)   r*   r%   c                 X  > U R                   R                  (       aM  TU R                   R                  ;   a3  U R                  ST< S35        U R	                  UR
                  U5        O0U R                  ST-   5        U R	                  UR
                  U5        U R                  S5        g )Nzenvironment.call_unop(context, r@   rA   rC   )rD   rE   intercepted_unopsrG   r2   r)   rJ   s      r4   rK   _make_unop.<locals>.visitorU   s|     &&21A1A1S1S+SJJ8bABJJtyy%(JJsRx JJtyy%(

3r7   )r<   r   	UnaryExprr+   rN   s   ` r4   
_make_unoprU   R   s>     
o 
U__ 
U 
t 
 
 Nr7   r)   rD   r   namefilenamestream
defer_init	optimizedc                     [        U [        R                  5      (       d  [        S5      eUR	                  XX4XV5      nUR                  U 5        Uc  UR                  R                  5       $ g)z+Generate the python source for a node tree.z Can't compile non template nodesN)
isinstancer   Template	TypeErrorcode_generator_classr2   rX   getvalue)r)   rD   rV   rW   rX   rY   rZ   	generators           r4   generaterb   e   sc     dENN++:;;008ZI OOD~((**r7   valuec                 d   U b  U [         L d	  U [        L a  g[        U 5      [        [        [
        [        [        [        [        1;   a  g[        U 5      [        [        [        [        1;   a  [        S U  5       5      $ [        U 5      [        L a   [        S U R!                  5        5       5      $ g)z)Does the node have a safe representation?Tc              3   8   #    U  H  n[        U5      v   M     g 7fr.   has_safe_repr).0vs     r4   	<genexpr> has_safe_repr.<locals>.<genexpr>   s     3U=##U   c              3   `   #    U  H$  u  p[        U5      =(       a    [        U5      v   M&     g 7fr.   rf   rh   kri   s      r4   rj   rk      s$     S]TQ=#8a(88]s   ,.F)NotImplementedEllipsistypeboolintfloatcomplexrangestrr	   tuplelistset	frozensetalldictitemsrc   s    r4   rg   rg   }   s    }/5H3DE{tS%%fEEE{udC333U333E{dSU[[]SSSr7   r   namesc                     [        U5      n U  H  nUR                  U5        M     UR                  $ ! [         a     UR                  $ f = f)zCheck if the names passed are accessed undeclared.  The return value
is a set of all the undeclared names from the sequence of names found.
)UndeclaredNameVisitorr2   VisitorExit
undeclared)r   r   rK   r)   s       r4   find_undeclaredr      sW     $E*GDMM$    s   3 
A
Ac                   l    \ rS rSrS\R
                  \R                  \R                  4   SS4S jr	Sr
g)MacroRef   r)   r%   Nc                 :    Xl         SU l        SU l        SU l        g NF)r)   accesses_calleraccesses_kwargsaccesses_varargsr'   r)   s     r4   __init__MacroRef.__init__   s    	$$ %r7   )r   r   r   r)   )__name__
__module____qualname____firstlineno__r9   Unionr   Macro	CallBlockr   __static_attributes__ r7   r4   r   r      s+    &QWWU[[%//%AB &t &r7   r   c            	           \ rS rSrSr  SS\S\R                  S    S\R                  \   SS4S jjr	SS	 jr
SS
\SS 4S jjrSS jr\
rSrg)r+      z&Holds compile time information for us.Nr0   parentlevelr%   c                 H   Xl         X l        Uc$  [        US9U l        SU l        S U l        S U l        OL[        UR                  US9U l        UR                  U l        UR
                  U l        UR                  U l        SU l        SU l        SU l	        SU l
        SU l        g )Nr   F)r0   r   r   symbolsrequire_output_checkbufferblocktoplevel	rootlevel
loop_frameblock_frame
soft_frame)r'   r0   r   r   s       r4   r   Frame.__init__   s     ! >"/DL ).D% ,0DK +/DJ #6>>?DL(.(C(CD% --DKDJ 
    
  r7   c                     [         R                  U R                  5      nUR                  R	                  U R                  5        U R
                  R                  5       Ul        U$ )z!Create a copy of the current one.)object__new__	__class____dict__updater   copyr'   rvs     r4   r   
Frame.copy   sC    ^^DNN+
4==)\\&&(
	r7   isolatedc                     U(       a+  [        U R                  U R                  R                  S-   S9$ [        U R                  U 5      $ )zReturn an inner frame.r
   r   )r+   r0   r   r   )r'   r   s     r4   innerFrame.inner   s6    dll.@.@1.DEET]]D))r7   c                 B    U R                  5       nSUl        SUl        U$ )zReturn a soft frame.  A soft frame may not be modified as
standalone thing as it shares the resources with the frame it
was created of, but it's not a rootlevel frame any longer.

This is only used to implement if-statements and conditional
expressions.
FT)r   r   r   r   s     r4   soft
Frame.soft   s"     YY[	r7   )r   r   r   r0   r   r   r   r   r   r   r   )NN)r%   r+   F)r   r   r   r   __doc__r   r9   Optionalrt   r   r   rs   r   r   __copy__r   r   r7   r4   r+   r+      sn    0
 '+!%	1 1  

7#1  zz#	1 
 
1 f*d *w * Hr7   c                       \ rS rSrSrSrg)r      z?Exception used by the `UndeclaredNameVisitor` to signal a stop.r   Nr   r   r   r   r   r   r   r7   r4   r   r      s    Ir7   r   c                       \ rS rSrSrSS jrS\R                  SS4S jrS\R                  SS4S jr
S\R                  SS4S	 jrS
rg)DependencyFinderVisitor   z.A visitor that collects filter and test calls.r%   Nc                 @    [        5       U l        [        5       U l        g r.   )r{   filterstestsr'   s    r4   r    DependencyFinderVisitor.__init__   s    #&5!$
r7   r)   c                 p    U R                  U5        U R                  R                  UR                  5        g r.   )generic_visitr   addrV   r   s     r4   visit_Filter$DependencyFinderVisitor.visit_Filter  s&    4 #r7   c                 p    U R                  U5        U R                  R                  UR                  5        g r.   )r   r   r   rV   r   s     r4   
visit_Test"DependencyFinderVisitor.visit_Test  s$    4 

tyy!r7   c                     g)zStop visiting at blocks.Nr   r   s     r4   visit_Block#DependencyFinderVisitor.visit_Block      r7   )r   r   r%   N)r   r   r   r   r   r   r   Filterr   Testr   Blockr   r   r   r7   r4   r   r      sO    8'$ $$ $"uzz "d "' ' 'r7   r   c                       \ rS rSrSrS\R                  \   SS4S jrS\	R                  SS4S jrS\	R                  SS4S	 jrS
rg)r   i  zA visitor that checks if a name is accessed without being
declared.  This is different from the frame visitor as it will
not stop at closure frames.
r   r%   Nc                 B    [        U5      U l        [        5       U l        g r.   )r{   r   r   )r'   r   s     r4   r   UndeclaredNameVisitor.__init__  s    Z
&)er7   r)   c                 6   UR                   S:X  ad  UR                  U R                  ;   aJ  U R                  R	                  UR                  5        U R                  U R                  :X  a
  [        5       eg U R                  R                  UR                  5        g )Nload)ctxrV   r   r   r   r   discardr   s     r4   
visit_Name UndeclaredNameVisitor.visit_Name  sh    88v$))tzz"9OO		*$**,!m# - JJtyy)r7   c                     g)zStop visiting a blocks.Nr   r   s     r4   r   !UndeclaredNameVisitor.visit_Block!  r   r7   )r   r   )r   r   r   r   r   r9   Iterablerx   r   r   Namer   r   r   r   r   r7   r4   r   r     sP    
,ajjo ,$ ,*uzz *d *& & &r7   r   c                       \ rS rSrSrSrg)CompilerExiti%  zRaised if the compiler encountered a situation where it just
doesn't make sense to further process the code.  Any block that
raises such an exception is not further processed.
r   Nr   r   r7   r4   r   r   %  s    r7   r   c                   4   \ rS rSr%    SSSS\R
                  \   S\R
                  \   S\R
                  \R                     S\S	\S
S4S jjr	\
S
\4S j5       rS\S\S
S4S jrS
\4S jrS\S
S4S jr SS\S\S
S4S jjrSS jrSS\S
S4S jjrSS\S\R
                  \R*                     S
S4S jjrS\S
S4S jr SS\S\S\R
                  \R*                     S
S4S jjrS\R2                  \R*                     S\S
S4S jrS \S
S4S! jr SS \S\R
                  \R*                     S"\S
S4S# jjrSS\R
                  \R*                     S"\S
S4S$ jjr SS\R<                  \R>                  \R@                  \RB                  4   S\S%\R
                  \RD                  \\RF                  4      S
S4S& jjr$S\R2                  \R*                     S
S4S' jr%S\S
S4S( jr&SS\S)\S
S4S* jjr'SS+\S,\S
\4S- jjr(S\S
\4S. jr)S\R<                  \RT                  \RV                  4   S\S
\RX                  \\-4   4S/ jr.S0\-S\S
S4S1 jr/S\R*                  S
\4S2 jr0S\S
\4S3 jr1SS4 jr2S\S
S4S5 jr3SS6 jr4S7\S
S4S8 jr5S7\S
S4S9 jr6SS: jr7S
\4S; jr8S
\4S< jr9S\S
\4S= jr:S7\S
\4S> jr;SS? jr<S\S
S4S@ jr= SS\R|                  S\R
                  \   S
S4SA jjr?S\R                  S\S
S4SB jrAS\R                  S\S
S4SC jrCS\R                  S\S
S4SD jrES\R<                  \R                  \R                  4   S\S
S4SE jrHS\R                  S\S
S4SF jrIS\R                  S\S
S4SG jrJS\R                  S\S
S4SH jrLS\R                  S\S
S4SI jrNS\RT                  S\S
S4SJ jrOS\RV                  S\S
S4SK jrPS\R                  S\S
S4SL jrRS\R                  S\S
S4SM jrTS\R                  S\S
S4SN jrV " SO SP\R                  5      rX\YSQ\RF                  S
\RF                  4SR j5       rZSr[\R
                  \X   \\SS'   S
\X4ST jr]SU\R2                  \RF                     S
\4SV jr^S\R                  S\SW\XS
\4SX jr`S\R                  S\SW\XS
S4SY jraS\R                  S\SW\XS
S4SZ jrbS\R                  S\S
S4S[ jrdS\R                  S\S
S4S\ jrfS\R                  S\S
S4S] jrhS\R                  S\S
S4S^ jrjS\R                  S\S
S4S_ jrlS\R                  S\S
S4S` jrnS\R                  S\S
S4Sa jrpS\RX                  S\S
S4Sb jrqS\R                  S\S
S4Sc jrsS\R                  S\S
S4Sd jru\v" Se5      rw\v" Sf5      rx\v" Sg5      ry\v" Sh5      rz\v" Si5      r{\v" Sj5      r|\v" Sk5      r}\v" Sl5      r~\v" Sm5      r\" Se5      r\" Sf5      r\" Sn5      r\S\GR
                  S\S
S4So j5       r\S\GR                  S\S
S4Sp j5       rS\GR                  S\S
S4Sq jr\S\GR                  S\S
S4Sr j5       r\S\GR                  S\S
S4Ss j5       rS\GR                  S\S
S4St jr\S\R<                  \R@                  \RB                  4   S\Su\S
\GR$                  S   4Sv j5       r\S\R@                  S\S
S4Sw j5       r\S\RB                  S\S
S4Sx j5       r\S\GR,                  S\S
S4Sy j5       r\ SS\R>                  S\Sz\S
S4S{ jj5       rS\GR2                  S\S
S4S| jrS\GR6                  S\S
S4S} jrS\GR:                  S\S
S4S~ jrS\GR>                  S\S
S4S jrS\GRB                  S\S
S4S jrS\GRF                  S\S
S4S jrS\GRJ                  S\S
S4S jrS\GRN                  S\S
S4S jrS\GRR                  S\S
S4S jrS\GRV                  S\S
S4S jrS\GRZ                  S\S
S4S jrS\GR^                  S\S
S4S jrS\GRb                  S\S
S4S jrS\GRf                  S\S
S4S jrS\GRj                  S\S
S4S jrSrg)r(   i,  NrD   r   rV   rW   rX   rY   rZ   r%   c                    Uc
  [        5       nXl        X l        X0l        X@l        SU l        XPl        S U l        U(       a  [        U5      U l        0 U l	        0 U l
        SU l        SU l        SU l        0 U l        0 U l        / U l        S U l        SU l        SU l        SU l        SU l        SU l        / U l        / U l        S/U l        g )NFr   r
   Tcontext)r   rD   rV   rW   rX   created_block_contextrY   r/   r   import_aliasesblocksextends_so_farhas_known_extendscode_linenor   r   
debug_info_write_debug_info
_new_lines
_last_line_first_write_last_identifier_indentation_assign_stack_param_def_block_context_reference_stack)r'   rD   rV   rW   rX   rY   rZ   s          r4   r   CodeGenerator.__init__-  s     >ZF&	 %*"$04&{3DN 13 13  
 "'  (*
)+ 6826   ! !"  24 57 *3%r7   c                     U R                   S L$ r.   )r/   r   s    r4   rZ   CodeGenerator.optimizedv  s    ~~T))r7   msglinenozte.NoReturnc                 D    [        XU R                  U R                  5      e)z*Fail with a :exc:`TemplateAssertionError`.)r   rV   rW   )r'   r   r  s      r4   failCodeGenerator.fail|  s    $S$))T]]KKr7   c                 J    U =R                   S-  sl         SU R                    3$ )zGet a new unique identifier.r
   t_)r   r   s    r4   temporary_identifier"CodeGenerator.temporary_identifier  s'    "D))*++r7   r*   c                 j    U R                  5       Ul        U R                  UR                   S35        g)z7Enable buffering for the frame from that point onwards.z = []N)r  r   	writeliner'   r*   s     r4   r   CodeGenerator.buffer  s)    002%,,u-.r7   force_unescapedc                 >   U(       d  UR                   R                  (       a  U R                  S5        U R                  5         U R                  SUR                   S35        U R                  5         U R                  S5        U R                  5         U R                  SUR                   S35        U R                  5         gUR                   R                  (       a   U R                  SUR                   S35        gU R                  SUR                   S35        g)z(Return the buffer contents of the frame.zif context.eval_ctx.autoescape:zreturn Markup(concat())else:zreturn concat(rC   N)r0   r1   r
  indentr   outdent
autoescape)r'   r*   r  s      r4   return_buffer_contents$CodeGenerator.return_buffer_contents  s     ~~&&@A!6u||nBGHw'~Q?@**!6u||nBGH~Q78r7   c                 .    U =R                   S-  sl         g)zIndent by one.r
   Nr   r   s    r4   r  CodeGenerator.indent  s    Qr7   stepc                 .    U =R                   U-  sl         g)zOutdent by step.Nr  )r'   r  s     r4   r  CodeGenerator.outdent  s    T!r7   r)   c                     UR                   c  U R                  SU5        gU R                  UR                    S3U5        g)z%Yield or write into the frame buffer.Nyield .append()r   r
  )r'   r*   r)   s      r4   start_writeCodeGenerator.start_write  s3    <<NN8T*NNell^84d;r7   c                 B    UR                   b  U R                  S5        gg)z1End the writing process started by `start_write`.NrC   )r   rG   r  s     r4   	end_writeCodeGenerator.end_write  s    <<#JJsO $r7   sc                 j    U R                  X#5        U R                  U5        U R                  U5        g)z4Simple shortcut for start_write + write + end_write.N)r  rG   r"  )r'   r$  r*   r)   s       r4   simple_writeCodeGenerator.simple_write  s)     	%

1ur7   r   c                 |     U R                  S5        U H  nU R                  X25        M     g! [         a     gf = f)zVisit a list of nodes as block in a frame.  If the current frame
is no buffer a dummy ``if 0: yield None`` is written automatically.
passN)r
  r2   r   )r'   r   r*   r)   s       r4   
blockvisitCodeGenerator.blockvisit  s;    	NN6"

4'  		s   +. 
;;xc                    U R                   (       a  U R                  (       d  U R                  R                  SU R                   -  5        U =R                  U R                   -  sl        U R
                  b8  U R                  R                  U R
                  U R                  45        SU l        SU l        U R                  R                  SU R                  -  5        SU l         U R                  R                  U5        g)z&Write a string into the output stream.
NFz    r   )	r   r   rX   rG   r   r   r   appendr   )r'   r,  s     r4   rG   CodeGenerator.write  s    ??$$!!$"89  DOO3 ))5OO**D,B,BDDTDT+UV-1D* %DKKft'8'889DO!r7   extrac                 H    U R                  X#5        U R                  U5        g)z!Combination of newline and write.N)newlinerG   )r'   r,  r)   r1  s       r4   r
  CodeGenerator.writeline  s     	T!

1r7   c                     [        U R                  SU-   5      U l        Ub>  UR                  U R                  :w  a#  UR                  U l        UR                  U l        ggg)z/Add one or more newlines before the next write.r
   N)maxr   r  r   r   )r'   r)   r1  s      r4   r3  CodeGenerator.newline  sL    dooq5y9t >%)[[D""kkDO !?r7   extra_kwargsc                    [        S [        S UR                   5       U=(       d    S5       5       5      nUR                   H%  nU R	                  S5        U R                  XR5        M'     U(       dh  UR                   H%  nU R	                  S5        U R                  Xb5        M'     Ub0  UR                  5        H  u  pxU R	                  SU SU 35        M     UR                  (       a-  U R	                  S5        U R                  UR                  U5        U(       Ga!  UR                  b  U R	                  S5        OU R	                  S	5        UR                   HO  nU R	                  UR                  < S
35        U R                  UR                  U5        U R	                  S5        MQ     Ub1  UR                  5        H  u  pxU R	                  U< S
U S35        M     UR                  b?  U R	                  S5        U R                  UR                  U5        U R	                  S5        gU R	                  S5        gUR                  b.  U R	                  S5        U R                  UR                  U5        gg)a  Writes a function call to the stream for the current node.
A leading comma is added automatically.  The extra keyword
arguments may not include python keywords otherwise a syntax
error could occur.  The extra keyword arguments should be given
as python dict.
c              3   j   #    U  H)  n[        [        R                  " [        U5      5      v   M+     g 7fr.   )is_python_keywordr9   r;   rx   )rh   ro   s     r4   rj   *CodeGenerator.signature.<locals>.<genexpr>  s)      
L affS!n--Ls   13c              3   8   #    U  H  oR                   v   M     g 7fr.   )keyrh   r,  s     r4   rj   r<    s     7;aEE;rl   r   r@   N=z, *z
, **dict({z, **{: z}, **rC   }z, **)anyr   r,   argsrG   r2   r   dyn_args
dyn_kwargsr>  rc   )	r'   r)   r*   r8  kwarg_workaroundargkwargr>  rc   s	            r4   	signatureCodeGenerator.signature  s     
74;;79KL
 

 99CJJtJJs"   

4 

5( % '"."4"4"6JCJJC5%12 #7==JJuJJt}}e,*

<(

7#

eii]"-.

5;;.

4  % '"."4"4"6JCJJ#5'45 #7*

7#

4??E2

3

3__(JJvJJt. )r7   c           
         [        5       nU H  nUR                  U5        M     U R                  UR                  S4U R                  UR                  S44 GH  u  pEn[	        U5       H  nXt;  a  U R                  5       XG'   U R                  S5        U R                  5         U R                  XG    SU SU< S35        U R                  5         U R                  S5        U R                  5         U R                  S5        U R                  S	XG    S
35        U R                  5         U R                  SUSS  SU< S35        U R                  5         U R                  5         M     GM     g)a  Find all filter and test names used in the template and
assign them to variables in the compiled namespace. Checking
that the names are registered with the environment is done when
compiling the Filter and Test nodes. If the node is in an If or
CondExpr node, the check is done at runtime instead.

.. versionchanged:: 3.0
    Filters and tests in If and CondExpr nodes are checked at
    runtime instead of compile time.
r   r   try:z = environment.[]zexcept KeyError:z@internalcodedef z
(*unused):zraise TemplateRuntimeError("No N named z	 found."))	r   r2   r   r   sortedr  r
  r  r  )r'   r   rK   r)   id_mapr   
dependencyrV   s           r4   pull_dependenciesCodeGenerator.pull_dependencies  sC    *+DMM$  \\7??I6

*
%F: u%#'#<#<#>FL v&&,zl!D8STUV12/fl^:>?5j"o5FdXY0 ) &*
r7   c           	         / nUR                   R                  R                  5        H  u  nu  pEU[        :X  a  M  U[        :X  a+  U R                  U SU R                  5        SU< S35        MI  U[        :X  a  U R                  U SU 35        Mk  U[        :X  a  UR                  U5        M  [        S5      e   U(       a$  U R                  SR                  U5       S35        g g )N = rA   rC   zunknown load instruction
 = missing)r   loadsr   r   r   r
  get_resolve_funcr   r   r/  NotImplementedErrorjoin)r'   r*   undefstargetactionparams         r4   enter_frameCodeGenerator.enter_frameH  s    ',}}':':'@'@'B#FOV++++&T-B-B-D,EQuiqQR>)&UG45--f%)*DEE (C NNejj01<= r7   with_python_scopec                     U(       d\  / nUR                   R                   H  nUR                  U5        M     U(       a$  U R                  SR	                  U5       S35        g g g )NrY  rZ  )r   r[  r/  r
  r^  )r'   r*   re  r_  r`  s        r4   leave_frameCodeGenerator.leave_frameX  sT     F----f% .%**V"4!5Z@A 	 !r7   async_value
sync_valuec                 @    U R                   R                  (       a  U$ U$ r.   )rD   is_async)r'   ri  rj  s      r4   choose_asyncCodeGenerator.choose_async`  s    "..77{GZGr7   c                 ,    U R                  5        SU 3$ )NrP  )rm  )r'   rV   s     r4   funcCodeGenerator.funcc  s    ##%&d4&11r7   c           
          UR                  5       nUR                  R                  U5        [        U5      nSn[	        5       n/ n[        UR                  5       Hv  u  pxUR                  S:X  a  UnUR                  S;   a  UR                  UR                  5        UR                  UR                  R                  UR                  5      5        Mx     [        UR                  S5      n	SU	;   a[  Ub'   UR                  U[        UR                  5      -
       O*UR                  UR                  R%                  S5      5        SUl        SU	;   a7  SU;  a1  UR                  UR                  R%                  S5      5        SUl        SU	;   a7  SU;  a1  UR                  UR                  R%                  S5      5        SUl        S	Ul        UR                  R                  U5        U R/                  U R1                  S
5       SSR3                  U5       S3U5        U R5                  5         U R7                  U5        U R9                  U5        U R;                  U5        [        UR                  5       H  u  pxUR                  R                  UR                  5      n
U R/                  SU
 S35        U R5                  5          UR                  U[        UR                  5      -
     nU R/                  U
 S35        U R=                  X5        U R?                  U
5        U RA                  5         M     U RC                  5         U RE                  UR                  U5        U RG                  USS9  U RI                  USS9  U RA                  5         X#4$ ! [         a     U R!                  SUR"                  5         GNxf = f! [         a3    U R/                  U
 SUR                  < SUR                  < S35         Nf = f)z/Dump the function def of a macro or call block.Ncaller)r,   varargs)rs  r,   rt  zhWhen defining macros or call blocks the special "caller" argument must be omitted or be given a default.Tr,   rt  FmacrorA   r@   ):if  is missing:rY  z = undefined("parameter z was not provided", name=rC   )r  re  )%r   r   analyze_noder   r{   	enumeraterD  rV   r   r/  refr   bodydefaultslen
IndexErrorr  r  declare_parameterr   r   r   r   r
  rp  r^  r  r   rc  push_parameter_definitionsr2   mark_parameter_storedr  pop_parameter_definitionsr*  r  rg  )r'   r)   r*   	macro_refexplicit_callerskip_special_paramsrD  idxrH  r   r|  defaults               r4   
macro_bodyCodeGenerator.macro_bodyf  sP    ""4(TN	!e!$)),HCxx8#"%xx00#''1KK))#((34 - %TYY0OP
z! *MM/C		N"BC EMM;;HEF(,I%z!h6I&IKK77AB(,I%
"y8K'KKK77	BC)-I& &+"""4($))G,-Qtyy.?rBDIE''.!$)),HC--##CHH-CNNS\23KKM	+--c$))n(<= #c{+

7*&&s+LLN -  	&&(		5)##E4#@$7e " II1 	B  e3CHH< @ XXL+s$   4%N %O &N=<N= :O=<O=r  c                 `   SR                  S UR                  R                   5       5      n[        UR                  SS5      n[	        UR                  R                  5      S:X  a  US-  nU R                  SU< SU S	UR                  < SUR                  < SUR                  < S
35        g)z<Dump the macro definition for the def created by macro_body.r@   c              3   L   #    U  H  n[        UR                  5      v   M     g 7fr.   )reprrV   r?  s     r4   rj   *CodeGenerator.macro_def.<locals>.<genexpr>  s     H4Gqd166ll4Gs   "$rV   Nr
   ,zMacro(environment, macro, z, (z), z, context.eval_ctx.autoescape))	r^  r)   rD  getattrr  rG   r   r   r   )r'   r  r*   	arg_tuplerV   s        r4   	macro_defCodeGenerator.macro_def  s    IIHINN4G4GHH	y~~vt4y~~""#q(I

(I; ?)),By/I/I.L M)),,JL	
r7   c                 b    SUR                    3nU R                  b  U SU R                  < 3nU$ )z.Return a human readable position for the node.zline  in )r  rV   )r'   r)   r   s      r4   positionCodeGenerator.position  s5    T[[M"99 4tDII=)B	r7   c                     SR                  S UR                  R                  5       R                  5        5       5      nSU S3$ )Nr@   c              3   6   #    U  H  u  pU< S U 3v   M     g7frA  Nr   )rh   rV   r`  s      r4   rj   3CodeGenerator.dump_local_context.<locals>.<genexpr>  s$      
 C hb! Cs   {rB  )r^  r   dump_storesr   )r'   r*   items_kvs      r4   dump_local_context CodeGenerator.dump_local_context  sD    99 
 % 9 9 ; A A C
 
 H:R  r7   c                     U R                  S5        U R                  S5        U R                  S5        U R                  S5        U R                  S5        g)zWrites a common preamble that is used by root and block functions.
Primarily this sets up common local helpers and enforces a generator
through a dead branch.
z$resolve = context.resolve_or_missingz!undefined = environment.undefinedzconcat = environment.concatzcond_expr_undefined = Undefinedzif 0: yield NoneNr
  r   s    r4   write_commonsCodeGenerator.write_commons  sG    
 	=>:;45 	89)*r7   c                 j    U R                   R                  UR                  R                  5       5        g)a)  Pushes all parameter targets from the given frame into a local
stack that permits tracking of yet to be assigned parameters.  In
particular this enables the optimization from `visit_Name` to skip
undefined expressions for parameters in macros as macros can reference
otherwise unbound parameters.
N)r   r/  r   dump_param_targetsr  s     r4   r  (CodeGenerator.push_parameter_definitions  s%     	$$U]]%E%E%GHr7   c                 8    U R                   R                  5         g)z+Pops the current parameter definitions set.N)r   popr   s    r4   r  'CodeGenerator.pop_parameter_definitions  s    !!#r7   r`  c                 d    U R                   (       a  U R                   S   R                  U5        gg)zpMarks a parameter in the current parameter definitions as stored.
This will skip the enforced undefined checks.
rQ  N)r   r   r'   r`  s     r4   r  #CodeGenerator.mark_parameter_stored  s+       !!"%--f5 !r7   c                 :    U R                   R                  U5        g r.   )r   r/  r  s     r4   push_context_reference$CodeGenerator.push_context_reference  s    %%,,V4r7   c                 8    U R                   R                  5         g r.   )r   r  r   s    r4   pop_context_reference#CodeGenerator.pop_context_reference  s    %%))+r7   c                      U R                   S   $ )NrQ  r   r   s    r4   get_context_refCodeGenerator.get_context_ref  s    ,,R00r7   c                 8    U R                   S   nUS:X  a  gU S3$ )NrQ  r   resolvez.resolver  r  s     r4   r\  CodeGenerator.get_resolve_func  s*    ..r2Y""r7   c                 L    U R                  5        SU R                  U5       S3$ )Nz	.derived(rC   )r  r  r  s     r4   derive_contextCodeGenerator.derive_context  s,    &&()43J3J53Q2RRSTTr7   c                 H    U R                   (       d  gXR                   S   ;   $ )z4Checks if a given target is an undeclared parameter.FrQ  )r   r  s     r4   parameter_is_undeclared%CodeGenerator.parameter_is_undeclared  s"    $$..r222r7   c                 J    U R                   R                  [        5       5        g)z+Pushes a new layer for assignment tracking.N)r   r/  r{   r   s    r4   push_assign_tracking"CodeGenerator.push_assign_tracking  s    !!#%(r7   c                    U R                   R                  5       nUR                  (       d"  UR                  (       d  UR                  (       a  U(       d  gU Vs/ s H  o3SS S:w  d  M  UPM     nn[        U5      S:X  a  [        [        U5      5      nUR                  R                  U5      nUR                  (       a  U R                  SU< SU 35        gUR                  (       a  U R                  SU< SU 35        gU R                  SU< SU 35        OUR                  (       a  U R                  S5        O4UR                  (       a  U R                  S	5        OU R                  S
5        [        U5       HO  u  puU(       a  U R                  S5        UR                  R                  U5      nU R                  U< SU 35        MQ     U R                  S5        UR                  (       dx  UR                  (       df  U(       a^  [        U5      S:X  a  U R                  SUS   < S35        gSR                  [        [        U5      5      nU R                  SU S35        ggggs  snf )z_Pops the topmost level for assignment tracking and updates the
context variables if necessary.
Nr
   _z_loop_vars[] = z_block_vars[context.vars[z_loop_vars.update({z_block_vars.update({context.vars.update({r@   rA  })context.exported_vars.add(r   rC   zcontext.exported_vars.update((r  )r   r  r   r   r   r  nextiterr   r|  r
  r{  rG   r^  mapr  )	r'   r*   varsr,  public_namesrV   r|  r  	names_strs	            r4   pop_assign_tracking!CodeGenerator.pop_assign_tracking  s    !!%%'!!$$NN#'84aRa5C<48t9>T
#D--##D)CTHD>?  dXT#?@NN]4($se<=45""5667&t_	JJt$mm''-

dXRu-.	 -
 JJt  )9)9l< A%!;LO;NaPQ IIc$&=>	!?	{"MN ?K)9 1 9s   I-*I-c           	         Ub   S5       e[        U R                  U R                  5      nSSKJn  SSKJn  U R                  R                  (       a  [        XT-   5      nO[        U5      nU R                  SSR                  U5      -   5        U R                  (       a  SOSnUR                  [        R                  5      S LnUR                  [        R                  5       H`  n	U	R                  U R                   ;   a+  U R#                  S	U	R                  < S
3U	R$                  5        XR                   U	R                  '   Mb     UR                  [        R&                  5       H  n
U
R(                  U R*                  ;  d  M  U
R(                  nU R-                  5       =U R*                  U'   nSU;   a0  UR/                  SS5      u  pU R                  SU SU SU 35        M  U R                  SU SU 35        M     U R                  SU R                  < 35        U R                  U R1                  S5       SU S3SS9  U R3                  5         U R5                  5         [7        U5      nS[9        UR:                  S5      ;   a/  UR<                  R?                  S5      nU R                  U S35        UR<                  RA                  U5        S=Ul!        Ul"        U=(       a    U RF                  (       + Ul$        U(       a  U R                  S5        U RK                  U5        U RM                  UR:                  5        U RO                  UR:                  U5        U RQ                  USS9  U RS                  5         U(       a  U RF                  (       d!  U R3                  5         U R                  S5        U R3                  5         U R                  R                  (       d  U R                  S5        OBU R                  S5        U R3                  5         U R                  S5        U RS                  5         U RS                  SU RF                  (       + -   5        U R                   RU                  5        GH  u  nn	U R                  U R1                  SU-   5       SU S3U	S5        U R3                  5         U R5                  5         [7        U5      nSUl+        [9        U	R:                  S 5      nSU;   a/  UR<                  R?                  S5      nU R                  U S35        S!U;   a6  UR<                  R?                  S!5      nU R                  U S"U< S#U S$35        UR<                  RA                  U	5        UUl,        U R                  S%5        U RK                  U5        U RM                  U	R:                  5        U RO                  U	R:                  U5        U RQ                  USS9  U RS                  5         GM     SR                  S& U R                    5       5      nU R                  S'U S(3SS9  S)R                  S* U RZ                   5       5      nU R                  S+U< 35        g ),Nzno root frame allowedr
   )async_exported)exportedzfrom jinja2.runtime import r@    z, environment=environmentzblock z defined twice.zfrom z import z as zimport zname = rootz(context, missing=missingrv  )r1  r'   r   z = TemplateReference(context)Tzparent_template = Nonery  if parent_template is not None:z4yield from parent_template.root_render_func(context)z=async for event in parent_template.root_render_func(context):zyield eventblock_)r'   superr  z = context.super(z, block_rC   z_block_vars = {}c              3   0   #    U  H  o< S U 3v   M     g7f)z: block_Nr   r?  s     r4   rj   /CodeGenerator.visit_Template.<locals>.<genexpr>  s     !K{!E!"5{s   z
blocks = {rB  &c              3   4   #    U  H  u  pU S U 3v   M     g7f)r@  Nr   rn   s      r4   rj   r    s     Gtq1#Qqc
s   zdebug_info = ).r   rD   rV   runtimer  r  rl  rS  r
  r^  rY   findr   Extendsfind_allr   r   r  r  ImportedName
importnamer   r  rsplitrp  r  r  r+   r   r}  r   r  rz  r   r   r   r   rc  rV  r*  rg  r  r   r   r   r   )r'   r)   r*   r0   r  r  exported_namesenvenvhave_extendsr   import_impaliasmoduleobjr|  rV   r   r   blocks_kv_strdebug_kv_strs                        r4   visit_TemplateCodeGenerator.visit_Template=  s6    }555}t//;+%$$#H$=>N#H-N4tyy7PPQ ,G yy/t; ]]5;;/EzzT[[(		F5::.?N&+KK

# 0 }}U%7%78G!!)<)<<((373L3L3NN##C(5#:"%**S!"4KFNNU6((3%tE7#KLNNWSEeW#=> 9 	./ 	yy !!:6("EQ 	 	
 	 h_TYY	::--11&9CNNcU"?@A""4(+//%1%P$:P:P6P"NN34tyy)		5)$7 ))@AKKM##,,UVS }-LL$"8"889:  ;;,,.KD%NN99X_-..GxrR
 KKM   /K&*K#(5FGJ#!));;FC#&CDE*$!));;GD#&7xxvQOP,,U3 $KNN-.[)""5::.OOEJJ4[DALLN7 /: 		!Kt{{!KK]O26a@xxGtGG|&678r7   c                    SnUR                   (       aH  U R                  (       a  gU R                  S:  a&  U R                  S5        U R	                  5         US-  nUR
                  (       a  U R                  U5      nOU R                  5       nUR                  (       ab  U R                  SUR                  < S3U5        U R	                  5         U R                  SUR                  < S3U5        U R                  5         U R                  R                  (       d2  UR                  c%  U R                  S	UR                  < S
U S3U5        OfU R                  U R                  5        SUR                  < S
U S3U5        U R	                  5         U R                  SU5        U R                  5         U R                  U5        g)z.Call a block and register it for the template.r   Nif parent_template is None:r
   zif len(context.blocks[z]) <= 1:z+raise TemplateRuntimeError("Required block z not found")zyield from context.blocks[z][0](rC   zfor event in context.blocks[rv  event)r   r   r   r
  r  scopedr  r  requiredrV   r  rD   rl  r   rm  r&  )r'   r)   r*   r   r   s        r4   r   CodeGenerator.visit_Block  sl   >> %%""Q&<=
;;))%0G**,G==NN3DII=I4PKKMNN=dii],W LLN((U\\-ANN,TYYMwiqI4 NN$$&' (##'99-uWIRA
 KKMgu-LLNUr7   c                    UR                   (       d  U R                  SUR                  5        U R                  S:  an  U R                  (       d!  U R                  S5        U R                  5         U R                  S5        U R                  (       a
  [        5       eU R                  5         U R                  SU5        U R                  UR                  U5        U R                  SU R                  < S35        U R                  S5        U R                  5         U R                  S	5        U R                  5         UR                  (       a  S
U l        U =R                  S-  sl        g)zCalls the extender.z,cannot use extend from a non top-level scoper   r  z5raise TemplateRuntimeError("extended multiple times")z+parent_template = environment.get_template(r@   rC   z9for name, parent_block in parent_template.blocks.items():z8context.blocks.setdefault(name, []).append(parent_block)Tr
   N)r   r  r  r   r   r
  r  r   r  r2   templaterG   rV   r   r'   r)   r*   s      r4   visit_ExtendsCodeGenerator.visit_Extends  s    ~~IIDdkkR
 "
 ))@ANNRS %%"n$DdK

4==%(

R		}A&'RSQR
 ??%)D" 	q r7   c                 b   UR                   (       a!  U R                  S5        U R                  5         Sn[        UR                  [
        R                  5      (       a^  [        UR                  R                  [        5      (       a  SnOm[        UR                  R                  [        [        45      (       a  SnO;[        UR                  [
        R                  [
        R                  45      (       a  SnU R                  SU S3U5        U R                  UR                  U5        U R                  SU R                  < S35        UR                   (       as  U R!                  5         U R                  S	5        U R                  5         U R                  S
5        U R!                  5         U R                  S5        U R                  5         SnUR"                  (       a5  U R                  U R%                  5        SU R'                  U5       S35        O@U R(                  R*                  (       a  U R                  S5        OU R                  S5        SnU(       d2  U R                  5         U R-                  SU5        U R!                  5         UR                   (       a  U R!                  5         gg)zHandles includes.rM  get_or_select_templateget_templateselect_templateztemplate = environment.rA   r@   rC   zexcept TemplateNotFound:r)  r  FzUfor event in template.root_render_func(template.new_context(context.get_all(), True, z)):zGfor event in (await template._get_default_module_async())._body_stream:z6yield from template._get_default_module()._body_streamTr  N)ignore_missingr
  r  r\   r  r   Constrc   rx   ry   rz   TupleListr2   rG   rV   r  with_contextrm  r  rD   rl  r&  )r'   r)   r*   	func_nameskip_event_yields        r4   visit_IncludeCodeGenerator.visit_Include	  s   NN6"KKM,	dmmU[[11$----s33*	DMM//%??-	UZZ'@AA)I01=tD

4==%(

R		}A&'LLNNN56KKMNN6"LLNNN7#KKM NN$$&' (++E2338
 &&NN!
 NNST#KKMgu-LLNLLN r7   c                    U R                  U R                  S5       S35        U R                  UR                  U5        U R                  SU R                  < S35        UR
                  (       a;  SU R                  S5       3nU R                  U SU R                  U5       S35        g U R                  S	U R                  S5       S
35        g )Nawait zenvironment.get_template(r@   z).make_module_asyncz(context.get_all(), True, rC   _get_default_modulez	(context))rG   rm  r2   r  rV   r  r  )r'   r)   r*   f_names       r4   _import_commonCodeGenerator._import_common<  s     	

d''122KLM

4==%(

R		}B'("4#4#4X#>"?@FJJ(4T5L5LU5S4TTUV JJ,T->->x-H,ISTr7   c                    U R                  UR                  R                  UR                  5       S3U5        UR                  (       a   U R                  SUR                  < S35        U R                  X5        UR                  (       aB  UR                  R                  S5      (       d!  U R                  SUR                  < S35        ggg)zVisit regular imports.rY  r  r  r  context.exported_vars.discard(rC   N)r
  r   r|  r`  r   rG   r  
startswithr  s      r4   visit_ImportCodeGenerator.visit_ImportK  s    %--++DKK89=tD>>JJt{{oT:;D(>>$++"8"8"="=NN;DKK?!LM #>>r7   c           	        ^ U R                  U5        U R                  S5        U R                  UT5        / n/ nUR                   GH:  n[	        U[
        5      (       a  Uu  pVOUnU R                  TR                  R                  U5       SU< S35        U R                  STR                  R                  U5       S35        U R                  5         SU R                  U5       SU< 3nU R                  TR                  R                  U5       SU< S	U< S
35        U R                  5         TR                  (       d  M  UR                  U5        UR                  S5      (       a  GM)  UR                  U5        GM=     U(       av  [        U5      S:X  a7  US   nU R                  SU< STR                  R                  U5       35        O0SR!                  U4S jU 5       5      nU R                  SU S35        U(       a^  [        U5      S:X  a  U R                  SUS   < S
35        gSR!                  [#        [$        U5      5      n	U R                  SU	 S35        gg)zVisit named imports.zincluded_template = z = getattr(included_template, z
, missing)rw  rx  z9the template {included_template.__name__!r} (imported on z%) does not export the requested name z = undefined(fz, name=rC   r  r
   r   r  r  r@   c              3   d   >#    U  H%  o< S TR                   R                  U5       3v   M'     g7fr  )r   r|  )rh   rV   r*   s     r4   rj   1CodeGenerator.visit_FromImport.<locals>.<genexpr>{  s-      %GPthb!2!24!8 9:ys   -0r  r  r  z)context.exported_vars.difference_update((r  N)r3  rG   r  r   r\   ry   r
  r   r|  r  r  r  r   r/  r  r  r^  r  r  )
r'   r)   r*   	var_namesdiscarded_namesrV   r  messagenames_kvr  s
     `       r4   visit_FromImportCodeGenerator.visit_FromImportV  s7   T

)*D%(	JJD$&&"eNN==$$U+, -//3hjB NNS!2!25!9 :,GHKKM!!%t!4 5 677;h@ 
 NN==$$U+,N7+WTHTUV LLN~~~  ''',,#**51/ 2 9~" |thd5==;L;LT;R:STU99 %GP%  !7zEF?#q(!?PQ@R?UUVWX IIc$&@A	?	{"M r7   c                 
   UR                  5       nSUl        UR                  5       nUR                  5       nUR                  =(       dR    S[        UR	                  SS9S5      ;   =(       d/    [        S UR                  [        R                  5       5       5      nS nU(       a  UR                  R                  S5      nUR                  R                  USS9  UR                  (       a  UR                  R                  US	S9  UR                  (       Ga  U R                  5       nUR                  R                  US
S9  U R                  U R!                  U5       S3UR                  5        U R#                  5         U R%                  U5        U R                  U R'                  SS5      5        U R)                  UR*                  U5        U R-                  S5        U R-                  U R'                  SS5      5        U R-                  S5        U R#                  5         U R                  SUR                  5        U R)                  UR                  U5        U R-                  S5        U R#                  5         U R                  S5        U R)                  UR*                  U5        U R/                  S5        U R1                  USS9  UR                  (       aV  U R                  U R!                  S5       S3U5        U R#                  5         U R3                  U5        UR2                  Ul        U(       a  U R                  U S35        UR                  [        R4                  5       HC  n	U	R6                  S:X  d  M  U	R8                  S:X  d  M'  U R;                  SU	R<                  5        ME     UR                  (       a$  U R                  5       n
U R                  U
 S35        U R                  U R'                  SS5      U5        U R)                  UR*                  U5        U(       a(  U R-                  SU SU R'                  S5       S35        OU R-                  S5        UR                  (       a  U R-                  W S35        UR                  (       a  U R-                  S5        OU R>                  R@                  (       a  U(       d  U R-                  S 5        U R)                  URB                  U5        U R>                  R@                  (       a  U(       d  U R-                  S!5        UR                  (       a  U R-                  S!5        UR                  (       a  U R-                  S"5        OU R-                  U(       a  S#OS5        U R#                  5         U R%                  U5        U R                  S$5        U RE                  URF                  U5        UR                  (       a  U R                  W
 S%35        U R/                  5         U R1                  X1R                  =(       a    UR                  (       + S9  UR                  (       as  U R                  SW
 S35        U R#                  5         U R%                  U5        U RE                  UR                  U5        U R1                  U5        U R/                  5         UR                  (       a  U RI                  U5        U R/                  5         U RK                  X!5        U R-                  U R'                  S&5       S'35        U R>                  R@                  (       a  U R-                  S 5        U R)                  URB                  U5        U R>                  R@                  (       a  U R-                  S!5        U R-                  S(5        U RM                  U5        U RN                  (       a3  U RN                  S)   RQ                  UR                  RR                  5        g g )*NTloop)r}  )only)r#  c              3   8   #    U  H  oR                   v   M     g 7fr.   )r  )rh   r   s     r4   rj   *CodeGenerator.visit_For.<locals>.<genexpr>  s     H-GE<<-Grl   r}  )
for_branchelsetestz(fiter):z
async for zfor r  zauto_aiter(fiter)fiter:rw  r     ry  z%(reciter, loop_render_func, depth=0):rZ  storez8Can't assign to special loop variable in for-loop targetz = 1r@   AsynczLoopContext(rA   reciterzauto_aiter(rC   z&, undefined, loop_render_func, depth):z, undefined):z_loop_vars = {}z = 0r  zloop(z, loop)rQ  )*r   r   	recursiver   iter_child_nodesrC  r  r   r   r   r  rz  else_r)  r  r
  rp  r  rc  rm  r2   r`  rG   r  rg  r   r   r   rV   r  r  rD   rl  r  r*  r}  r  r  r"  r   difference_updatestores)r'   r)   r*   r   
test_frame
else_frameextended_looploop_refloop_filter_funcrV   iteration_indicators              r4   	visit_ForCodeGenerator.visit_For  s   [[]
 $
[[]
[[]
 NN It44)4DiPQI HT]]5;;-GHH	 	 !));;FCH'''@::++DV+D999#88:++DV+DNNdii(89:(CTYYOKKMZ(NN4,,\6BCJJt{{J/JJvJJt(()<gFGJJsOKKMNN5$)),JJtyy*-JJsOKKMNN8$JJt{{J/LLOZ4@
 >>NN99V$%%JKT KKMKK
# !+ 1 1J NNhZz23MM%**-Dxx7"tyyF':		NKK . ::"&";";"=NN12$78t((v>E

4;;
+JJH:T$*;*;G*D)E\RSJJv99JJ*+1-.>>JJy!((

=)JJtyy%(((

399JJsO>>JJ?@JJ-SA$()		:.::NN12$78..*K^ 	 	
 ::NNS!4 5Q78KKMZ(OODJJ
3Z(LLN >>''
3LLNU)JJ$++H56e<=((

=)JJtyy%(((

3JJy!NN5! r"44Z5G5G5N5NO r7   c                    UR                  5       nU R                  SU5        U R                  UR                  U5        U R	                  S5        U R                  5         U R                  UR                  U5        U R                  5         UR                   H~  nU R                  SU5        U R                  UR                  U5        U R	                  S5        U R                  5         U R                  UR                  U5        U R                  5         M     UR                  (       aN  U R                  S5        U R                  5         U R                  UR                  U5        U R                  5         g g )Nrw  r+  zelif r  )r   r
  r2   r)  rG   r  r*  r}  r  elif_r2  )r'   r)   r*   if_framer>  s        r4   visit_IfCodeGenerator.visit_If  s    ::<ud#

499h'

3		8,ZZENN7E*JJuzz8,JJsOKKMOOEJJ1LLN   ::NN7#KKMOODJJ1LLN	 r7   c                    U R                  X5      u  p4U R                  5         UR                  (       a`  UR                  R	                  S5      (       d   U R                  SUR                  < S35        U R                  SUR                  < S35        U R                  UR                  R                  UR                  5       S35        U R                  XC5        g )Nr  r  rC   r  r  rY  )
r  r3  r   rV   r  rG   r
  r   r|  r  )r'   r)   r*   macro_framer  s        r4   visit_MacroCodeGenerator.visit_Macro(  s    !%!=>>99'',,

7		}AFGNN]499-t<=

emm''		23378y.r7   c                     U R                  X5      u  p4U R                  S5        U R                  XC5        U R                  X!5        U R	                  UR
                  USS9  U R                  U5        g )Nz	caller = T)forward_caller)r  r
  r  r  
visit_Callcallr"  )r'   r)   r*   
call_framer  s        r4   visit_CallBlockCodeGenerator.visit_CallBlock2  s[     $ <
{#y-%		5>ur7   c                 t   UR                  5       nUR                  R                  U5        U R                  U5        U R	                  U5        U R                  UR                  U5        U R                  X!5        U R                  UR                  U5        U R                  U5        U R                  U5        g r.   )r   r   rz  rc  r   r*  r}  r  r   filterr"  rg  )r'   r)   r*   filter_frames       r4   visit_FilterBlockCodeGenerator.visit_FilterBlock:  s    {{}))$/&L!		<0%$++|4u&r7   c                    UR                  5       nUR                  R                  U5        U R                  U5        [	        UR
                  UR                  5       HH  u  pEU R                  5         U R                  XC5        U R                  S5        U R                  XR5        MJ     U R                  UR                  U5        U R                  U5        g NrY  )r   r   rz  rc  ziptargetsvaluesr3  r2   rG   r*  r}  rg  )r'   r)   r*   
with_framer`  exprs         r4   
visit_WithCodeGenerator.visit_WithE  s    [[]
''-$dkk:LFLLNJJv*JJuJJt#	 ;
 			:.$r7   c                 ^    U R                  U5        U R                  UR                  U5        g r.   )r3  r2   r)   r  s      r4   visit_ExprStmtCodeGenerator.visit_ExprStmtQ  s     T

499e$r7   c                   |    \ rS rSr% \R
                  \R                  S\4      \S'   \R
                  \   \S'   Sr	g)CodeGenerator._FinalizeInfoiU  .constsrcr   N)
r   r   r   r   r9   r   Callablerx   __annotations__r   r   r7   r4   _FinalizeInfor_  U  s,    zz!**S#X.//ZZ_r7   rd  rc   c                     [        U 5      $ )zThe default finalize function if the environment isn't
configured with one. Or, if the environment has one, this is
called on that function's output for constants.
)rx   r   s    r4   _default_finalizeCodeGenerator._default_finalizeY  s     5zr7   	_finalizec                 z  ^ ^^ T R                   b  T R                   $ T R                  =nmSnT R                  R                  (       a  SnT R                  R                  m[        R
                  S[        R                  S[        R                  S0R                  [        R                  " T5      5      nSnUc*  S[        R                  S[        R                  4UU4S jjnO7U U S	3nUS:X  a*  S[        R                  S[        R                  4UUU 4S
 jjnT R                  X5      T l         T R                   $ )aI  Build the finalize function to be used on constants and at
runtime. Cached so it's only created once for all output nodes.

Returns a ``namedtuple`` with the following attributes:

``const``
    A function to finalize constant data at compile time.

``src``
    Source code to output around nodes to be evaluated at
    runtime.
Nzenvironment.finalize(r   context.eval_ctxrD   rc   r%   c                     > T" T" U 5      5      $ r.   r   )rc   r  env_finalizes    r4   finalize.CodeGenerator._make_finalize.<locals>.finalize  s    "<#677r7   r@   c                 6   > T" T" TR                   U 5      5      $ r.   )rD   )rc   r  rl  r'   s    r4   rm  rn    s    &|D4D4De'LMMr7   )rh  rf  rD   rm  r   r   eval_contextgetfrom_objr9   r:   rd  )r'   rm  ra  pass_argr  rl  s   `   @@r4   _make_finalizeCodeGenerator._make_finalizec  s$    >>%>>! "3337$$)C++44L  )%%'9$$m c!!,/	  H8AEE 8aee 8 8 hZr*},N N!%% N N ++H:~~r7   groupc                 *    [        [        U5      5      $ )zGiven a group of constant values converted from ``Output``
child nodes, produce a string to write to the template module
source.
)r  r   )r'   rv  s     r4   _output_const_repr CodeGenerator._output_const_repr  s    
 F5M""r7   rm  c                     UR                  UR                  5      nUR                  R                  (       a  [        U5      n[	        U[
        R                  5      (       a  [        U5      $ UR                  U5      $ )a  Try to optimize a child of an ``Output`` node by trying to
convert it to constant, finalized data at compile time.

If :exc:`Impossible` is raised, the node is not constant and
will be evaluated at runtime. Any other exception will also be
evaluated at runtime for easier debugging.
)	as_constr0   r  r   r\   r   TemplateDatarx   r`  )r'   r)   r*   rm  r`  s        r4   _output_child_to_const$CodeGenerator._output_child_to_const  sZ     enn->>$$5ME dE..//u:~~e$$r7   c                 ,   UR                   R                  (       a  U R                  S5        O>UR                   R                  (       a  U R                  S5        OU R                  S5        UR                  b  U R                  UR                  5        gg)zHOutput extra source code before visiting a child of an
``Output`` node.
z1(escape if context.eval_ctx.autoescape else str)(zescape(zstr(N)r0   r1   rG   r  ra  r'   r)   r*   rm  s       r4   _output_child_preCodeGenerator._output_child_pre  sb     >>""JJJK^^&&JJy!JJv<<#JJx||$ $r7   c                 d    U R                  S5        UR                  b  U R                  S5        gg)zGOutput extra source code after visiting a child of an
``Output`` node.
rC   N)rG   ra  r  s       r4   _output_child_post CodeGenerator._output_child_post  s)     	

3<<#JJsO $r7   c                    UR                   (       a3  U R                  (       a  g U R                  S5        U R                  5         U R	                  5       n/ nUR
                   H  n UR                  (       d4  [        U[
        R                  5      (       d  [
        R                  " 5       eU R                  XRU5      nU(       a.  [        US   [        5      (       a  US   R                  U5        M  UR                  U/5        M     UR                  b\  [        U5      S:X  a  U R                  UR                   S35        OU R                  UR                   S35        U R                  5         U H  n[        U[        5      (       aJ  U R!                  U5      nUR                  c  U R                  SU-   5        ML  U R                  US-   5        Mb  UR                  c  U R                  SU5        OU R#                  U5        U R%                  XrU5        U R'                  Xr5        U R)                  XrU5        UR                  c  M  U R+                  S5        M     UR                  b2  U R-                  5         U R                  [        U5      S:X  a  SOS	5        UR                   (       a  U R-                  5         g g ! [
        R                  [        4 a    UR                  U5         GM  f = f)
Nr  rQ  r
   r  z	.extend((r  r  rC   r  )r   r   r
  r  rt  r   r`  r\   r|  
Impossibler}  	Exceptionr/  rz   r   r  rx  r3  r  r2   r  rG   r  )	r'   r)   r*   rm  r}  childr`  itemvals	            r4   visit_OutputCodeGenerator.visit_Output  s?   %%%%NN89KKM&&(;=
 ZZE NN "%););<<**,,33E(K 
48T22R&UG$/  2 <<#4yA~%,,x89%,,y9:KKMD$%%--d3<<'NN8c>2NN39-<<'NN8T2LL& &&tH=

4'''X><<+JJsO+ . <<#LLNNN#d)q.3d;%%LLN &_ $$i0  E"s   'AK+K21K2c                     U R                  5         U R                  U5        U R                  UR                  U5        U R	                  S5        U R                  UR
                  U5        U R                  U5        g rS  )r  r3  r2   r`  rG   r)   r  r  s      r4   visit_AssignCodeGenerator.visit_Assign  sX    !!#T

4;;&

5

499e$  'r7   c                 x   U R                  5         UR                  5       nSUl        UR                  R	                  U5        U R                  U5        U R                  U5        U R                  UR                  U5        U R                  U5        U R                  UR                  U5        U R                  S5        UR                  b  U R                  UR                  U5        OU R                  SUR                   S35        U R                  S5        U R                  U5        U R!                  U5        g )NFz9 = (Markup if context.eval_ctx.autoescape else identity)(concat(rC   )r  r   r   r   rz  rc  r   r*  r}  r3  r2   r`  rG   rN  r   r  rg  )r'   r)   r*   r   s       r4   visit_AssignBlockCodeGenerator.visit_AssignBlock!  s    !!#kkm ,1(((.%K 		;/T

4;;&

NO;;"dkk;7JJ!3!3 4A67

3  '%r7   c           	      X   UR                   S:X  al  UR                  (       d"  UR                  (       d  UR                  (       a9  U R                  (       a(  U R                  S   R                  UR                  5        UR                  R                  UR                  5      nUR                   S:X  ah  UR                  R                  U5      nUb#  US   [        :X  a  U R                  U5      (       a'  U R                  SUR                  < SU SU S35        g U R                  U5        g )	Nr-  rQ  r   r   z(undefined(name=z) if z is missing else rC   )r   r   r   r   r   r   rV   r   r|  	find_loadr   r  rG   )r'   r)   r*   r|  r   s        r4   r   CodeGenerator.visit_Name9  s    88wNNe..%2C2C!!""2&**4995mm		*
 88v==**3/D G1144S99

&tyym5=NseSTU 

3r7   c                    UR                   R                  UR                  5      nU R                  SU S35        U R	                  5         U R                  S5        U R                  5         U R                  U SUR                  < S35        g )Nzif not isinstance(z, Namespace):zMraise TemplateRuntimeError("cannot assign attribute on non-namespace object")rN  rO  )r   r|  rV   r
  r  r  attr)r'   r)   r*   r|  s       r4   visit_NSRefCodeGenerator.visit_NSRefR  su     mm		*+C5>?B	
 	#a		}A./r7   c                     UR                  UR                  5      n[        U[        5      (       a  U R	                  [        U5      5        g U R	                  [        U5      5        g r.   )r{  r0   r\   ru   rG   rx   r  )r'   r)   r*   r  s       r4   visit_ConstCodeGenerator.visit_Const`  sA    mmENN+c5!!JJs3x JJtCy!r7   c                      U R                  [        UR                  UR                  5      5      5        g ! [        R
                   a#    U R                  SUR                  < S35         g f = fNz6(Markup if context.eval_ctx.autoescape else identity)(rC   )rG   r  r{  r0   r   r  datar  s      r4   visit_TemplateData CodeGenerator.visit_TemplateDatag  sW    	JJtDMM%..9:; 	JJHUVW	s   36 4A-,A-c                     U R                  S5        Sn[        UR                  5       H.  u  p4U(       a  U R                  S5        U R                  XB5        M0     U R                  US:X  a  S5        g S5        g )NrA   rQ  r@   r   z,)rC   rG   r{  r   r2   r'   r)   r*   r  r  s        r4   visit_TupleCodeGenerator.visit_Tupleo  s[    

3"4::.IC

4 JJt# / 	

3!84--r7   c                     U R                  S5        [        UR                  5       H.  u  p4U(       a  U R                  S5        U R                  XB5        M0     U R                  S5        g )NrN  r@   rO  r  r  s        r4   
visit_ListCodeGenerator.visit_Listx  sJ    

3"4::.IC

4 JJt# / 	

3r7   c                 F   U R                  S5        [        UR                  5       Hf  u  p4U(       a  U R                  S5        U R                  UR                  U5        U R                  S5        U R                  UR
                  U5        Mh     U R                  S5        g )Nr  r@   rA  rB  )rG   r{  r   r2   r>  rc   r  s        r4   
visit_DictCodeGenerator.visit_Dict  sn    

3"4::.IC

4 JJtxx'JJtJJtzz5) / 	

3r7   +-*/z//z**%andorznot c                 4   UR                   R                  (       a  SnO UR                   R                  (       a  SnOSnU R                  U S35        UR                   H%  nU R                  XB5        U R                  S5        M'     U R                  S5        g )Nz8(markup_join if context.eval_ctx.volatile else str_join)markup_joinstr_joinz((r@   r  )r0   r1   r  rG   r   r2   )r'   r)   r*   r  rH  s        r4   visit_ConcatCodeGenerator.visit_Concat  sr    >>""RI^^&&%I"I

i[#$::CJJs"JJt  	

4r7   c                     U R                  S5        U R                  UR                  U5        UR                   H  nU R                  X25        M     U R                  S5        g )NrA   rC   )rG   r2   rX  opsrJ   s       r4   visit_CompareCodeGenerator.visit_Compare  sD    

3

499e$((BJJr! 

3r7   c                     U R                  S[        UR                      S35        U R                  UR                  U5        g )NrB   )rG   	operatorsr=   r2   rX  r  s      r4   visit_OperandCodeGenerator.visit_Operand  s3    

Qy)*!,-

499e$r7   c                 P   U R                   R                  (       a  U R                  S5        U R                  S5        U R                  UR                  U5        U R                  SUR
                  < S35        U R                   R                  (       a  U R                  S5        g g )N(await auto_await(zenvironment.getattr(r@   rC   r  )rD   rl  rG   r2   r)   r  r  s      r4   visit_GetattrCodeGenerator.visit_Getattr  sv    $$JJ+,

)*

499e$

R		}A&'$$JJt %r7   c                    [        UR                  [        R                  5      (       a[  U R	                  UR
                  U5        U R                  S5        U R	                  UR                  U5        U R                  S5        g U R                  R                  (       a  U R                  S5        U R                  S5        U R	                  UR
                  U5        U R                  S5        U R	                  UR                  U5        U R                  S5        U R                  R                  (       a  U R                  S5        g g )NrN  rO  r  zenvironment.getitem(r@   rC   r  )	r\   rH  r   Slicer2   r)   rG   rD   rl  r  s      r4   visit_GetitemCodeGenerator.visit_Getitem  s     dhh,,JJtyy%(JJsOJJtxx'JJsO((

/0JJ-.JJtyy%(JJtJJtxx'JJsO((

4  )r7   c                 @   UR                   b  U R                  UR                   U5        U R                  S5        UR                  b  U R                  UR                  U5        UR                  b.  U R                  S5        U R                  UR                  U5        g g )Nr+  )startr2   rG   stopr  r  s      r4   visit_SliceCodeGenerator.visit_Slice  sq    ::!JJtzz5)

399 JJtyy%(99 JJsOJJtyy%( !r7   	is_filterc              #     #    U R                   R                  (       a  U R                  S5        U(       a[  U R                  U R                  UR                      S35        U R                   R                  R                  UR                  5      nOZU R                  U R                  UR                      S35        U R                   R                  R                  UR                  5      nUcJ  UR                  (       d9  U(       a  SOSnU R                  SU SUR                  < S3UR                  5        [        R                  S[        R                  S	[        R                   S
0R                  [        R                  " U5      5      nUb  U R                  U S35        S v   U R                  X5        U R                  S5        U R                   R                  (       a  U R                  S5        g g 7f)Nr  rA   rN  r)  zNo rR  r  r   rj  rD   r@   rC   r  )rD   rl  rG   r   rV   rq  r   r   r  r  r   r   rp  rr  rJ  )r'   r)   r*   r  rp  	type_namers  s          r4   _filter_test_common!CodeGenerator._filter_test_common  s     $$JJ+,JJ$,,tyy12!45##++//		:DJJ$**TYY/023##))--dii8D
 < 0 0$-6IIII;gdii]!<dkkJ i!!#5  -
 #d#
	 	 JJ(2' 	t#

3$$JJt %s   G6G8c                    U R                  XS5         UR                  b  U R                  UR                  U5        OUR                  R                  (       a-  U R                  SUR                   SUR                   S35        OZUR                  R                  (       a   U R                  SUR                   S35        OU R                  SUR                   S35        S S S 5        g ! , (       d  f       g = f)NTz(Markup(concat(z.)) if context.eval_ctx.autoescape else concat(r  zMarkup(concat(r  rC   )r  r)   r2   r0   r1   rG   r   r  r  s      r4   r   CodeGenerator.visit_Filter  s    %%d48 yy$

499e,((

%ell^ 4CCH<<.PRT **

^ELL><=

WU\\N!45 988s   CC))
C7c                     U R                  XS5         U R                  UR                  U5        S S S 5        g ! , (       d  f       g = fr   )r  r2   r)   r  s      r4   r   CodeGenerator.visit_Test  s0    %%d59JJtyy%( :99s	   9
Ac                 D  ^ ^^ TR                  5       mSUUU 4S jjnT R                  S5        T R                  TR                  T5        T R                  S5        T R                  TR                  T5        T R                  S5        U" 5         T R                  S5        g )Nc                     > TR                   b  TR                  TR                   T 5        g TR                  STR                  T5       S35        g )Nz1cond_expr_undefined("the inline if-expression on z6 evaluated to false and no else section was defined."))expr2r2   rG   r  )r*   r)   r'   s   r4   write_expr21CodeGenerator.visit_CondExpr.<locals>.write_expr2   sL    zz%

4::u-JJMM$'( )*+r7   rA   z if z else rC   r   )r   rG   r2   expr1r)  )r'   r)   r*   r  s   ``` r4   visit_CondExprCodeGenerator.visit_CondExpr  sq    

		 		 	

3

4::u%

6

499e$

8

3r7   rG  c                    U R                   R                  (       a  U R                  S5        U R                   R                  (       a  U R                  S5        OU R                  S5        U R	                  UR
                  U5        U(       a  SS0OS nUR                  (       a  SS0O0 nUR                  (       a  SS0O0 nU(       a  UR                  " U40 UD6  OU(       d  U(       a  [        U40 UD6nU R                  XU5        U R                  S5        U R                   R                  (       a  U R                  S5        g g )	Nr  zenvironment.call(context, zcontext.call(rs  
_loop_vars_block_varsrC   r  )rD   rl  rG   rE   r2   r)   r   r   r   r~   rJ  )r'   r)   r*   rG  r8  loop_kwargsblock_kwargss          r4   rH  CodeGenerator.visit_Call3  s     $$JJ+,%%JJ34JJ'

499e$/=(+46;6F6F|\2B9>9J9J}5PR<|<L<|<LtL1

3$$JJt %r7   c                 x    U R                  UR                  S-   5        U R                  UR                  U5        g )Nr@  )rG   r>  r2   rc   r  s      r4   visit_KeywordCodeGenerator.visit_KeywordJ  s(    

488c>"

4::u%r7   c                     U R                  S5        U R                  UR                  U5        U R                  S5        g )NzMarkup(rC   rG   r2   rX  r  s      r4   visit_MarkSafeCodeGenerator.visit_MarkSafeP  s+    

9

499e$

3r7   c                     U R                  S5        U R                  UR                  U5        U R                  S5        g r  r  r  s      r4   visit_MarkSafeIfAutoescape(CodeGenerator.visit_MarkSafeIfAutoescapeU  s.     	

KL

499e$

3r7   c                 @    U R                  SUR                  -   5        g )Nzenvironment.rG   rV   r  s      r4   visit_EnvironmentAttribute(CodeGenerator.visit_EnvironmentAttribute\  s     	

>DII-.r7   c                 \    U R                  SUR                  < SUR                   35        g )Nzenvironment.extensions[z].)rG   
identifierrV   r  s      r4   visit_ExtensionAttribute&CodeGenerator.visit_ExtensionAttributea  s'     	

,T__,?r$))MNr7   c                 T    U R                  U R                  UR                     5        g r.   )rG   r   r  r  s      r4   visit_ImportedName CodeGenerator.visit_ImportedNamef  s    

4&&t78r7   c                 :    U R                  UR                  5        g r.   r  r  s      r4   visit_InternalName CodeGenerator.visit_InternalNamei  s    

499r7   c                 &    U R                  S5        g )Nr   )rG   r  s      r4   visit_ContextReference$CodeGenerator.visit_ContextReferencel  s     	

9r7   c                 D    U R                  U R                  U5      5        g r.   )rG   r  r  s      r4   visit_DerivedContextReference+CodeGenerator.visit_DerivedContextReferenceq  s     	

4&&u-.r7   c                 (    U R                  SU5        g )Ncontinuer  r  s      r4   visit_ContinueCodeGenerator.visit_Continuev  s    z4(r7   c                 (    U R                  SU5        g )Nbreakr  r  s      r4   visit_BreakCodeGenerator.visit_Breaky  s    w%r7   c                     UR                  5       nUR                  R                  U5        U R                  U5        U R	                  UR
                  U5        U R                  U5        g r.   )r   r   rz  rc  r*  r}  rg  )r'   r)   r*   scope_frames       r4   visit_ScopeCodeGenerator.visit_Scope|  sO    kkm((.%		;/%r7   c                    U R                  5       nU R                  U SU R                  U5       35        U R                  U S35        U R                  UR                  U5        U R                  U5        UR                  SS9nUR                  R                  U5        U R                  U5        U R                  UR                  U5        U R                  U5        U R                  5         g )NrY  z.vars = T)r   )r  r
  r  r2   r   r  r   r   rz  rc  r*  r}  rg  r  )r'   r)   r*   r   r  s        r4   visit_OverlayScope CodeGenerator.visit_OverlayScope  s    '')#c$"5"5e"<!=>?#h'(

4<<'##C(kk4k0((.%		;/%""$r7   c                    UR                    H  nU R                  SUR                   S35        U R                  UR                  U5         UR                  R                  UR                  5      n[        UR                  UR                  U5        M     g ! [        R                   a    SUR                  l
         M  f = f)Nzcontext.eval_ctx.rY  T)optionsr
  r>  r2   rc   r{  r0   setattrr   r  r1   )r'   r)   r*   keywordr  s        r4   visit_EvalContextModifier'CodeGenerator.visit_EvalContextModifier  s     ||GNN.w{{m3?@JJw}}e,:mm,,U^^< S9 $
 ## /*.'/s   %B%C ?C c                 J   U R                  5       nUR                  R                  5       nU R                  U S35        U R	                  X5        UR
                   H  nU R                  XR5        M     UR                  R                  U5        U R                  SU S35        g )Nz = context.eval_ctx.save()zcontext.eval_ctx.revert(rC   )r  r0   saver
  r  r}  r2   revert)r'   r)   r*   old_ctx_name	saved_ctxr  s         r4   visit_ScopedEvalContextModifier-CodeGenerator.visit_ScopedEvalContextModifier  s     002NN'')	,'ABC&&t3YYEJJu$ i(1,qABr7   )r   r   rh  r   r   r   r   r   r   r   r   r   r   r   rY   rD   r   rW   r   r   r   rV   r/   rX   r   NFTr   r   )r
   r.   )Nr   )zasync r  )r   r   r   r   r9   r   rx   TextIOrs   r   propertyrZ   rt   r  r  r+   r   r  r  r  r   Noder  r"  r&  r   r*  rG   r
  r3  r   Callr   r   Mappingr:   rJ  rV  rc  rg  rm  rp  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  Includer
  Import
FromImportr  r  r   Forr;  Ifr@  rD  rK  FilterBlockrP  WithrY  ExprStmtr\  
NamedTuplerd  staticmethodrf  rh  rc  rt  rx  r8   r}  r  r  Outputr  Assignr  AssignBlockr  r   r   NSRefr  r  r  r|  r  r  r  r  Dictr  rO   	visit_Add	visit_Sub	visit_Mul	visit_Divvisit_FloorDiv	visit_Pow	visit_Mod	visit_Andvisit_OrrU   	visit_Pos	visit_Neg	visit_Notr<   Concatr  Comparer  Operandr  Getattrr  Getitemr  r  r  r   Iteratorr  r   r   CondExprr  rH  Keywordr  MarkSafer  MarkSafeIfAutoescaper  EnvironmentAttributer  ExtensionAttributer  r  r  InternalNamer  ContextReferencer   DerivedContextReferencer  Continuer  Breakr  Scoper  OverlayScoper  EvalContextModifierr  ScopedEvalContextModifierr  r   r   r7   r4   r(   r(   ,  s    (, G4"G4 jjoG4 **S/	G4
 

188$G4 G4 G4 
G4R *4 * *
L LS L] L,c ,
/E /d / 5:99-19	9("C " "< <ajj.D <PT <u   DH"*+**UZZ*@		

5:: 6 	u 	 	s t  IJJJuzz2BE	*AJJuzz2 *# *d * ;?	7/ggejj%,,

:;7/ 7/ jj3:!67	7/
 
7/r,qzz%**'= ,$ ,\> >4 > B B4 BD BH HC HQT H2 2 2Q GGEKK89Q BGQ 	
	!Q f

8 

E 

d 

UZZ C ! !# !+I I$ I$6C 6D 65S 5T 5,1 1## #UE Uc U3c 3d 3))O )O4 )O\ @Du9NNu9+,::e+<u9	u9n) )E )d )V(!%-- (! (!$ (!T1%-- 1 1$ 1fUGGELL%*:*::;UDIU	U	N 	Ne 	N 	N0U%5%5 0e 0 0dIPeii IP IP$ IPVUXX e  */ /E /d /EOO E d 	'e&7&7 	' 	'$ 	'
%uzz 
%% 
%D 
%%5>> %% %D %   155   ,0Iqzz-(/. .`#

155(9 #c #%JJ%',%8E%	%*%JJ%',%8E%	% 	JJ	',	8E			M Me M M^( (e ( (&e&7&7 & &$ &0uzz % D 20 0E 0d 0" "E "d "u'9'9 % D . .E .d .uzz % D uzz % D  C IC IC IC I &ND!IC IE"I4 H3I3I6"I e    %--  $  %%-- % %$ % 	%-- 	 	$ 	 	 !%-- ! !$ ! !() )E )d ) 'GGELL%**45'>C'PT'	
D	' 'R 6 6e 6 6 6  )uzz )% )D ) ) 5>> % D  , EJJJ',>B	 ,&%-- & &$ &5>> % D 
..7<	/../7</	/
O,,O5:O	O
9u'9'9 9% 9D 9u'9'9 % D **38	
/11/:?/	/
)5>> )% )D )& &E &d && &E &d &%u'9'9 %% %D %:--:6;:	:
C33
C<A
C	
Cr7   r!  )Fr   typingr9   
contextlibr   	functoolsr   ior   	itertoolsr   r  r   r;  
markupsafer   r	   r  r   
exceptionsr   
idtrackingr   r   r   r   r   r   r/   r   utilsr   r   rK   r   TYPE_CHECKINGtyping_extensionsterD   r   TypeVarrb  r:   r   r  r<   rx   rM   rO   rT   rU   r]   r   r"  rs   rb   rg   r   r$  Setr   r   r+   RuntimeErrorr   r   r   r  r   r(   r   r7   r4   <module>rf     s0   6  % $   2    .  & * ( *       ??"(IIcCJ/0 



		2Q 21 2 C AJJ'PRV'VW *ZZ%//7;TAB0 $(
.. **S/ jjo	
 JJqxx    ZZ_0 4 "::ejj!*+**S/UU3Z& &P PfJ, J'k '&&K &,9 |CK |Cr7   