§
    ÈtºfÁF  ã                  óö  — d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
 ddlmZ ddlmZmZmZmZmZmZmZmZmZmZmZmZ dd	lmZmZ dd
lmZ ddlm Z  ddl!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z-m.Z.  ed¦  «        Z/eZ0	 ee1e2e&e"e$e%ee0df         ee0         ee0ddf         e#ee0         eee0         e3e0f         e-f         Z4	 dZ5d:d„Z6d:d„Z7d;d„Z8d:d„Z9d:d„Z:	 d<d=d&„Z;d>d)„Z<d?d3„Z=d@d5„Z>dAd7„Z?dBd9„Z@dS )Czu
Context-free flattener/serializer for rendering Python objects, possibly
complex or arbitrarily nested, as strings.
é    )Úannotations)Úiscoroutine)ÚBytesIO)Úexc_info)Ú
extract_tb)ÚGeneratorType)ÚAnyÚCallableÚ	CoroutineÚ	GeneratorÚListÚMappingÚOptionalÚSequenceÚTupleÚTypeVarÚUnionÚcast)ÚDeferredÚensureDeferred)ÚnativeString)ÚFailure)ÚCDATAÚCharRefÚCommentÚTagÚslotÚvoidElements)ÚFlattenerErrorÚUnfilledSlotÚUnsupportedType)ÚIRenderableÚIRequestÚT.Ni   ÚdataúUnion[bytes, str]ÚreturnÚbytesc                óÖ   — t          | t          ¦  «        r|                      d¦  «        } |                      dd¦  «                             dd¦  «                             dd¦  «        } | S )a›  
    Escape some character or UTF-8 byte data for inclusion in an HTML or XML
    document, by replacing metacharacters (C{&<>}) with their entity
    equivalents (C{&amp;&lt;&gt;}).

    This is used as an input to L{_flattenElement}'s C{dataEscaper} parameter.

    @param data: The string to escape.

    @return: The quoted form of C{data}.  If C{data} is L{str}, return a utf-8
        encoded string.
    úutf-8ó   &s   &amp;ó   <s   &lt;ó   >s   &gt;©Ú
