
    AHjg              #      \   U d dl mZ g d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
 d dlmZ d dlmZ d dlmZmZmZmZmZmZmZmZ d d	lmZmZmZmZmZmZ d
dlm Z m!Z!m"Z"m#Z# d
dl$m%Z%m&Z& d
dl'm(Z( ddl)m*Z* ddl+m,Z,m-Z- ddl.m/Z/ ddl0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6 ddl7m8Z8 er d
dl$m9Z9 ddl)m:Z: ddl.m;Z; ddl0m<Z<m=Z= ddl>m?Z? ed   Z@ed   ZA eBd      ZCe G d d             ZD eD       ZEdeFd<   	 	 	 	 d5d ZGd6d!ZHd7d8d#ZId9d$ZJ eKd%      ZLd:d&ZMd:d'ZN	 d;	 	 	 	 	 	 	 d<d(ZOd=d>d)ZPd=d?d*ZQd@d+ZRd;dAd,ZSdBd-ZTdCd.ZUdDd/ZVg dddg g ddeEd0d1g ddg dd2ddddddd0d"ddddd ddddd3"	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dEd4ZWy)F    )annotations)HttpVersionLiteralset_curl_optionsNOT_SETN)Counter)Callable)BytesIO)dumps)TYPE_CHECKINGAnyFinalLiteralOptionalUnioncastfinal)ParseResult	parse_qslquote	urlencodeurljoinurlparse   )
CurlFollowCurlHttpVersionCurlOptCurlSslVersion)CURL_WRITEFUNC_ERRORCurlMime)CurlCffiWarning   )Cookies)ImpersonateError
InvalidURL)Headers)TLS_CIPHER_NAME_MAPTLS_EC_CURVES_MAPTLS_VERSION_MAPExtraFingerprintsnormalize_browser_typetoggle_extension)Request)Curl)CookieTypes)HeaderTypes)BrowserTypeLiteralExtraFpDict)	ProxySpec)	GETPOSTPUTDELETEOPTIONSHEADTRACEPATCHQUERY)v1v2v2tlsv2_prior_knowledgev3v3onlyz!#$%&'()*+,/:;=?@[]~c                  $    e Zd ZdZdZddZddZy)
NotSetTypez@
    Unique single initialized type distinct from ``None``.
     c                     yNr   rD   selfs    P/root/tools/cai/cai_env/lib/python3.12/site-packages/curl_cffi/requests/utils.py__repr__zNotSetType.__repr__:           c                     yrF   rD   rG   s    rI   
__reduce__zNotSetType.__reduce__=   rK   rL   N)returnstr)rO   zLiteral['NOT_SET'])__name__
__module____qualname____doc__	__slots__rJ   rN   rD   rL   rI   rC   rC   2   s     IrL   rC   zFinal[NotSetType]r   c                   | dk(  rt         j                  S | dk(  rt         j                  S | dk(  rt         j                  S | dk(  rt         j                  S | dk(  rt         j
                  S | dk(  rt         j                  S | S )Nr<   r@   rA   r=   r>   r?   )r   V1_1V3V3ONLYV2_0V2TLSV2_PRIOR_KNOWLEDGE)versions    rI   normalize_http_versionr^   E   s     $###	D!!!	H	%%%	D###	G	$$$	(	(111NrL   c                ^    t        |       }t        |j                  xr |j                        S )z,Check if the provided url is an absolute url)r   boolschemehostname)url
parsed_urls     rI   is_absolute_urlre   X   s'    #J
!!9j&9&9::rL    c                Z   dj                  t        t        |      z
        }t        |       }t	        |j
                  d      }t        |d|      }t        |j                  |j                  t        |j                  |      |j                  ||j                        j                         S )Nrf   Tkeep_blank_values)doseqsaferk   )join
