
    }c[                     \   d Z ddlZddlZddlZddl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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 dd
lmZmZ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+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3 ddl4m5Z5m6Z6m"Z" ddl7m8Z8m9Z9m:Z:m;Z;m<Z< ddl=m>Z>  e6j?        e@          ZA ejB        d          ZC G d de          ZD G d de          ZE G d de          ZF G d de          ZGeeEeeHeIeIeJf         f         ZKd d!iZLdZMd"ZNd#ZO G d$ d%e
          ZPd&e"j"        j#        d'eId(eQfd)ZR G d* d+e+          ZS G d, d-          ZT G d. d/e          ZU G d0 d1e3          ZVd2e)d3eId(eeI         fd4ZWd2e)d5e-d(dfd6ZXd2e)d(eeIef         fd7ZYdS )8z$The CheckExternalLinksBuilder class.    N)datetimetimezone)parsedate_to_datetime)
HTMLParser)path)PriorityQueueQueue)Thread)	AnyDict	GeneratorList
NamedTupleOptionalTupleUnioncast)unquoteurlparse
urlunparse)nodes)Response)ConnectionError	HTTPErrorTooManyRedirects)Sphinx)DummyBuilder)Config)BuildEnvironment)__)SphinxPostTransform)
encode_uriloggingrequests)darkgray	darkgreenpurplered	turquoise)get_node_linez([a-z]+:)?//c                   :    e Zd ZU eed<   eed<   ee         ed<   dS )	HyperlinkuridocnamelinenoN)__name__
__module____qualname__str__annotations__r   int     9lib/python3.11/site-packages/sphinx/builders/linkcheck.pyr,   r,   #   s4         	HHHLLLSMr7   r,   c                   0    e Zd ZU eed<   ee         ed<   dS )CheckRequest
next_check	hyperlinkN)r0   r1   r2   floatr4   r   r,   r6   r7   r8   r:   r:   )   s/         	""""""r7   r:   c                   L    e Zd ZU eed<   eed<   eed<   eed<   eed<   eed<   dS )CheckResultr-   r.   r/   statusmessagecodeN)r0   r1   r2   r3   r4   r5   r6   r7   r8   r?   r?   .   sF         	HHHLLLKKKKKKLLL
IIIIIr7   r?   c                   $    e Zd ZU eed<   eed<   dS )	RateLimitdelayr;   N)r0   r1   r2   r=   r4   r6   r7   r8   rD   rD   7   s'         LLLr7   rD   Acceptz/text/html,application/xhtml+xml;q=0.9,*/*;q=0.8   g      N@c                   @     e Zd ZdZdeddf fdZdededdfdZ xZS )	AnchorCheckParserz9Specialized HTML parser that looks for a specific anchor.search_anchorreturnNc                 d    t                                                       || _        d| _        d S NF)super__init__rJ   found)selfrJ   	__class__s     r8   rO   zAnchorCheckParser.__init__J   s,    *


r7   tagattrsc                 H    |D ]\  }}|dv r|| j         k    r
d| _         d S d S )N)idnameT)rJ   rP   )rQ   rS   rT   keyvalues        r8   handle_starttagz!AnchorCheckParser.handle_starttagP   sJ     	 	JCn$ $2D)D !
	 	r7   )	r0   r1   r2   __doc__r3   rO   r   rZ   __classcell__rR   s   @r8   rI   rI   G   sz        CCc d      3 s t        r7   rI   responseanchorrK   c                    t          |          }|                     dd          D ]I}t          |t                    r|                                }|                    |           |j        r nJ|                                 |j        S )zReads HTML data from a response object `response` searching for `anchor`.
    Returns True if anchor was found, False otherwise.
    i   T)