isinstanceÚstrÚencodeÚreplace©r%   s    úS/var/www/surfInsights/venv3-11/lib/python3.11/site-packages/twisted/web/_flatten.pyÚescapeForContentr5   G   s_   € õ �$�ÑÔð $Ø�{Š{˜7Ñ#Ô#ˆØ�<Š<˜˜hÑ'Ô'×/Ò/°°gÑ>Ô>×FÒFÀtÈWÑUÔU€DØ€Kó    c                óZ   — t          | t          ¦  «        r|                      d¦  «        S | S )aG  
    Escape some character or UTF-8 byte data for inclusion in the top level of
    an attribute.  L{attributeEscapingDoneOutside} actually passes the data
    through unchanged, because L{writeWithAttributeEscaping} handles the
    quoting of the text within attributes outside the generator returned by
    L{_flattenElement}; this is used as the C{dataEscaper} argument to that
    L{_flattenElement} call so that that generator does not redundantly escape
    its text output.

    @param data: The string to escape.

    @return: The string, unchanged, except for encoding.
    r*   )r/   r0   r1   r3   s    r4   ÚattributeEscapingDoneOutsider8   Z   s-   € õ �$�ÑÔð $Ø�{Š{˜7Ñ#Ô#Ð#Ø€Kr6   ÚwriteúCallable[[bytes], object]úCallable[[bytes], None]c                ó   ‡ — dˆ fd„}|S )aU  
    Decorate a C{write} callable so that all output written is properly quoted
    for inclusion within an XML attribute value.

    If a L{Tag <twisted.web.template.Tag>} C{x} is flattened within the context
    of the contents of another L{Tag <twisted.web.template.Tag>} C{y}, the
    metacharacters (C{<>&"}) delimiting C{x} should be passed through
    unchanged, but the textual content of C{x} should still be quoted, as
    usual.  For example: C{<y><x>&amp;</x></y>}.  That is the default behavior
    of L{_flattenElement} when L{escapeForContent} is passed as the
    C{dataEscaper}.

    However, when a L{Tag <twisted.web.template.Tag>} C{x} is flattened within
    the context of an I{attribute} of another L{Tag <twisted.web.template.Tag>}
    C{y}, then the metacharacters delimiting C{x} should be quoted so that it
    can be parsed from the attribute's value.  In the DOM itself, this is not a
    valid thing to do, but given that renderers and slots may be freely moved
    around in a L{twisted.web.template} template, it is a condition which may
    arise in a document and must be handled in a way which produces valid
    output.  So, for example, you should be able to get C{<y attr="&lt;x /&gt;"
    />}.  This should also be true for other XML/HTML meta-constructs such as
    comments and CDATA, so if you were to serialize a L{comment
    <twisted.web.template.Comment>} in an attribute you should get C{<y
    attr="&lt;-- comment --&gt;" />}.  Therefore in order to capture these
    meta-characters, flattening is done with C{write} callable that is wrapped
    with L{writeWithAttributeEscaping}.

    The final case, and hopefully the much more common one as compared to
    serializing L{Tag <twisted.web.template.Tag>} and arbitrary L{IRenderable}
    objects within an attribute, is to serialize a simple string, and those
    should be passed through for L{writeWithAttributeEscaping} to quote
    without applying a second, redundant level of quoting.

    @param write: A callable which will be invoked with the escaped L{bytes}.

    @return: A callable that writes data with escaping.
    r%   r(   r'   ÚNonec                ó`   •—  ‰t          | ¦  «                             dd¦  «        ¦  «         d S )Nó   "s   &quot;)r5   r2   )r%   r9   s    €r4   Ú_writez*writeWithAttributeEscaping.<locals>._write–   s2   ø€ ØˆÕ˜tÑ$Ô$×,Ò,¨T°9Ñ=Ô=Ñ>Ô>Ð>Ð>Ð>r6   )r%   r(   r'   r=   © )r9   r@   s   ` r4   ÚwriteWithAttributeEscapingrB   m   s)   ø€ ðR?ð ?ð ?ð ?ð ?ð ?ð €Mr6   c                ó‚   — t          | t          ¦  «        r|                      d¦  «        } |                      dd¦  «        S )zÃ
    Escape CDATA for inclusion in a document.

    @param data: The string to escape.

    @return: The quoted form of C{data}. If C{data} is unicode, return a utf-8
        encoded string.
    r*   ó   ]]>s   ]]]]><![CDATA[>r.   r3   s    r4   ÚescapedCDATArE   œ   s<   € õ �$�ÑÔð $Ø�{Š{˜7Ñ#Ô#ˆØ�<Š<˜Ð 2Ñ3Ô3Ð3r6   c                ó°   — t          | t          ¦  «        r|                      d¦  «        } |                      dd¦  «        } | r| dd…         dk    r| dz  } | S )aÜ  
    Within comments the sequence C{-->} can be mistaken as the end of the comment.
    To ensure consistent parsing and valid output the sequence is replaced with C{--&gt;}.
    Furthermore, whitespace is added when a comment ends in a dash. This is done to break
    the connection of the ending C{-} with the closing C{-->}.

    @param data: The string to escape.

    @return: The quoted form of C{data}. If C{data} is unicode, return a utf-8
        encoded string.
    r*   ó   -->s   --&gt;éÿÿÿÿNó   -ó    r.   r3   s    r4   ÚescapedCommentrK   ª   sb   € õ �$�ÑÔð $Ø�{Š{˜7Ñ#Ô#ˆØ�<Š<˜ 	Ñ*Ô*€DØð ��R�S�S”	˜TÒ!Ð!Ø�‰ˆØ€Kr6   Únamer0   ÚslotDataú-Sequence[Optional[Mapping[str, Flattenable]]]ÚdefaultúOptional[Flattenable]ÚFlattenablec                ól   — t          |¦  «        D ]}|�| |v r
||          c S Œ|�|S t          | ¦  «        ‚)zK
    Find the value of the named slot in the given stack of slot data.
    )Úreversedr    )rL   rM   rO   Ú	slotFrames       r4   Ú_getSlotValuerU   ¾   sU   € õ ˜hÑ'Ô'ð !ð !ˆ	ØÐ  T¨YÐ%6Ð%6Ø˜T”?Ð"Ð"Ð"øàÐØˆNÝ˜4Ñ Ô Ð r6   ÚdúDeferred[T]c                ór   ‡ ‡— t          ˆ fd„¦  «        Šd	ˆfd„}d
ˆfd„}‰                      ||¦  «         ‰S )z“
    Create a new L{Deferred} based on C{d} that will fire and fail with C{d}'s
    result or error, but will not modify C{d}'s callback type.
    c                ó,   •— ‰                      ¦   «         S ©N)Úcancel)Ú_rV   s    €r4   ú<lambda>z_fork.<locals>.<lambda>Ô   s   ø€ ¨¯ª©¬€ r6   Úresultr$   r'   c                ó2   •— ‰                      | ¦  «         | S rZ   )Úcallback)r^   Úd2s    €r4   r`   z_fork.<locals>.callbackÖ   s   ø€ Ø
�Š�FÑÔÐØˆr6   Úfailurer   c                ó2   •— ‰                      | ¦  «         | S rZ   )Úerrback)rb   ra   s    €r4   rd   z_fork.<locals>.errbackÚ   s   ø€ Ø
�
Š
�7ÑÔÐØˆr6   )r^   r$   r'   r$   )rb   r   r'   r   )r   ÚaddCallbacks)rV   r`   rd   ra   s   `  @r4   Ú_forkrf   Ï   st   øø€ õ
 Ð3Ð3Ð3Ð3Ñ4Ô4€Bðð ð ð ð ð ðð ð ð ð ð ð ‡N‚N�8˜WÑ%Ô%Ð%Ø€Ir6   ÚrequestúOptional[IRequest]Úrootú)List[Optional[Mapping[str, Flattenable]]]ÚrenderFactoryúOptional[IRenderable]ÚdataEscaperú$Callable[[Union[bytes, str]], bytes]úMGenerator[Union[Generator[Any, Any, Any], Deferred[Flattenable]], None, None]c           
   #  óè  ‡ ‡‡K  — |||fd"ˆ ˆfd„Šd#ˆfd„}t          |t          t          f¦  «        r | ||¦  «        ¦  «         dS t          |t          ¦  «        r*t	          |j        ‰|j        ¦  «        } ‰|¦  «        V — dS t          |t          ¦  «        r5 |d¦  «          |t          |j	        ¦  «        ¦  «          |d¦  «         dS t          |t          ¦  «        r5 |d¦  «          |t          |j	        ¦  «        ¦  «          |d¦  «         dS t          |t          ¦  «        �rì‰                     |j        ¦  «         |j        }|�u|€t!          d|› d�¦  «        ‚|                     d¦  «        }	d|	_        |                     |¦  «        }
 |