SAFE_CHARSsetr   r   queryr   r   ra   netlocr   pathparamsfragmentgeturl)rc   	quote_strrk   rd   parsed_get_argsencoded_get_argss         rI   quote_path_and_paramsry   ^   s    77:I./D#J
 0 0DIO 4HjooD) fhrL   c                   t        |       }t        |j                  d      }t        d |D              }t	        |t
              rt        |j                               }t        d |D              }|D ]~  \  }}t	        |t        t
        z        rt        |      }|j                  |      dk(  r0|j                  |      dk(  r|D cg c]  }|d   |k7  r|n||f }}l|j                  ||f        t        |d      }	t        |j                  |j                  |j                   |j"                  |	|j$                        j'                         }
|
S c c}w )a  Add URL query params to provided URL being aware of existing.

    Args:
        url: string of target URL
        params: dict containing requested params to be added

    Returns:
        string with updated URL

    >> url = 'http://stackoverflow.com/test?answers=true'
    >> new_params = {'answers': False, 'data': ['some','values']}
    >> update_url_params(url, new_params)
    'http://stackoverflow.com/test?data=some&data=values&answers=false'
    Trh   c              3  &   K   | ]	  }|d      ywr   NrD   .0xs     rI   	<genexpr>z$update_url_params.<locals>.<genexpr>   s     =qt=   c              3  &   K   | ]	  }|d      ywr|   rD   r}   s     rI   r   z$update_url_params.<locals>.<genexpr>   s     4qt4r   r!   r   )rj   )r   r   rp   r   