chunk_sizedecode_unicode)rI   iter_content
isinstancebytesdecodefeedrP   close)r^   r_   parserchunks       r8   check_anchorrk   W   s     v&&F &&$t&LL  eU## 	#LLNNEE< 	E	
LLNNN<r7   c                   |    e Zd ZdZdZ ed          ZddZdeddfdZ	d	e
d
e
de
dede
ddfdZdeddfdZddZdS )CheckExternalLinksBuilderz+
    Checks for broken external links.
    	linkcheckzCLook for any errors in the above output or in %(outdir)s/output.txtrK   Nc                 J    d| _         i | _        t          j        d           d S )Nr   g      @)broken_hyperlinks
hyperlinkssocketsetdefaulttimeout)rQ   s    r8   initzCheckExternalLinksBuilder.initq   s(    !"02 %%%%%r7   resultc                 .   | j                             |j        d           }t          ||j        |j        |j        |j        |j                  }| 	                    |           |j        dk    rd S |j        dk    r|j        dk    rd S |j        r(t                              d|j        |j        d           |j        dk    rt|j        r<t                              t          d	          |j        z   d
z   |j        z              d S t                              t          d	          |j        z              d S |j        dk    rYt                              t          d          |j        z              |                     d|j        ||j        |j                   d S |j        dk    r9t                              t          d          |j        z   |j        z              d S |j        dk    r| j        j        s| j        j        rBt                              t'          d          |j        |j        |j        |j        f           nGt                              t)          d          |j        z   t)          d|j        z             z              |                     d|j        ||j        |j        d
z   |j        z              | xj        dz  c_        d S |j        dk    r$	 dt,          fdt,          fdt,          fdt.          fdt,          fd|j                 \  }}n# t0          $ r dt,          }}Y nw xY w||d<   | j        j        rBt                              d|j        z   dz   |z   dz   |j        z   |j        |j        f           nEt                               |d          |j        z    |d|z   dz   |j        z             z              |                     d|z   |j        ||j        |j        dz   |j        z              d S t7          d|j        z            ) N)filenamer/   r@   rB   r-   info	uncheckedworkingoldz(%16s: line %4d) T)nonlignoredz
-ignored- z: localz
-local-   z
ok        brokenzbroken link: %s (%s))locationz
broken    z - rG   
redirectedpermanentlyz
with Foundzwith See Othertemporarily)i-  i.  i/  i3  i4  zwith unknown codetextz
redirect  z to zredirected zUnknown status %s.)envdoc2pathr.   dictr/   r@   rB   r-   rA   write_linkstatloggerrx   r%   write_entryr&   appquietwarningiserrorwarningr    r(   rp   r'   r)   KeyErrorconfiglinkcheck_allowed_redirects
ValueError)rQ   ru   rw   linkstatr   colors         r8   process_resultz(CheckExternalLinksBuilder.process_resultw   sa   8$$V^T::&-%}6;FJ#^- - - 	H%%%=K' 	F=I% 	&.E*A 	F= 	WKK+V^V]QUKVVV=I% (	C~ AH\22VZ?$FWXXXXXH\22VZ?@@@@@]g% #	CKK..;<<<WfnhvzZZZZZ]i'  	CKK	,//&*<v~MNNNNN]h& 	Cx~ Z!8 Zr"8996:v~)/(G  I I I I C--
:SAW=X=XXYYYXv~x#Z$.?A A A""a'""""]l* 	C	<'0&/*F3'3'0  +ee  < < <2Fe<#HV{6 K|fj85@4G&P%~ .9?8W  Y Y Y Y EE,//&*<!E%$,"7&."HIIJ K K K]T16>8#]FJ,?&.,PR R R R R 1FMABBBs   9L L-,L-whatr.   rw   liner-   c           
      R    | j                             |d|d|d|d           d S )N:z: [z] 
)txt_outfilewrite)rQ   r   r.   rw   r   r-   s         r8   r   z%CheckExternalLinksBuilder.write_entry   s8    XXXtttTTT333OPPPPPr7   datac                     | j                             t          j        |                     | j                             d           d S )Nr   )json_outfiler   jsondumps)rQ   r   s     r8   r   z(CheckExternalLinksBuilder.write_linkstat   s@    
4 0 0111%%%%%r7   c                 "   t          | j        | j                  }t                              d           t          j        | j        d          }t          j        | j        d          }t          |dd          5 | _	        t          |dd          5 | _
        |                    | j                  D ]}|                     |           	 d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   | j        rd| j        _        d S d S )N z
