
    ~lDhO                       d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlmZ d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlZd dlZd d	lmZ d d
lmZ d dlmZ d dlm Z m!Z!m"Z" d dl#m$Z$ d dl%m&Z&m'Z'm(Z(  G d d          Z) G d de)          Z* G d de)          Z+ G d de)          Z, G d de)          Z-e	j.        e/e0e1f         Z2e	j3        e2         Z4e	j5        e2         Z6e	j.        e6e4f         Z7 G d de)          Z8 G d de9          Z: G d de9          Z; ej<        d          Z= G d  d!e)          Z>dS )"    )annotationsN)datetime)format_datetime
formatdate)partial)
guess_type)	token_hex)quote)collapse_excgroups)BackgroundTask)iterate_in_threadpool)URLHeadersMutableHeaders)ClientDisconnect)ReceiveScopeSendc                      e Zd ZdZdZ	 	 	 	 	 d1d2dZd3dZd4d5dZed6d            Z		 	 	 	 	 	 	 	 d7d8d(Z
	 	 	 	 	 d9d:d)Zd;d0ZdS )<ResponseNutf-8   content
typing.Anystatus_codeintheaderstyping.Mapping[str, str] | None
media_type
str | None
backgroundBackgroundTask | NonereturnNonec                    || _         ||| _        || _        |                     |          | _        |                     |           d S N)r   r   r!   renderbodyinit_headersselfr   r   r   r   r!   s         T/users/jtampere/www/backend/venv/lib/python3.11/site-packages/starlette/responses.py__init__zResponse.__init__!   sM     '!(DO$KK((	'"""""    bytes | memoryviewc                z    |dS t          |t          t          f          r|S |                    | j                  S )Nr.   )
isinstancebytes
memoryviewencodecharsetr+   r   s     r,   r'   zResponse.render0   s<    ?3gz233 	N~~dl+++r.   c                B   |g }d}d}n2d |                                 D             }d |D             }d|v}d|v}t          | dd           }|\|rZ| j        dk     sO| j        dv sFt          t	          |                    }|                    d|                    d	          f           | j        }|d|rb|                    d
          r#d|	                                vr|d| j
        z   z  }|                    d|                    d	          f           || _        d S )NTc                    g | ]A\  }}|                                                     d           |                    d           fBS )latin-1)lowerr4   ).0kvs      r,   
<listcomp>z)Response.init_headers.<locals>.<listcomp>=   sF    jjjRVRSUVAGGII,,Y77)9L9LMjjjr.   c                    g | ]
}|d          S )r    )r;   hs     r,   r>   z)Response.init_headers.<locals>.<listcomp>>   s    ...QAaD...r.   s   content-lengths   content-typer(   r   )   i0  r9   ztext/zcharset=z
; charset=)itemsgetattrr   strlenappendr4   r   
startswithr:   r5   raw_headers)	r+   r   rI   populate_content_lengthpopulate_content_typekeysr(   content_lengthcontent_types	            r,   r)   zResponse.init_headers7   s\   ?57K&*#$(!!jjZaZgZgZiZijjjK..+...D&7t&C#$34$?!tVT**' %++t/?:/M/M T^^N 1>3H3H3S3STUUU#(=#&&w// <JlFXFXFZFZ4Z4Zt| ;;1D1DY1O1OPQQQ&r.   r   c                d    t          | d          st          | j                  | _        | j        S )N_headers)raw)hasattrr   rI   rP   )r+   s    r,   r   zResponse.headersS   s2    tZ(( 	A*t/?@@@DM}r.    /FlaxkeyrE   valuemax_age
int | Noneexpiresdatetime | str | int | Nonepathdomainsecureboolhttponlysamesite.typing.Literal['lax', 'strict', 'none'] | Nonec
                P   t           j                                        }
||
|<   |||
|         d<   |;t          |t                    rt          |d          |
|         d<   n||
|         d<   |||
|         d<   |||
|         d<   |rd|
|         d<   |rd|
|         d<   |	+|	                                d	v s
J d
            |	|
|         d<   |
                    d                                          }| j	        
                    d|                    d          f           d S )Nzmax-ageTusegmtrZ   r\   r]   r^   r`   )strictrU   nonez1samesite must be either 'strict', 'lax' or 'none'ra   rS   )headers
   set-cookier9   )httpcookiesSimpleCookier1   r   r   r:   outputstriprI   rG   r4   )r+   rV   rW   rX   rZ   r\   r]   r^   r`   ra   cookie
cookie_vals               r,   
set_cookiezResponse.set_cookieY   sg    04|/H/H/J/Js%,F3K	"'8,, 1)8)N)N)NsI&&)0sI&"&F3K$*F3K! 	)$(F3K! 	+&*F3K
#>>## (    C	  
 '/F3K
#]]"]--3355

0A0A)0L0L MNNNNNr.   c           
     @    |                      |dd|||||           d S )Nr   )rX   rZ   r\   r]   r^   r`   ra   )rp   )r+   rV   r\   r]   r^   r`   ra   s          r,   delete_cookiezResponse.delete_cookie   sA     	 	 		
 		
 		
 		
 		
r.   scoper   receiver   sendr   c                   K   |d         dk    rdnd} ||dz   | j         | j        d           d {V   ||dz   | j        d           d {V  | j        |                                  d {V  d S d S )	Ntype	websocketz
websocket.rS   http.response.startrw   statusr   http.response.body)rw   r(   )r   rI   r(   r!   )r+   rs   rt   ru   prefixs        r,   __call__zResponse.__call__   s      !&v+!=!=2d!66*+ 
 
 	
 	
 	
 	
 	
 	
 	
 dF%9949MMNNNNNNNNN?&//########### '&r.   )Nr   NNNr   r   r   r   r   r   r   r    r!   r"   r#   r$   )r   r   r#   r/   r&   )r   r   r#   r$   )r#   r   )rS   NNrT   NFFrU   )rV   rE   rW   rE   rX   rY   rZ   r[   r\   r    r]   r    r^   r_   r`   r_   ra   rb   r#   r$   )rT   NFFrU   )rV   rE   r\   rE   r]   r    r^   r_   r`   r_   ra   rb   r#   r$   rs   r   rt   r   ru   r   r#   r$   )__name__
__module____qualname__r   r5   r-   r'   r)   propertyr   rp   rr   r~   r@   r.   r,   r   r      s       JG #37!%,0# # # # #, , , ,' ' ' ' '8    X "/3!CH%O %O %O %O %OT !CH
 
 
 
 
($ $ $ $ $ $r.   r   c                      e Zd ZdZdS )HTMLResponsez	text/htmlNr   r   r   r   r@   r.   r,   r   r      s        JJJr.   r   c                      e Zd ZdZdS )PlainTextResponse
text/plainNr   r@   r.   r,   r   r      s        JJJr.   r   c                  6     e Zd ZdZ	 	 	 	 dd fdZddZ xZS )JSONResponsezapplication/jsonr   Nr   r   r   r   r   r   r   r    r!   r"   r#   r$   c                R    t                                          |||||           d S r&   )superr-   )r+   r   r   r   r   r!   	__class__s         r,   r-   zJSONResponse.__init__   s+     	+w
JOOOOOr.   r2   c                Z    t          j        |ddd d                              d          S )NF),:)ensure_ascii	allow_nanindent
separatorsr   )jsondumpsr4   r6   s     r,   r'   zJSONResponse.render   s7    z!
 
 
 &//	r.   r   NNNr   )r   r   r#   r2   )r   r   r   r   r-   r'   __classcell__r   s   @r,   r   r      sp        #J
 37!%,0P P P P P P P       r.   r   c                  (     e Zd Z	 	 	 dd fdZ xZS )RedirectResponse3  Nurl	str | URLr   r   r   r   r!   r"   r#   r$   c                    t                                          d|||           t          t          |          d          | j        d<   d S )Nr.   )r   r   r   r!   z:/%#?=@[]!$&'()*+,;)safelocation)r   r-   r
   rE   r   )r+   r   r   r   r!   r   s        r,   r-   zRedirectResponse.__init__   sM     	+w[efff#(S8M#N#N#NZ   r.   )r   NN)
r   r   r   r   r   r   r!   r"   r#   r$   )r   r   r   r-   r   r   s   @r,   r   r      sX         37,0O O O O O O O O O O Or.   r   c                  D    e Zd ZU ded<   	 	 	 	 dddZddZddZddZdS ) StreamingResponseAsyncContentStreambody_iteratorr   Nr   ContentStreamr   r   r   r   r   r    r!   r"   r#   r$   c                    t          |t          j                  r|| _        nt	          |          | _        || _        || j        n|| _        || _        |                     |           d S r&   )	r1   typingAsyncIterabler   r   r   r   r!   r)   r*   s         r,   r-   zStreamingResponse.__init__   sp     gv344 	@!(D!6w!?!?D&-7-?$//Z$'"""""r.   rt   r   c                F   K   	  |             d {V }|d         dk    rd S )NTrw   zhttp.disconnectr@   )r+   rt   messages      r,   listen_for_disconnectz'StreamingResponse.listen_for_disconnect   s<      	#GIIooooooGv"333	r.   ru   r   c                (  K    |d| j         | j        d           d {V  | j        2 3 d {V }t          |t          t
          f          s|                    | j                  } |d|dd           d {V  S6  |dddd           d {V  d S )Nry   rz   r|   Trw   r(   	more_bodyr.   F)r   rI   r   r1   r2   r3   r4   r5   )r+   ru   chunks      r,   stream_responsez!StreamingResponse.stream_response   s     d-*+ 
 
 	
 	
 	
 	
 	
 	
 	
  - 	Y 	Y 	Y 	Y 	Y 	Y 	Y%eeZ%899 3T\22$ 4eRVWWXXXXXXXXXX .
 d0#ERRSSSSSSSSSSSs   A<rs   r   c           	       K   t          t          t          |                    di                               dd                              d                              }|dk    r9	 |                     |           d {V  n# t          $ r t                      w xY wt                      5  t          j
                    4 d {V dfd
}                    |t          | j        |                      |t          | j        |                     d {V  d d d           d {V  n# 1 d {V swxY w Y   d d d            n# 1 swxY w Y   | j        |                                  d {V  d S d S )Nasgispec_versionz2.0.)      func+typing.Callable[[], typing.Awaitable[None]]r#   r$   c                ^   K    |              d {V  j                                          d S r&   )cancel_scopecancel)r   
task_groups    r,   wrapz(StreamingResponse.__call__.<locals>.wrap	  s9      "dff"/6688888r.   )r   r   r#   r$   )tuplemapr   getsplitr   OSErrorr   r   anyiocreate_task_group
start_soonr   r   r!   )r+   rs   rt   ru   r   r   r   s         @r,   r~   zStreamingResponse.__call__   s     Seii&;&;&?&?PU&V&V&\&\]`&a&abbcc6!!)**40000000000 ) ) )&((() $%% M M 244 M M M M M M M
9 9 9 9 9 9 ))$8Ld0S0STTT$wt'A7KKLLLLLLLLLM M M M M M M M M M M M M M M M M M M M M M M M M M MM M M M M M M M M M M M M M M ?&//########### '&sC   (B B.EAD.E.
D8	8E;D8	<EEEr   )r   r   r   r   r   r   r   r    r!   r"   r#   r$   )rt   r   r#   r$   )ru   r   r#   r$   r   )r   r   r   __annotations__r-   r   r   r~   r@   r.   r,   r   r      s         %%%%
 37!%,0# # # # #"   T T T T$ $ $ $ $ $r.   r   c                      e Zd Zdd	dZdS )
MalformedRangeHeaderMalformed range header.r   rE   r#   r$   c                    || _         d S r&   )r   r6   s     r,   r-   zMalformedRangeHeader.__init__  s    r.   N)r   )r   rE   r#   r$   r   r   r   r-   r@   r.   r,   r   r     s-              r.   r   c                      e Zd ZddZdS )RangeNotSatisfiablemax_sizer   r#   r$   c                    || _         d S r&   )r   )r+   r   s     r,   r-   zRangeNotSatisfiable.__init__  s     r.   N)r   r   r#   r$   r   r@   r.   r,   r   r     s(        ! ! ! ! ! !r.   r   z(\d*)-(\d*)c                  |    e Zd ZdZ	 	 	 	 	 	 	 	 d5d6dZd7dZd8d Zd9d#Zd:d'Zd;d*Z	d<d,Z
ed=d.            Zd>d4ZdS )?FileResponsei   r   N
attachmentr\   str | os.PathLike[str]r   r   r   r   r   r    r!   r"   filenamestat_resultos.stat_result | Nonemethodcontent_disposition_typerE   r#   r$   c
                   || _         || _        || _        |t          j        dt
                     |t          |p|          d         pd}|| _        || _        | 	                    |           | j
                            dd           | j        Ot          | j                  }
|
| j        k    r|	 d|
 }n|	 d| j         d}| j
                            d	|           || _        ||                     |           d S d S )
Nz;The 'method' parameter is not used, and it will be removed.r   r   zaccept-rangesr2   z; filename*=utf-8''z; filename=""zcontent-disposition)r\   r   r   warningswarnDeprecationWarningr   r   r!   r)   r   
setdefaultr
   r   set_stat_headers)r+   r\   r   r   r   r!   r   r   r   r   content_disposition_filenamecontent_dispositions               r,   r-   zFileResponse.__init__$  s8    	& MM"   #H$455a8HLJ$$'"""999=$+0+?+?(+t}<<)A&t&tVr&t&t##)A&_&_t}&_&_&_#L##$9;NOOO&"!!+..... #"r.   os.stat_resultc                   t          |j                  }t          |j        d          }t          |j                  dz   t          |j                  z   }dt	          j        |                                d                                           d}| j        	                    d|           | j        	                    d|           | j        	                    d	|           d S )
NTrd   -r   F)usedforsecuritycontent-lengthlast-modifiedetag)
rE   st_sizer   st_mtimehashlibmd5r4   	hexdigestr   r   )r+   r   rM   last_modified	etag_baser   s         r,   r   zFileResponse.set_stat_headersI  s    [011";#7EEE,--3c+:M6N6NN	X7;y//115IIISSUUXXX 0.AAA???-----r.   rs   r   rt   r   ru   r   c                  K   |d                                          dk    }| j        	 t          j                            t
          j        | j                   d {V }|                     |           |j	        }t          j
        |          st          d| j         d          n-# t          $ r t          d| j         d          w xY w| j        }t          |          }|                    d          }|                    d          }	||	3|                     |	          s|                     ||           d {V  n	 |                     ||j                  }
n~# t&          $ r1} t)          |j        d	
          |||           d {V cY d }~S d }~wt,          $ r8}t)          ddd|j         i          } ||||           d {V cY d }~S d }~ww xY wt1          |
          dk    r0|
d         \  }}|                     ||||j        |           d {V  n#|                     ||
|j        |           d {V  | j        |                                  d {V  d S d S )Nr   HEADzFile at path z is not a file.z does not exist.)rs   rangezif-rangei  )r   i  zContent-Rangez*/)r   r      r   )upperr   r   	to_threadrun_syncosstatr\   r   st_modeS_ISREGRuntimeErrorFileNotFoundErrorr   r   _should_use_range_handle_simple_parse_range_headerr   r   r   r   r   r   rF   _handle_single_range_handle_multiple_rangesr!   )r+   rs   rt   ru   send_header_onlyr   moder   
http_rangehttp_if_rangerangesexcresponsestartends                  r,   r~   zFileResponse.__call__S  s(     !&x!6!6!8!8F!B#S$)O$<$<RWdi$P$PPPPPPP%%k222 #*|D)) S&'Qty'Q'Q'QRRRS	 % P P P"#N49#N#N#NOOOP *K&&&[[))
J//-";DDZDZ[hDiDi";%%d,<==========<11*k>QRR' c c cL.s{LLLUT[]abbbbbbbbbbbbbb& < < <,Xk]`]iXkXkFlmmm%XeWd;;;;;;;;;;;;;;< 6{{a#AY
s//eS+BUWghhhhhhhhhh224ATVfggggggggg?&//########### '&s<   A
B' '#C
E" "
G,&FGG%-GGGr  r_   c                  K    |d| j         | j        d           d {V  |r |dddd           d {V  d S t          j        | j        d           d {V 4 d {V }d	}|rO|                    | j                   d {V }t          |          | j        k    } |d||d           d {V  |O	 d d d           d {V  d S # 1 d {V swxY w Y   d S )
Nry   rz   r|   r.   Fr   rbr  T)r   rI   r   	open_filer\   read
chunk_sizerF   )r+   ru   r  filer   r   s         r,   r  zFileResponse._handle_simplez  s     d1T=MZ^Zjkklllllllll 	f$ 4cPUVVWWWWWWWWWWW"_TYTBBBBBBBBB f f f f f f fd 	 f"&))DO"<"<<<<<<<E #E

do =I$(<eZcddeeeeeeeee   f ff f f f f f f f f f f f f f f f f f f f f f f f f f f f f fs   "AC


CCr  r  	file_sizec                  K   d| d|dz
   d| | j         d<   t          ||z
            | j         d<    |dd| j        d	           d {V  |r |d
ddd           d {V  d S t          j        | j        d           d {V 4 d {V }|                    |           d {V  d}|rx|                    t          | j	        ||z
                       d {V }|t          |          z  }t          |          | j	        k    o||k     } |d
||d           d {V  |x	 d d d           d {V  d S # 1 d {V swxY w Y   d S )Nzbytes r   r   rT   content-ranger   ry      rz   r|   r.   Fr   r  r  T)r   rE   rI   r   r  r\   seekr  minr  rF   )	r+   ru   r  r  r  r  r  r   r   s	            r,   r  z!FileResponse._handle_single_range  s      )O(N(Nq(N(N9(N(N_%),S5[)9)9%&d1STM]^^_________ 
	f$ 4cPUVVWWWWWWWWWWW"_TYTBBBBBBBBB f f f f f f fdii&&&&&&&&& 	 f"&))Cu,M,M"N"NNNNNNNESZZ'E #E

do = M%#+I$(<eZcddeeeeeeeee	   f ff f f f f f f f f f f f f f f f f f f f f f f f f f f f f fs   BD99
EEr	  list[tuple[int, int]]c           	       K   t          d          }|                     |||| j        d                   \  }}d| | j        d<   t          |          | j        d<    |dd| j        d           d {V  |r |d	d
dd           d {V  d S t          j        | j        d           d {V 4 d {V }|D ]\  }	}
 |d	 ||	|
          dd           d {V  |                    |	           d {V  |	|
k     r^|	                    t          | j        |
|	z
                       d {V }|	t          |          z  }	 |d	|dd           d {V  |	|
k     ^ |d	ddd           d {V   |d	d| d                    d          dd           d {V  d d d           d {V  d S # 1 d {V swxY w Y   d S )N   zcontent-typezmultipart/byteranges; boundary=r  r   ry   r  rz   r|   r.   Fr   r  r  T   
z
--z--
r9   )r	   generate_multipartr   rE   rI   r   r  r\   r  r  r  r  rF   r4   )r+   ru   r	  r  r  boundaryrM   header_generatorr  r  r  r   s               r,   r  z$FileResponse._handle_multiple_ranges  sG      R==+/+B+BHin)E,
 ,
(( )U((T(T_%),^)<)<%&d1STM]^^_________ 	$ 4cPUVVWWWWWWWWWWW"_TYTBBBBBBBBB       d"( a aJE3$(<FVFVW\^aFbFbquvvwwwwwwwww))E*********#++&*iiDOS5[0Q0Q&R&R R R R R R RU+"d,@%^b#c#cddddddddd  #++ $(<eZ^__``````````d 4 5x 5 5 5 < <Y G G%*                                      s   6C(F11
F;>F;r  c                F    || j         d         k    p|| j         d         k    S )Nr   r   )r   )r+   r  s     r,   r   zFileResponse._should_use_range  s(    _ ==fRVR^_eRfAffr.   r  c                z   g }	 |                      dd          \  }}n# t          $ r t                      w xY w|                                                                }|dk    rt          d          fdt
                              |          D             }t          |          dk    rt          d          t          fd|D                       rt                    t          d	 |D                       rt          d
          t          |          dk    r|S g }|D ]\  }}t          t          |                    D ]X}||         \  }	}