‰ |	¦  «        } ‰|¦  «        V — ‰                     ¦   «          dS |j        s ‰|j        ¦  «        V — dS  |d¦  «         t          |j        t          ¦  «        r|j                             d¦  «        }n|j        } ||¦  «         |j                             ¦   «         D ]m\  }}t          |t          ¦  «        r|                     d¦  «        } |d|z   dz   ¦  «          ‰|t2          t5          |¦  «        ¬¦  «        V —  |d¦  «         Œn|j        st7          |¦  «        t8          vr6 |d¦  «          ‰|j        t:          ¦  «        V —  |d|z   dz   ¦  «         dS  |d¦  «         dS t          |t<          t>          t@          f¦  «        r|D ]} ‰|¦  «        V — ŒdS t          |tB          ¦  «        r+d |j"        fz  } ||                     d¦  «        ¦  «         dS t          |tF          ¦  «        r |tI          |¦  «        ¦  «        V — dS tK          |¦  «        rW |tG          j&        tO          tP          tF          tR                   tT          tR          f         |¦  «        ¦  «        ¦  «        V — dS tW          j,        |¦  «        r&|                     ‰ ¦  «        } ‰||¬!¦  «        V — dS t[          |¦  «        ‚)$at  
    Make C{root} slightly more flat by yielding all its immediate contents as
    strings, deferreds or generators that are recursive calls to itself.

    @param request: A request object which will be passed to
        L{IRenderable.render}.

    @param root: An object to be made flatter.  This may be of type C{unicode},
        L{str}, L{slot}, L{Tag <twisted.web.template.Tag>}, L{tuple}, L{list},
        L{types.GeneratorType}, L{Deferred}, or an object that implements
        L{IRenderable}.

    @param write: A callable which will be invoked with each L{bytes} produced
        by flattening C{root}.

    @param slotData: A L{list} of L{dict} mapping L{str} slot names to data
        with which those slots will be replaced.

    @param renderFactory: If not L{None}, an object that provides
        L{IRenderable}.

    @param dataEscaper: A 1-argument callable which takes L{bytes} or
        L{unicode} and returns L{bytes}, quoted as appropriate for the
        rendering context.  This is really only one of two values:
        L{attributeEscapingDoneOutside} or L{escapeForContent}, depending on
        whether the rendering context is within an attribute or not.  See the
        explanation in L{writeWithAttributeEscaping}.

    @return: An iterator that eventually writes L{bytes} to C{write}.
        It can yield other iterators or L{Deferred}s; if it yields another
        iterator, the caller will iterate it; if it yields a L{Deferred},
        the result of that L{Deferred} will be another generator, in which
        case it is iterated.  See L{_flattenTree} for the trampoline that
        consumes said values.
    ÚnewRootrQ   rm   rn   rk   rl   r9   r:   r'   ú@Generator[Union[Flattenable, Deferred[Flattenable]], None, None]c                ó,   •— t          ‰| |‰||¦  «        S rZ   )Ú_flattenElement)rq   rm   rk   r9   rg   rM   s       €€r4   Ú	keepGoingz"_flattenElement.<locals>.keepGoing  s$   ø€ õ Ø�W˜e X¨}¸kñ