output.txtzoutput.jsonwzutf-8)encodingrG   )HyperlinkAvailabilityCheckerr   r   r   rx   r   joinoutdiropenr   r   checkrq   r   rp   r   
statuscode)rQ   checkeroutput_textoutput_jsonru   s        r8   finishz CheckExternalLinksBuilder.finish   s   .txEEBi\::i];;+sW555 	,9I+sW555	,9=9J!--88 , ,##F++++,	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,
 ! 	$"#DH	$ 	$s6   ;C/8CC/C	C/C	 C//C36C3rK   N)r0   r1   r2   r[   rW   r    epilogrt   r?   r   r3   r5   r   r   r   r   r6   r7   r8   rm   rm   i   s          DR ( ) )F& & & &6C[ 6CT 6C 6C 6C 6CpQ Qc QS Q QQ!%Q Q Q Q&4 &D & & & &$ $ $ $ $ $r7   rm   c                   t    e Zd ZdededdfdZddZddZdee	e
f         deeddf         fd	Zd
e	defdZdS )r   r   r   rK   Nc                     || _         || _        i | _        t                      | _        g | _        t                      | _        d | j         j        D             | _	        d S )Nc                 6    g | ]}t          j        |          S r6   recompile.0xs     r8   
<listcomp>z9HyperlinkAvailabilityChecker.__init__.<locals>.<listcomp>   s     NNNA"*Q--NNNr7   )
r   r   rate_limitsr	   rqueueworkersr   wqueuelinkcheck_ignore	to_ignore)rQ   r   r   s      r8   rO   z%HyperlinkAvailabilityChecker.__init__   sS    13"WW%'%2__NN1MNNNr7   c                     t          | j        j                  D ]\}t          | j        | j        | j        | j        | j                  }|                                 | j	        
                    |           ]d S N)ranger   linkcheck_workers HyperlinkAvailabilityCheckWorkerr   r   r   r   startr   append)rQ   _ithreads      r8   invoke_threadsz+HyperlinkAvailabilityChecker.invoke_threads   sx    566 	( 	(B5dh6:k4;6:6FH HF LLNNNL''''	( 	(r7   c                     | j                                          | j        D ]0}| j                             t	          t
          d           d           1d S rM   )r   r   r   putr:   CHECK_IMMEDIATELY)rQ   _workers     r8   shutdown_threadsz-HyperlinkAvailabilityChecker.shutdown_threads   sY    | 	J 	JGKOOL):DAA5IIII	J 	Jr7   rq   c           	   #     K   |                                   d}|                                D ]u}|                     |j                  r&t	          |j        |j        |j        ddd          V  B| j                            t          t          |          d           |dz  }vd}||k     r&| j                                        V  |dz  }||k     &|                                  d S )Nr   r}   r   FrG   )r   valuesis_ignored_urir-   r?   r.   r/   r   r   r:   r   r   getr   )rQ   rq   total_linksr<   dones        r8   r   z"HyperlinkAvailabilityChecker.check   s     #**,, 	! 	!I""9=11 !!)-1BIDT"+R4 4 4 4 4 4 ->	 J JERRRq [  	+//#####AID [  	 	r7   r-   c                 D    t          fd| j        D                       S )Nc              3   B   K   | ]}|                               V  d S r   )match)r   patr-   s     r8   	<genexpr>z>HyperlinkAvailabilityChecker.is_ignored_uri.<locals>.<genexpr>   s-      <<c399S>><<<<<<r7   )anyr   )rQ   r-   s    `r8   r   z+HyperlinkAvailabilityChecker.is_ignored_uri   s(    <<<<T^<<<<<<r7   r   )r0   r1   r2   r   r   rO   r   r   r   r3   r,   r   r?   r   boolr   r6   r7   r8   r   r      s        O, Of O O O O O( ( ( (J J J J
 S)^ 4  ;PTVZCZ9[        &=# =$ = = = = = =r7   r   c                   p     e Zd ZdZdededededeee	f         ddf fd	Z
dd
Zdedee         fdZ xZS )r   z;A worker class for checking the availability of hyperlinks.r   r   r   r   r   rK   Nc                 4   || _         || _        || _        || _        || _        d | j         j        D             | _        d | j         j        D             | _        d | j         j	        D             | _
        t                                          d           d S )Nc                 6    g | ]}t          j        |          S r6   r   r   s     r8   r   z=HyperlinkAvailabilityCheckWorker.__init__.<locals>.<listcomp>   s6     N N N#$  "z!}} N N Nr7   c                 6    g | ]}t          j        |          S r6   r   )r   docs     r8   r   z=HyperlinkAvailabilityCheckWorker.__init__.<locals>.<listcomp>  s6     "V "V "V&) #%*S// "V "V "Vr7   c                 @    g | ]\  }}t          j        |          |fS r6   r   )r   pattern	auth_infos      r8   r   z=HyperlinkAvailabilityCheckWorker.__init__.<locals>.<listcomp>  s8     4 4 4:L'9bj))95 4 4 4r7   T)daemon)r   r   r   r   r   linkcheck_anchors_ignoreanchors_ignorelinkcheck_exclude_documentsdocuments_excludelinkcheck_authauthrN   rO   )rQ   r   r   r   r   r   rR   s         r8   rO   z)HyperlinkAvailabilityCheckWorker.__init__   s    &N N(,(LN N N"V "V-1[-T"V "V "V4 424 4 4	 	%%%%%r7   c           
      \   
 i  j         j        r j         j        d<   dt          f fddt          t          t          t
          f         f
 fddt          dt          dt          f fd
dt          dt          t          t          t
          f         f fd	}	  j                                        }	 |\  }d S \  }}n# t          $ r
 |\  }}}Y nw xY wd S t                    j        }	  j        |         j        }n# t          $ r Y nw xY w|t          j                    k    r\t          j        t"                      j                            t'          |          d            j                                          ||          \  }}}	|dk    r;t*                              t/          d          z   t/          d          z              n, j                            t3          |||||	                      j                                         )NtimeoutrK   c                     t                    } | j        d| j        | j        d| j        ddg}|D ]M}|j        j        v r=t          t                    }|                    j        j        |                    |c S Ni S )N:///*)r   schemenetlocr   linkcheck_request_headersr   DEFAULT_REQUEST_HEADERSupdate)url
candidatesuheadersrQ   r-   s       r8   get_request_headerszAHyperlinkAvailabilityCheckWorker.run.<locals>.get_request_headers  s    3--C'*zzz3::>(+


CJJJ?J
   # #== #"#:;;GNN4;#H#KLLL"NNN#
 Ir7   c                     dv r=                     dd          \  } }j        D ]}|                    |          rd } nn} d }	 |                     d           n# t          $ r t          |           } Y nw xY wj        D ]\  }}|                              r nd }             d<   	 |rzj        j        rnt          j
        | fdj        |d}|                                 t          |t          |                    }|st          t          d          |z            n	 t          j        | fdj        |d}|                                 ny# t"          t$          t&          f$ r_}t)          |t$                    r|j        j        d	k    r t          j
        | fdj        |d}|                                 Y d }~nd }~ww xY wt/          |           j        }	 j        |= n# t4          $ r Y n w xY w# t$          $ r}|j        j        d
k    rY d }~dS |j        j        d	k    rb                    |j                  }	|	/j                            t=          |	          d           Y d }~dS dt?          |          dfcY d }~S |j        j        dk    rdt?          |          dfcY d }~S dt?          |          dfcY d }~S d }~wt          $ r}dt?          |          dfcY d }~S d }~ww xY w|j         !                    d          | !                    d          k    rdS |j         }
|r|
d|z   z  }
 | |
          rdS |j"        r|j"        d         j        }d|
|fS d|
dfS )N#rG   asciir   T)streamr   r   zAnchor '%s' not found)allow_redirectsr   r   i  i  )rz   z - unauthorizedr   F)rate-limitedr   r   r   r   i  r}   r   rz   r   r   r   )#splitr   r   encodeUnicodeErrorr"   r   r   linkcheck_anchorsr$   r   raise_for_statusrk   r   	Exceptionr    headr   r   r   rd   r^   status_coder   r   r   r   
limit_rater   r   r:   r3   r   rstriphistory)req_urlr_   rexr   r   r^   rP   errr   r;   new_urlrB   allowed_redirectr   r<   kwargsrQ   r-   s               r8   	check_uriz7HyperlinkAvailabilityCheckWorker.run.<locals>.check_uri  s   cz "%))C"3"3.  Cyy(( !% .w'''' . . .$W--. '+i ! !"==%% E !	 !4 3 5 5F93 4dk; 4'|G  FD1: F  F>D F  FH--///(76??CCE  N'+B(C(Cf(LMMMN4 $,= $;$8<)$; $;39$; $; !113333 ,Y8HI 4 4 4%c955 "#,:RVY:Y "! $,< $J7;{5>$J $JBH$J $J !113333333346 "'**1(00   D+  1 1 1<+s2 1::::::\-4 
1!%!>!>J! 5Z(K(KUSSS444444#SXXq0000000\-4 1$c#hh1111111#SXXq0000000 - - -S1,,,,,,,- |""3''7>>#+>+>> 4''", ,sV|+G##GW55 4++% 4#+B/;D'$66'!33s   A A:9A:1A<H ./E H G5AG
H GH ,G6 6
HH
L K'AKKL !K:L  KL L $K;5L ;L r   r  c                     j         j                                        D ]2\  }}|                    |           r|                    |          r dS 3dS )NTF)r   r   itemsr   )r   r  from_urlto_urlrQ   s       r8   r  z>HyperlinkAvailabilityCheckWorker.run.<locals>.allowed_redirect}  s\    $(K$K$Q$Q$S$S     &>>#&&  6<<+@+@  445r7   r.   c                 <   j         D ]+}|                    |           r|  d|j         d}d|dfc S ,t          	          dk    s	                    d          rdS 	                    d          sst
                              	          rdS t          j        j        	                    |                     }t          j
        t          j        |	                    rdS d	S t          j        j                  D ]}             \  }}}|d