||
k    r||	k     r|                    |||f            n<t          ||	          t          ||
          f||<    n|                    ||f           |S )N=r   r2   zOnly support bytes rangec                   g | ]}|d k    |d         rt          |d                   nt          |d                   z
  |d         r9|d         r1t          |d                   k     rt          |d                   dz   nfS ))rS   rS   r   r   )r   )r;   _r  s     r,   r>   z4FileResponse._parse_range_header.<locals>.<listcomp>  s     
 
 

 H}}	 qT<AaD			y3qt99'<!"1W!A$W3qt99y3H3HAaD		Ai
 }}r.   r   z%Range header: range must be requestedc              3  @   K   | ]\  }}d |cxk    ok     nc  V  dS )r   Nr@   )r;   r  r&  r  s      r,   	<genexpr>z3FileResponse._parse_range_header.<locals>.<genexpr>  sF      CCqA********+CCCCCCr.   c              3  (   K   | ]\  }}||k    V  d S r&   r@   )r;   r  r  s      r,   r(  z3FileResponse._parse_range_header.<locals>.<genexpr>  s*      44zucus{444444r.   z)Range header: start must be less than end)r   
ValueErrorr   rm   r:   _RANGE_PATTERNfindallrF   anyr   r   insertr  maxrG   )r  r  r	  unitsrange_resultr  r  pp_startp_ends    `         r,   r  z FileResponse._parse_range_header  s   (*	)&,,S!44ME66 	) 	) 	)&(((	) ##%%G&'ABBB
 
 
 

 $++F33
 
 
 v;;!&'NOOOCCCCFCCCCC 	1%i00044V44444 	T&'RSSSv;;!M )+  	, 	,JE33v;;'' , ,!'5==7]]MM!eS\222E!$UG!4!4c#uoo FF1IEucl+++s    8 typing.Sequence[tuple[int, int]]r   r   rN   .tuple[int, typing.Callable[[int, int], bytes]]c                    t                    }d|z   t                    z   t          t                              z   t          fd|D                       d|z   z   }|fdfS )a  
        Multipart response headers generator.

        ```
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}\n
        Content-Type: {content_type}\n
        Content-Range: bytes {start}-{end-1}/{max_size}\n
        \n
        ..........content...........\n
        --{boundary}--\n
        ```
        ,   c              3     K   | ]L\  }}t          t          |                    t          t          |d z
                      z   z   ||z
  z   V  MdS )r   N)rF   rE   )r;   r  r  static_header_part_lens      r,   r(  z2FileResponse.generate_multipart.<locals>.<genexpr>  sr       
 
 s U__s3sQw<<0003IIU{
 
 
 
 
 
r.      c                T    d d d|  d|dz
   d d                     d          S )	Nz--z
Content-Type: z
Content-Range: bytes r   r   rT   z

r9   )r4   )r  r  r   rN   r   s     r,   <lambda>z1FileResponse.generate_multipart.<locals>.<lambda>  sL    tXtt|ttTYtt\_bc\cttfntttfY r.   )rF   rE   sum)r+   r	  r   r   rN   boundary_lenrM   r;  s     ```  @r,   r  zFileResponse.generate_multipart  s    0 8}}!#l!2S5F5F!FSQY]]I[I[![ 
 
 
 
 %
 
 
 
 

 
            
 	