ô 
ð 	
r6   r^   úDeferred[Flattenable]c                ó.   •— |                       ‰¦  «        S rZ   )ÚaddCallback)r^   ru   s    €r4   ÚkeepGoingAsyncz'_flattenElement.<locals>.keepGoingAsync  s   ø€ Ø×!Ò! )Ñ,Ô,Ð,r6   s	   <![CDATA[rD   s   <!--rG   Nz$Tag wants to be rendered by method "z)" but is not contained in any IRenderableFr,   ÚasciirJ   s   =")r9   r?   r-   s   </s    />z&#%d;)rk   )
rq   rQ   rm   rn   rk   rl   r9   r:   r'   rr   )r^   rv   r'   rv   ).r/   r(   r0   r   rU   rL   rO   r   rE   r%   r   rK   r   ÚappendrM   ÚrenderÚ
ValueErrorÚcloneÚlookupRenderMethodÚpopÚtagNameÚchildrenr1   Ú
attributesÚitemsr8   rB   r   r   r5   ÚtupleÚlistr   r   Úordinalr   rf   r   ÚfromCoroutiner   r   rQ   Úobjectr"   Ú
providedByr!   )rg   ri   r9   rM   rk   rm   ry   Ú	slotValueÚrendererNameÚ	rootCloneÚrenderMethodr^   r�   ÚkÚvÚelementÚescapedru   s   `  `             @r4   rt   rt   â   sE  øøøè è € ðb =HØ/<Ø+0ð	
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð-ð -ð -ð -ð -ð -õ �$�¥˜Ñ%Ô%ð R$Øˆˆkˆk˜$ÑÔÑ Ô Ð Ð Ð Ý	�D�$Ñ	Ô	ð P$Ý! $¤)¨X°t´|ÑDÔDˆ	Øˆi˜	Ñ"Ô"Ð"Ð"Ð"Ð"Ð"Ý	�D�%Ñ	 Ô	 ð M$ØˆˆlÑÔÐØˆ�l˜4œ9Ñ%Ô%Ñ&Ô&Ð&Øˆˆf‰ŒˆˆˆÝ	�D�'Ñ	"Ô	"ð I$Øˆˆg‰ŒˆØˆ�n˜TœYÑ'Ô'Ñ(Ô(Ð(Øˆˆf‰ŒˆˆˆÝ	�D�#Ñ	Ô	ñ E$Ø�Š˜œÑ&Ô&Ð&Ø”{ˆØÐ#ØÐ$Ý ð?¸<ð ?ð ?ð ?ñô ð ð Ÿ
š
 5Ñ)Ô)ˆIØ#ˆIÔØ(×;Ò;¸LÑIÔIˆLØ!�\ '¨9Ñ5Ô5ˆFØ�)˜FÑ#Ô#Ð#Ð#Ð#Ø�LŠL‰NŒNˆNØˆFàŒ|ð 	Ø�)˜DœMÑ*Ô*Ð*Ð*Ð*ØˆFàˆˆd‰ŒˆÝ�d”l¥CÑ(Ô(ð 	#Ø”l×)Ò)¨'Ñ2Ô2ˆGˆGà”lˆGØˆˆg‰ŒˆØ”O×)Ò)Ñ+Ô+ð 		ð 		‰DˆAˆqÝ˜!�SÑ!Ô!ð &Ø—H’H˜WÑ%Ô%�ØˆE�$˜‘(˜UÑ"Ñ#Ô#Ð#ð �)ØÕ/Õ7QÐRWÑ7XÔ7Xðñ ô ð ð ð ð ˆE�$‰KŒKˆKˆKØŒ=ð 	�L¨Ñ1Ô1½ÐEÐEØˆE�$‰KŒKˆKð �)˜DœMÕ+;Ñ<Ô<Ð<Ð<Ð<ØˆE�%˜'‘/ DÑ(Ñ)Ô)Ð)Ð)Ð)àˆE�&‰MŒMˆMˆMˆMå	�D�5¥$­Ð6Ñ	7Ô	7ð $Øð 	%ð 	%ˆGØ�)˜GÑ$Ô$Ð$Ð$Ð$Ð$ð	%ð 	%å	�D�'Ñ	"Ô	"ð $Ø˜Tœ\˜OÑ+ˆØˆˆg�nŠn˜WÑ%Ô%Ñ&Ô&Ð&Ð&Ð&Ý	�D�(Ñ	#Ô	#ð $Øˆn�U 4™[œ[Ñ)Ô)Ð)Ð)Ð)Ð)Ð)Ý	�TÑ	Ô	ð 