k    r n|||fS )Nz	 matched z! from linkcheck_exclude_documentsr}   r   )r   zmailto:ztel:)ry   r   r   )zhttp:zhttps:r  )r   r   r   r   )r   r   r   len
startswithuri_rer   dirnamer   r   existsr   r   r   linkcheck_retries)
r.   doc_matcherrx   srcdir_r@   rB   r  rQ   r-   s
          r8   r   z3HyperlinkAvailabilityCheckWorker.run.<locals>.check  sh     $5 . .$$W-- ." 6 6[-@ 6 6 6  %dA----. 3xx1} //G H H /))^^$788 	/<<$$ /--!\$(*;*;G*D*DEEF{49VS#9#9:: ///. 4;899  %.Y[["dX% E D$''r7   TFr  z-rate limited-   z | sleeping...)r   linkcheck_timeoutr   r   r3   r5   r   r   r   r   r   r   r   r;   r   timesleepQUEUE_POLL_SECSr   r:   	task_doner   rx   r%   r   r?   )rQ   r   check_requestr;   r.   r/   r   r@   rx   rB   r  r  r   r<   r  r-   s   `         @@@@@@r8   runz$HyperlinkAvailabilityCheckWorker.run	  s   ;( 	> $ =F9	T 	 	 	 	 	 	 	^	45c3/ ^	4 ^	4 ^	4 ^	4 ^	4 ^	4 ^	4 ^	4 ^	4 ^	4 ^	4@	# 	 	 	 	 	 	 	 		(3 	(5c3#7 	( 	( 	( 	( 	( 	( 	( 	(@#	$ KOO--MA(5%
I E'0$Wff A A A3@0
C&&&A  c]])F
 "-f5@

   DIKK'  
?+++Z C CUKKK%%'''!&wFD$' WH%899C?(K[B\B\\]]]]C&&$PT U UVVVK!!###G#	$s*   C 
C C%$C%D 
D! D!r^   c                    d }|j                             d          }|r	 t          |          }t          j                    |z   }n# t          $ rr 	 t          |          }t          j        |          }|t          j        t          j
                  z
                                  }n# t          t          f$ r Y nw xY wY nw xY wt          |j                  j        }|j| j        j        }	 | j        |         }|j        }	d|	z  }||k    r|	|k     r|}n# t(          $ r
 t*          }Y nw xY w||k    rd S t          j                    |z   }t-          ||          | j        |<   |S )NzRetry-Afterg       @)r   r   r=   r&  r   r   r   	timestampnowr   utctotal_seconds	TypeErrorr   r   r   r   linkcheck_rate_limit_timeoutr   rE   r   DEFAULT_DELAYrD   )
rQ   r^   r;   retry_afterrE   untilr   	max_delay
rate_limitlast_wait_times
             r8   r  z+HyperlinkAvailabilityCheckWorker.limit_rate  s   
&**=99 	11k** "Y[[50

  
Q 
Q 
Q	Q1+>>E "*!3E!:!:J"X\(,%?%??NNPPEE ":.    D	
Q (,''. 	-@I&!-f5
 ",!1n,9$ &))C &%E  & & &%& y  tu,J#,UJ#?#? sH   A 
CB( AC(B<9C;B<<CC-D D)(D)r   )r0   r1   r2   r[   r   r   r	   r   r3   rD   rO   r+  r   r   r=   r  r\   r]   s   @r8   r   r      s        EE&, &f &e &&-1#y.-A&FJ& & & & & &"~$ ~$ ~$ ~$@$8 $ $ $ $ $ $ $ $ $r7   r   c                   &    e Zd ZdZdZdeddfdZdS )HyperlinkCollector)rn      r  rK   Nc                    t          t          | j        j                  }|j        }| j                            t          j                  D ]a}d|vr|d         }| j        	                    d|          }|r|}t          |          }t          || j        j        |          }||vr|||<   b| j                            t          j                  D ]u}	|	d                             d          }|rVd|v rR| j        	                    d|          }|r|}t          |	          }t          || j        j        |          }||vr|||<   vd S )Nrefurilinkcheck-process-urir   ?r   )r   rm   r   builderrq   documentfindallr   	referenceemit_firstresultr*   r,   r   r.   imager   )
rQ   r  r@  rq   refnoder-   newurir/   uri_infoimgnodes
             r8   r+  zHyperlinkCollector.run  sr   0$(2BCC'
 },,U_== 	+ 	+Gw& (#CX../FLLF "7++F dh&6??H*$ +"*
3 },,U[99 
	/ 
	/G,'++C00C /u| /223JCPP ! C&w//$S$(*:FCCj( /&.JsO
	/ 
	/r7   )r0   r1   r2   buildersdefault_priorityr   r+  r6   r7   r8   r:  r:    sA        H/C /D / / / / / /r7   r:  r   r-   c                     t          |          }|j        dk    rP|j        rI|j                            d          }|s-d|j         }t	          |                    |                    S dS )zRewrite anchor name of the hyperlink to github.com

    The hyperlink anchors in github.com are dynamically generated.  This rewrites
    them before checking and makes them comparable.
    z
github.comzuser-content-)fragmentN)r   hostnamerM  r  r   _replace)r   r-   parsedprefixedrM  s        r8   rewrite_github_anchorrR    sw     c]]F,& B6? B?--o>> 	B8v88Hfooxo@@AAA4r7   r   c                    t          | j        j                                                  D ]\  }}	 t	          j        |          | j        j        t	          j        |          <   nO# t          j        $ r=}t                              t          d          |j
        |j                   Y d}~nd}~ww xY w| j        j                            |           # | j        j                            |           w xY wdS )zFCompile patterns in linkcheck_allowed_redirects to the regexp objects.z=Failed to compile regex in linkcheck_allowed_redirects: %r %sN)listr   r   r  r   r   errorr   r   r    r   msgpop)r   r   r   r   excs        r8   #compile_linkcheck_allowed_redirectsrY  #  s   SZCIIKKLL < <W	<FHjQXFYFYCJ22:c??CCx 	1 	1 	1NN2]^^;1 1 1 1 1 1 1 1	1
 J266s;;;;CJ266s;;;;< <s/   3A&%C&B253B-(C-B22C!C6c                    |                      t                     |                     t                     |                     dg d            |                     dg d            |                     di d            |                     dg d            |                     di d            |                     ddd            |                     dd d t
          g           |                     d	d
d            |                     ddd            |                     ddgd            |                     ddd            |                     d           |                     dt          d           ddddS )Nr   r   r   r   r   r!  rG   r%  r      r  Tr   z^!r2  g     r@r>  zconfig-initedr;  )prioritybuiltin)versionparallel_read_safeparallel_write_safe)	add_builderrm   add_post_transformr:  add_config_valuer5   	add_eventconnectrY  )r   s    r8   setuprf  0  s   OO-...-...+R6666DAAA6DAAA)2t4444b$???,a666,dD3%@@@,a666,dD999 3dVTBBB7EEEMM)***KK!DsKSSS "#  r7   )Zr[   r   r   rr   r&  r   r   email.utilsr   html.parserr   osr   queuer   r	   	threadingr
   typingr   r   r   r   r   r   r   r   r   urllib.parser   r   r   docutilsr   r$   r   requests.exceptionsr   r   r   sphinx.applicationr   sphinx.builders.dummyr   sphinx.configr   sphinx.environmentr   sphinx.localer    !sphinx.transforms.post_transformsr!   sphinx.utilr"   r#   sphinx.util.consoler%   r&   r'   r(   r)   sphinx.util.nodesr*   	getLoggerr0   r   r   r  r,   r:   r?   rD   r=   r3   r5   CheckRequestTyper   r   r(  r3  rI   r   rk   rm   r   r   r:  rR  rY  rf  r6   r7   r8   <module>r{     s   * *  				   ' ' ' ' ' ' ' ' - - - - - - " " " " " "       & & & & & & & &       W W W W W W W W W W W W W W W W W W W W W W 6 6 6 6 6 6 6 6 6 6             L L L L L L L L L L % % % % % % . . . . . .             / / / / / /       A A A A A A 5 5 5 5 5 5 5 5 5 5 K K K K K K K K K K K K K K + + + + + +		8	$	$	N	#	#    
   # # # # #: # # #
    *       
    uUCc-A'BBC  ?       
    8,5 s t    $Z$ Z$ Z$ Z$ Z$ Z$ Z$ Z$z,= ,= ,= ,= ,= ,= ,= ,=^x x x x xv x x xv!/ !/ !/ !/ !/, !/ !/ !/Hv C HSM    
<V 
<V 
< 
< 
< 
< 
<v $sCx.      r7   