r.   )r   NNNNNNr   )r\   r   r   r   r   r   r   r    r!   r"   r   r    r   r   r   r    r   rE   r#   r$   )r   r   r#   r$   r   )ru   r   r  r_   r#   r$   )ru   r   r  r   r  r   r  r   r  r_   r#   r$   )
ru   r   r	  r  r  r   r  r_   r#   r$   )r  rE   r#   r_   )r  rE   r  r   r#   r  )
r	  r6  r   rE   r   r   rN   rE   r#   r7  )r   r   r   r  r-   r   r~   r  r  r  r   staticmethodr  r  r@   r.   r,   r   r   !  s       J
 37!%,0#-1!(4#/ #/ #/ #/ #/J. . . .%$ %$ %$ %$N
f 
f 
f 
ff f f f$! ! ! !Fg g g g 1 1 1 \1f&
 &
 &
 &
 &
 &
r.   r   )?
__future__r   r   http.cookiesri   r   r   rer   r   r   r   email.utilsr   r   	functoolsr   	mimetypesr   secretsr	   urllib.parser
   r   anyio.to_threadstarlette._utilsr   starlette.backgroundr   starlette.concurrencyr   starlette.datastructuresr   r   r   starlette.requestsr   starlette.typesr   r   r   r   r   r   r   r   UnionrE   r2   r3   ContentIterableSyncContentStreamr   r   r   r   	Exceptionr   r   compiler+  r   r@   r.   r,   <module>rW     sa   " " " " " "       				 				          3 3 3 3 3 3 3 3                                    / / / / / / / / / / / / 7 7 7 7 7 7 A A A A A A A A A A / / / / / / 0 0 0 0 0 0 0 0 0 0C$ C$ C$ C$ C$ C$ C$ C$L    8              8   .	O 	O 	O 	O 	Ox 	O 	O 	O ,sE:-
.OG, )'2 /1BBC=$ =$ =$ =$ =$ =$ =$ =$@    9   
! ! ! ! !) ! ! !
 N++w
 w
 w
 w
 w
8 w
 w
 w
 w
 w
r.   