$ØˆnÝÔ"Ý•Y�x­Ô4µf½kÐIÔJÈDÑQÔQñô ñ
ô 
ð 	
ð 	
ð 	
ð 	
ð 	
õ
 
Ô	 Ñ	%Ô	%ð $Ø—’˜WÑ%Ô%ˆØˆi˜¨dÐ3Ñ3Ô3Ð3Ð3Ð3Ð3Ð3å˜dÑ#Ô#Ð#r6   r=   c           	   ƒ  ó€  ‡‡	‡
‡K  — g Š	dŠ
dˆ	ˆ
ˆfd„}dˆ	ˆ
ˆfd„Št          | ||g dt          ¦  «        g}|rý	 t          |d	         ¦  «        }t          |t          ¦  «        r ‰¦   «          |ƒ d{V —†}|                     |¦  «         n¨# t          $ r |                     ¦   «          Y nˆt          $ r|}g }|D ].}|j	        �%|                     |j	        j
        d
         ¦  «         Œ/|                     ¦   «          t          ||t          t          ¦   «         d         ¦  «        ¦  «        ‚d}~ww xY w|°ý ‰¦   «          dS )a‰  
    Make C{root} into an iterable of L{bytes} and L{Deferred} by doing a depth
    first traversal of the tree.

    @param request: A request object which will be passed to
        L{IRenderable.render}.

    @param root: An object to be made flatter.  This may be of type C{unicode},
        L{bytes}, L{slot}, L{Tag <twisted.web.template.Tag>}, L{tuple},
        L{list}, L{types.GeneratorType}, L{Deferred}, or something providing
        L{IRenderable}.

    @param write: A callable which will be invoked with each L{bytes} produced
        by flattening C{root}.

    @return: A C{Deferred}-returning coroutine that resolves to C{None}.
    r   Úbsr(   r'   r=   c                ó„   •— ‰                      | ¦  «         ‰t          | ¦  «        z  Š‰t          k    r ‰¦   «          d S d S rZ   )r{   ÚlenÚBUFFER_SIZE)r”   ÚbufÚbufSizeÚflushBuffers    €€€r4   ÚbufferedWritez#_flattenTree.<locals>.bufferedWriteŒ  sD   ø€ à�
Š
�2‰ŒˆØ•3�r‘7”7ÑˆØ•kÒ!Ð!ØˆK‰MŒMˆMˆMˆMð "Ð!r6   c                 ób   •— ‰dk    r' ‰d                      ‰ ¦  «        ¦  «         ‰ d d …= dŠd S d S )Nr   r6   )Újoin)r˜   r™   r9   s   €€€r4   rš   z!_flattenTree.<locals>.flushBuffer˜  sA   ø€ à�QŠ;ˆ;ØˆE�#—(’(˜3‘-”-Ñ Ô Ð Ø�A�A�A�ØˆGˆGˆGð ˆ;r6   NrH   ri   é   )r”   r(   r'   r=   )r'   r=   )rt   r5   Únextr/   r   r{   ÚStopIterationr€   Ú	ExceptionÚgi_frameÚf_localsr   r   r   )rg   ri   r9   r›   Ústackr‘   ÚeÚrootsÚ	generatorr˜   r™   rš   s     `      @@@r4   Ú_flattenTreer¨   s  s¹  øøøøè è € ð( €CØ€Gðð ð ð ð ð ð ð ðð ð ð ð ð ð ð õ 	˜  }°b¸$Õ@PÑQÔQð-€Eð ð "ð	"Ý˜5 œ9‘o”oˆGÝ˜'¥8Ñ,Ô,ð (ð �‘”�Ø '˜-˜-˜-˜-˜-˜-�ð �LŠL˜Ñ!Ô!Ð!Ð!øõ ð 	ð 	ð 	Ø�IŠI‰KŒKˆKˆKˆKÝð 	Fð 	Fð 	FØˆEØ"ð Fð F�	ØÔ%Ð1Ø—L’L Ô!3Ô!<¸VÔ!DÑEÔEÐEøØ�IŠI‰KŒKˆKÝ   E­:µh±j´jÀ´mÑ+DÔ+DÑEÔEÐEøøøøð	Føøøð ð "ð* €K�M„M€M€M€Ms   ¸<B
 Â
D/Â*	D/Â3A7D*Ä*D/úDeferred[None]c                ó>   — t          t          | ||¦  «        ¦  «        S )a  
    Incrementally write out a string representation of C{root} using C{write}.

    In order to create a string representation, C{root} will be decomposed into
    simpler objects which will themselves be decomposed and so on until strings
    or objects which can easily be converted to strings are encountered.

    @param request: A request object which will be passed to the C{render}
        method of any L{IRenderable} provider which is encountered.

    @param root: An object to be made flatter.  This may be of type L{str},
        L{bytes}, L{slot}, L{Tag <twisted.web.template.Tag>}, L{tuple},
        L{list}, L{types.GeneratorType}, L{Deferred}, or something that
        provides L{IRenderable}.

    @param write: A callable which will be invoked with each L{bytes} produced
        by flattening C{root}.

    @return: A L{Deferred} which will be called back with C{None} when C{root}
        has been completely flattened into C{write} or which will be errbacked
        if an unexpected exception occurs.
    )r   r¨   )rg   ri   r9   s      r4   Úflattenr«   »  s   € õ2 �, w°°eÑ<Ô<Ñ=Ô=Ð=r6   úDeferred[bytes]c                ó¼   ‡— t          ¦   «         Št          | |‰j        ¦  «        }|                     ˆfd„¦  «         t	          t
          t                   |¦  «        S )aË  
    Collate a string representation of C{root} into a single string.

    This is basically gluing L{flatten} to an L{io.BytesIO} and returning
    the results. See L{flatten} for the exact meanings of C{request} and
    C{root}.

    @return: A L{Deferred} which will be called back with a single UTF-8 encoded
        string as its result when C{root} has been completely flattened or which
        will be errbacked if an unexpected exception occurs.
    c                ó,   •— ‰                      ¦   «         S rZ   )Úgetvalue)r\   Úios    €r4   r]   zflattenString.<locals>.<lambda>å  s   ø€ ˜BŸKšK™MœM€ r6   )r   r«   r9   rx   r   r   r(   )rg   ri   rV   r°   s      @r4   ÚflattenStringr±   ×  sQ   ø€ õ 