isinstancedictlistitemsr`   r
   getappendr   r   ra   rq   rr   rs   rt   ru   )rc   rs   rd   rw   old_args_counternew_args_counterkeyvaluer   rx   new_urls              rI   update_url_paramsr   m   sQ     #J  
 0 0DIO =_==&$flln%4V44 
1
UeTD[)%LE$).>.B.B3.G1.L>M9:adckU|3O  ""C<0
1 !=  fh  N)s   EzBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~c                   | j                  d      }t        dt        |            D ]l  }||   dd }t        |      dk(  rI|j                         r9	 t	        t        |d            }|t        v r|||   dd z   ||<   Vd||    ||<   bd||    ||<   n d	j                  |      S # t        $ r}t        d| d      |d}~ww xY w)
zUn-escape any percent-escape sequences in a URI that are unreserved
    characters. This leaves all reserved, illegal and non-ASCII bytes encoded.
    %r!   r   r      z"Invalid percent-escape sequence: ''Nrf   )
splitrangelenisalnumchrint
ValueErrorr$   UNRESERVED_SETrm   )uripartsihces         rI   unquote_unreservedr      s     IIcNE1c%j! &!HQqMq6Q;199;SAr
O N"uQx|+auQxj>a58*~E!H& 775>  S #EaS!JKQRRSs   B''	C0C  Cc                p    d}d}	 t        t        |       |      S # t        $ r t        | |      cY S w xY w)zRe-quote the given URI.

    This function passes the given URI through an unquote/quote cycle to
    ensure that it is fully and consistently quoted.
    z!#$%&'()*+,/:;=?@[]~|z!#$&'()*+,/:;=?@[]~|rl   )r   r   r$   )r   safe_with_percentsafe_without_percents      rI   requote_urir      sJ     01	5 ',3DEE 5 S344	5s    55c                    d}t        |       D ]E  \  }}|j                         j                  |j                         dz         s7d}|r
| d| | |<    n |s| j                  | d|        yy)z*Update header line list by key value pair.F:T: N)	enumeratelower
startswithr   )header_linesr   r   replacefoundidxlines          rI   update_header_liner      s     E|, 	T::<""399;#45E'*e2eW$5S! se2eW-. rL   c                D    	 | j                   d   S # t        $ r |cY S w xY wNr   )queue
IndexErrorqdefaults     rI   
peek_queuer      s)    wwqz     c                D    	 | j                   d   S # t        $ r |cY S w xY wr   )_queuer   r   s     rI   peek_aio_queuer      s)    xx{ r   c                t    h d}||z
  }|D ]  }t        | |d        ||z
  }|D ]  }t        | |d        y )N>     r   
         r      #   +   -   3   T)enableF)r+   )curlextension_idsdefault_enabledto_enable_idsext_idto_disable_idss         rI   toggle_extensions_by_idsr      sS    DO!O3M 4vd34
 %}4N  5ve45rL   c                   |j                  d      \  }}}}}t        t        |         }| j                  t        j
                  |t        j                  z         |t        j                  k(  sJ d       g }	|j                  d      D ]M  }
t        |
      }t        j                  |      }|st        dt        |       d      |	j                  |       O | j                  t        j                  dj                  |	             |j!                  d      r!|dd	 }t#        j$                  d
t&        d       t)        d |j                  d      D              }t+        | |       |s | j                  t        j,                  |       g }|j                  d      D ]'  }t        |      }t.        |   }|j                  |       ) | j                  t        j0                  dj                  |             t        |      dk(  sJ d       y)zu
    Detailed explanation: https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/
    ,zOnly TLS v1.2 works for now.-zCipher z is not foundr   z-21NzPadding(21) extension found in ja3 string, whether to add it should be managed by the SSL engine. The TLS client hello packet may contain or not contain this extension, any of which should be correct.r!   
stacklevelc              3  2   K   | ]  }t        |        y wN)r   )r~   r   s     rI   r   z"set_ja3_options.<locals>.<genexpr>#  s     >1A>s   r   z%Only curve_formats == 0 is supported.)r   r(   r   setoptr   
SSLVERSIONr   MAX_DEFAULTTLSv1_2r&   r   r#   hexr   SSL_CIPHER_LISTrm   endswithwarningswarnr    ro   r   TLS_EXTENSION_ORDERr'   SSL_EC_CURVES)r   ja3permutetls_versionciphers
extensionscurvescurve_formatscurl_tls_versioncipher_namescipher	cipher_idcipher_namer   curve_namescurvecurve_id
curve_names                     rI   set_ja3_optionsr     s    ?Biin;K*fm&s;'78KK""$4~7Q7Q$QR~555U7UU5L--$ )K	)--i8"WS^,<M#JKKK() 	KK'',)?@5!_
M 	
 >
(8(8(=>>MT=1G//<Kc" 'u:&x0
:&'
 	KK%%sxx'<=}"K$KK"rL   c                   |j                  d      \  }}}}|j                  dd      }| j                  t        j                  t
        j                         | j                  t        j                  |       | j                  t        j                  t        |             |dk7  r | j                  t        j                  |       | j                  t        j                  |j                  dd             y)z
    Detailed explanation: https://www.blackhat.com/docs/eu-17/materials/eu-17-Shuster-Passive-Fingerprinting-Of-HTTP2-Clients-wp.pdf
    |r   ;0rf   N)r   r   r   r   HTTP_VERSIONr   rZ   HTTP2_SETTINGSHTTP2_WINDOW_UPDATEr   HTTP2_STREAMSHTTP2_PSEUDO_HEADERS_ORDER)r   akamaisettingswindow_updatestreamsheader_orders         rI   set_akamai_optionsr  4  s     6<\\#5F2HmWl S)HKK$$o&:&:;KK&&1KK++S-?@#~G))73 	KK22L4H4Hb4QRrL   c                   |j                  d      \  }}}| j                  t        j                  |       | j                  t        j                  |j                  dd             | j                  t        j                  |       y )Nr   r   rf   )r   r   r   HTTP3_SETTINGSHTTP3_PSEUDO_HEADERS_ORDERr   QUIC_TRANSPORT_PARAMETERS)r   perkr   r  quic_transport_parameterss        rI   set_perk_optionsr	  J  sc    8<

35Hl5KK&&1 	KK22L4H4Hb4QRKK113LMrL   c                   |j                   r9| j                  t        j                  dj	                  |j                                | j                  t        j
                  |j                  t        j                  z         | j                  t        j                  t        |j                               | j                  t        j                  t        |j                               | j                  t        j                  |j                         | j                  t        j                   |j"                         | j                  t        j$                  |j&                         |j(                  r*| j                  t        j*                  |j(                         |j,                  r*| j                  t        j.                  |j,                         |j0                  r*| j                  t        j2                  |j0                         |j4                  *| j                  t        j6                  |j4                         |j8                  *| j                  t        j:                  |j8                         |j<                  *| j                  t        j>                  |j@                         |jB                  +| j                  t        jD                  |jB                         y y )Nr   )#tls_signature_algorithmsr   r   SSL_SIG_HASH_ALGSrm   r   tls_min_versionr   r   
TLS_GREASEr   
tls_greaseSSL_PERMUTE_EXTENSIONStls_permute_extensionsSSL_CERT_COMPRESSIONtls_cert_compressionSTREAM_WEIGHThttp2_stream_weightSTREAM_EXCLUSIVEhttp2_stream_exclusivetls_delegated_credentialTLS_DELEGATED_CREDENTIALStls_record_size_limitTLS_RECORD_SIZE_LIMIThttp2_no_priorityHTTP2_NO_PRIORITYform_boundaryFORM_BOUNDARYsplit_cookiesSPLIT_COOKIEShttp3_sig_hash_algsHTTP3_SIG_HASH_ALGSsig_hash_algshttp3_tls_extension_orderHTTP3_TLS_EXTENSION_ORDER)r   fps     rI   set_extra_fpr(  V  s   	""G--sxx8S8S/TUKK""B$6$69S9S$STKK""C$67KK..B4M4M0NOKK,,b.E.EFKK%%r'='=>KK(("*C*CD	""G55r7R7RS	G1123K3KL	G--r/C/CD	#G))2+;+;<	#G))2+;+;<	)G//1A1AB	##/G55r7S7ST 0rL   T   zgzip, deflate, br, zstd)"params_listbase_urldatajsonheaders_listcookies_listfilesauthtimeoutallow_redirectsmax_redirectsproxies_listproxy
proxy_authverify_listrefereraccept_encodingcontent_callbackimpersonater   r   r  extra_fpdefault_headersr   http_version	interfacecertstreammax_recv_speed	multipartqueue_classevent_classcurl_optionsc       "   	       JKL | }%|j                         }|dk(  r!|%j                  t        j                  d       n3|dk7  r.|%j                  t        j                  |j                                |dk(  r |%j                  t        j                  d       |\  }&}'|&rt        ||&      }|'rt        ||'      }|rt        ||      }|rt        ||      }|durt        |      }|%j                  t        j                  |j                                t        |t        t        z  t        z        rt!        |      j                         }(net        |t"              r|j                         }(nDt        |t$              r|j'                         }(n#t        |t(              r|}(n|d}(nt+        d      |t-        |d	
      j                         }(|d uxs |d u})|)r|!|(nd }*|(s|dv rn|%j                  t        j.                  |(       |%j                  t        j0                  t3        |(             |dk(  r |%j                  t        j                  |       |\  }+},t        |,t4              r|,j6                  nd }-t5        |+|-      }.|.j9                  |,       g }/|.j;                         D ]L  \  }0}1|1|/j=                  |0 d       |1dk(  r|/j=                  |0 d       7|/j=                  |0 d|1        N |t?        |/dd       t        |t              r|dk7  rt?        |/dd       t        |t"        t(        z        r|rt?        |/dd       t?        |/ddd       |%j                  t        j@                  |/D .cg c]  }.|.j                          c}.       tC        |.||*      }2|%j                  t        jD                  d       |%j                  t        jF                  d       |\  }3}4|3rD|3jI                  |2      D ]0  }5| j                  t        jF                  |5jK                                2 |4rOtM        |4      }6|6jI                  |2      D ]0  }5| j                  t        jF                  |5jK                                2 |	rtO        d      |!rtQ        t        |xs i       jS                         D ]8  \  }0}1|!jU                  |0t        |1t"              r|1j                         n|1       : |%j                  t        jV                  |!jX                         |
ra|
\  }7}8|%j                  t        jZ                  |7j                                |%j                  t        j\                  |8j                                |d}t        |t              r|\  }9}:|9|:z   };|%j                  t        j^                  ta        |9dz               |s.|%j                  t        jb                  ta        |;dz               n|%j                  t        jd                  d       |%j                  t        jf                  ti        jj                  |;             nt        |t`        tl        z        r|s-|%j                  t        jb                  ta        |dz               n|%j                  t        j^                  ta        |dz               |%j                  t        jd                  d       |%j                  t        jf                  ti        jj                  |             t        |tn              r*|%j                  t        jp                  ta        |             nf|dk(  r8|%j                  t        jp                  ta        tn        jr                               n)|%j                  t        jp                  ta        |             |%j                  t        jt                  |       |\  }<}=|r|=rt+        d      |rd|i}=|=|<}=|=r|%j                  t        jv                  d       ty        |      }>tQ        tz        t"           |=j}                  |>j~                  |=j}                  d                  }|>j                  rK|=j}                  |>j~                   d |>j                   |=j}                  d!|>j                               xs |}||%j                  t        j                  |       |>j~                  d"k(  r^|j                  d#      rt        j                  d$t        d%&       |j                  d'      s |%j                  t        j                  d       |ra|\  }7}8|%j                  t        j                  |7j                                |%j                  t        j                  |8j                                |\  }?}@|@du xs	 |? xr @d u }A|A|%_I        |Ar@|%j                  t        j                  d       |%j                  t        j                  d       t        @t"              r |%j                  t        j                  @       @d(v r0t        |?t"              r |%j                  t        j                  |?       |r.|%j                  t        j                  |j                                |.|%j                  t        j                  |j                                |rvt        |t"              r!|%j                  t        j                  |       nE|\  }}B|%j                  t        j                  |       |%j                  t        j                  |B       |r+t        |      }|%j                  t        j                  |       |r2t        |      }|%j                  ||)      }C|Cdk7  rt        d*| d+      |ro|rt        j                  d,t        d&       d}Dt        |t              r|j                  rd}Dt        |t              r|j}                  d-      rd}Dt        |%|D.       |rEt        |t              rt        d3i |}|rt        j                  d/t        d&       t        |%|       |r*|rt        j                  d0t        d&       t        |%|       |r*|rt        j                  d1t        d&       t        |%|       d }Ed Kd Jd L|r= |"       K |#       J |#       LJKLfd2}F|%j                  t        j                  |F       nM|!|%j                  t        j                  |       n*t%               }E|%j                  t        j                  |E       t%               }G|%j                  t        j                  |G       |r.|%j                  t        j                  |j                                |%j                  t        j                  |        |$r*|$jS                         D ]  \  }H}I|%j                  |H|I        |2EGKJLfS c c}.w )4Nr4   r!   r3   r8   )rv   FrL   z3data must be dict/list/tuple, str, BytesIO or bytes)r   r   )
separators)r4   r5   r:   )encodingr   rf   r   r   zContent-Typezapplication/jsonz!application/x-www-form-urlencodedzapplication/octet-streamExpectT)r   ALLzfiles is not supported, use `multipart`. See examples here: https://github.com/lexiforest/curl_cffi/blob/main/examples/upload.py)namer,  r   i  rk   z)Cannot specify both 'proxy' and 'proxies'allz://zall://httpszhttps://zMake sure you are using https over https proxy, otherwise, the proxy prefix should be 'http://' not 'https://', see: https://github.com/lexiforest/curl_cffi/issues/6r   r   socks)NT)r>  zImpersonating z is not supportedz?JA3 fingerprint was altered after impersonated version was set.r  )r   zBExtra fingerprints was altered after impersonated version was set.zBAkamai fingerprint was altered after impersonated version was set.z@Perk fingerprint was altered after impersonated version was set.c                    j                         sj                          j                         rt        S j                  |        t	        |       S r   )is_setro   r   
put_nowaitr   )chunkheader_recvedr   quit_nows    rI   qputzset_curl_options.<locals>.qput  sA     '')!!# ++LLu:rL   rD   )`upperr   r   r4   CUSTOMREQUESTencodeNOBODYr   r   ry   r   URLr   r   r   tupler   rP   r	   readbytes	TypeErrorr
   