‰Œ€BÝ�˜˜rœxÑ(Ô(€AØ‡M‚MÐ)Ð)Ð)Ð)Ñ*Ô*Ð*Ý•�” Ñ#Ô#Ð#r6   )r%   r&   r'   r(   )r9   r:   r'   r;   rZ   )rL   r0   rM   rN   rO   rP   r'   rQ   )rV   rW   r'   rW   )rg   rh   ri   rQ   r9   r:   rM   rj   rk   rl   rm   rn   r'   ro   )rg   rh   ri   rQ   r9   r:   r'   r=   )rg   rh   ri   rQ   r9   r:   r'   r©   )rg   rh   ri   rQ   r'   r¬   )AÚ__doc__Ú
__future__r   Úinspectr   r°   r   Úsysr   Ú	tracebackr   Útypesr   Útypingr	   r
   r   r   r   r   r   r   r   r   r   r   Útwisted.internet.deferr   r   Útwisted.python.compatr   Útwisted.python.failurer   Útwisted.web._stanr   r   r   r   r   r   Útwisted.web.errorr   r    r!   Útwisted.web.iwebr"   r#   r$   ÚFlattenableRecursiver(   r0   r‰   rQ   r—   r5   r8   rB   rE   rK   rU   rf   rt   r¨   r«   r±   rA   r6   r4   ú<module>rÀ      s;  ðð
ð ð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø  Ð  Ð  Ð  Ð  Ð  Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð <Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø .Ð .Ð .Ð .Ð .Ð .Ø *Ð *Ð *Ð *Ð *Ð *Ø NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NÐ NØ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KØ 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2Ð 2à€GˆC�L„L€àÐ ðð Ø	ØØØ	ØØØ	Ð
 Ð
#Ô$ØÐ	ÔØÐ" D¨$Ð.Ô/ØØÐ!Ô"ØˆhÐ+Ô,¨fÐ6JÐJÔKØðô€ðð €ðð ð ð ð&ð ð ð ð&,ð ,ð ,ð ,ð^4ð 4ð 4ð 4ðð ð ð ð. &*ð!ð !ð !ð !ð !ð"ð ð ð ð&N$ð N$ð N$ð N$ðbEð Eð Eð EðP>ð >ð >ð >ð8$ð $ð $ð $ð $ð $r6   