POSTFIELDSPOSTFIELDSIZEr   r%   rJ  updatemulti_itemsr   r   
HTTPHEADERr,   
COOKIEFILE
COOKIELISTget_cookies_for_curlto_curl_formatr"   NotImplementedErrorr   r   addpartMIMEPOST_formUSERNAMEPASSWORDCONNECTTIMEOUT_MSr   
TIMEOUT_MSLOW_SPEED_LIMITLOW_SPEED_TIMEmathceilfloatr   FOLLOWLOCATIONSAFE	MAXREDIRSPROXY_CREDENTIAL_NO_REUSEr   r   r   ra   rb   PROXYr   r   r   r    HTTPPROXYTUNNELPROXYUSERNAMEPROXYPASSWORD_skip_cacertSSL_VERIFYPEERSSL_VERIFYHOSTCAINFOREFERERACCEPT_ENCODINGSSLCERTSSLKEYr^   r   r*   r<  r#   r)   r  r   r(  r  WRITEFUNCTION	WRITEDATA
HEADERDATA	INTERFACEMAX_RECV_SPEED_LARGE)Mr   methodrc   r*  r+  r,  r-  r.  r/  r0  r1  r2  r3  r4  r5  r6  r7  r8  r9  r:  r;  r<  r   r   r  r=  r>  r   r?  r@  rA  rB  rC  rD  rE  rF  rG  r   base_paramsrs   bodybody_providedrequest_bodybase_headersheadersrJ  r   r   kvreqbase_cookiescookiesmorseltemp_cookiesusernamepasswordconnect_timeoutread_timeoutall_timeoutbase_proxiesproxiesr   base_verifyverifydisable_verifyr   retr   bufferrW  header_bufferoptionsettingrU  r   rV  sM                                                                             @@@rI   r   r   p  sW   X 	A\\^F 	q!	5	&&8	# &K[1V,h$#C59E#HHW[[#**,' $te+,%%'	D#	{{}	D'	"yy{	D%	 	MNNTj188:$8D(8M(Y->4DL v11	##T*	&&D	2U?HHW**F3 )L' $.gw#?wTHx0AHHW L -191#Q("W1#Q(1#Rs,- <9KL$&F"2.*M	
 $e$<9ST |Xr4@HHWl!C!((*!CD
#q&,
/C HHW%HHW'(L'"77< 	EFKK**F,A,A,CD	Ew'"77< 	EFKK**F,A,A,CD	E !S
 	
 tzr*002 	TDAq1As9K188:QRS	T	!!9??3 !(	!!8??#45	!!8??#45 '5!(/%%4	**C$0F,GHHHW''[4-?)@A HHW,,a0HHW++TYY{-CD	GS5[	)HHW''Wt^)<=HHW..GdN0CDHHW,,a0HHW++TYYw-?@ /:.	''_)=>	F	"	''Z__)=>	''_)=> HHW. )L'CDD%.
 	
22A6Xc]GKKgkk%>P$QR>>||nC'78KK&(8 9:    HHW]]E*||w&##J/MMP (#$ ''0HHW44a8 %/"(..0AB..0AB &Ku_JK(JFdNN#AN	''+	''+ &#	( *[#">	- 	'.."23 "	((/*@*@*BC dC HHW__d+ID#HHW__d+HHW^^S) -l;	%%|4 ,[9mmKmI!8"^K=@Q#RSS MMQ
 h 12x7V7VGh%(,,7O*PG30 h%(484HMMT
 	Q! MMT
 	1f% MMR
 	1d#FAMHM#=	 	
&&-		%	&&(89	""F+IMHHW/ 	""I$4$4$67 HHW))>: +113 	&OFGHHVW%	& q-AAy "Ds   5w*
)r]   z*Union[CurlHttpVersion, HttpVersionLiteral]rO   r   )rc   rP   rO   r`   )rf   )rc   rP   rv   rP   )rc   rP   rs   zUnion[dict, list, tuple]rO   rP   )r   rP   rO   rP   )F)r   z	list[str]r   rP   r   rP   r   r`   r   )r   zqueue.Queue)r   zasyncio.Queue)r   r-   )r   r-   r   rP   r   r`   )r   r-   r   rP   )r   r-   r  rP   )r   r-   r'  r)   )Jr   r-   r  
HttpMethodrc   rP   r*  zFlist[Union[dict[str, object], list[object], tuple[object, ...], None]]r+  Optional[str]r,  zIOptional[Union[dict[str, str], list[tuple[object]], str, BytesIO, bytes]]r-  z-Optional[dict[object, object] | list[object]]r.  zlist[Optional[HeaderTypes]]r/  zlist[Optional[CookieTypes]]r0  zOptional[dict[object, object]]r1  Optional[tuple[str, str]]r2  z3Optional[Union[float, tuple[float, float], object]]r3  z&Optional[Union[bool, CurlFollow, str]]r4  zOptional[int]r5  zlist[Optional[ProxySpec]]r6  r  r7  r  r8  zlist[Union[bool, str, None]]r9  r  r:  r  r;  zOptional[Callable[..., object]]r<  z(Optional[Union[BrowserTypeLiteral, str]]r   r  r   r  r  r  r=  z/Optional[Union[ExtraFingerprints, ExtraFpDict]]r>  r`   r   zUnion[str, Literal[False]]r?  z4Optional[Union[CurlHttpVersion, HttpVersionLiteral]]r@  r  rA  z%Optional[Union[str, tuple[str, str]]]rB  zOptional[bool]rC  r   rD  zOptional[CurlMime]rE  r   rF  r   rG  zOptional[dict[CurlOpt, str]])X
__future__r   __all__asynciort  r   r   collectionsr   collections.abcr   ior	   r-  r
   typingr   r   r   r   r   r   r   r   urllib.parser   r   r   r   r   r   constr   r   r   r   r   r   r   utilsr    r  r"   
exceptionsr#   r$   r  r%   r<  r&   r'   r(   r)   r*   r+   modelsr,   r-   r.   r/   r0   r1   sessionr2   r  r   ro   rn   rC   r   __annotations__r^   re   ry   r   	frozensetr   r   r   r   r   r   r   r   r  r	  r(  r   rD   rL   rI   <module>r     s   "
?      $   S S S T T H H 1 #  4   $$<" P
 VW '(
    (\	 )7&;4v M
,5, DI//"%/.1/<@/5"+L\S,	NUB 	" 	:>0202,0&*CJ>B#%.0,002!%>8<<@ @D (*IM#26!$(15UBB
BBBB 
BB
BB BBBB 8BB .BB .BB *BB  $!BB" A#BB$ <%BB& !'BB( ,)BB* +BB, *-BB. ./BB0 1BB2 #3BB4 65BB6 :7BB8 
9BB: ;BB< =BB> >?BB@ ABBB &CBBD GEBBF GBBH 0IBBJ KBBL MBBN "OBBP QBBR SBBT /UBBrL   