
    :hc              	         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mZmZmZ dkdZi ddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&i d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPZdldQZ G dR dSe      ZdmdTZ G dU dVe      Z G dW dXe      Z G dY dZe      Z G d[ d\      Z G d] d^      Z G d_ d`ee         ZdaZerej:                  eeef   ef   Z nej:                  Z  G db dce       Z! G dd de      Z" G df dg      Z#dndhZ$ G di dj      Z%y)o    )annotationsN)IOAny
NamedTupleUnionc                F    t         j                  | j                  d      z   S )N	utf_16_be)codecsBOM_UTF16_BEencode)ss    K/var/www/urcfiles/bundle/venv/lib/python3.12/site-packages/PIL/PdfParser.pyencode_textr      s    +!666          u   ˘   u   ˇ   u   ˆ   u   ˙   u   ˝   u   ˛   u   ˚   u   ˜   u   •   u   †   u   ‡   u   …   u   —   u   –   u   ƒ   u   ⁄   u   ‹   u   ›   u   −   u   ‰   u   „   u   “   u   ”   u   ‘   u   ’   u   ‚   u   ™   u   ﬁ   u   ﬂ   u   Ł   u   Œ   u   Š   u   Ÿu   Žu   ıu   łu   œu   šu   žu   €)                     c                    | d t        t        j                         t        j                  k(  r+| t        t        j                        d  j                  d      S dj	                  d | D              S )Nr	    c              3  Z   K   | ]#  }t         j                  |t        |             % y wN)PDFDocEncodinggetchr).0bytes     r   	<genexpr>zdecode_text.<locals>.<genexpr>E   s"     Iqt~))$D	:qs   )+)lenr
   r   decodejoin)bs    r   decode_textrI   A   s\    	#3v""#$(;(;;V(()+,33K@@wwIqIIIr   c                      e Zd ZdZy)PdfFormatErrorz\An error that probably indicates a syntactic or semantic error in the
    PDF file structureN)__name__
__module____qualname____doc__ r   r   rK   rK   H   s     	r   rK   c                    | st        |      y r>   )rK   )	conditionerror_messages     r   check_format_conditionrT   O   s    ]++ r   c                  "    e Zd ZU ded<   ded<   y)IndirectReferenceTupleint	object_id
generationN)rL   rM   rN   __annotations__rP   r   r   rV   rV   T   s    NOr   rV   c                  4    e Zd ZddZddZd	dZd	dZd
dZy)IndirectReferencec                :    | j                    d| j                   dS )N z RrX   rY   selfs    r   __str__zIndirectReference.__str__Z   s    ..!4??"3266r   c                @    | j                         j                  d      S Nus-ascii)rb   r   r`   s    r   	__bytes__zIndirectReference.__bytes__]   s    ||~$$Z00r   c                    | j                   |j                   uryt        |t              sJ |j                  | j                  k(  xr |j                  | j                  k(  S )NF)	__class__
isinstancer\   rX   rY   ra   others     r   __eq__zIndirectReference.__eq__`   sM    >>0%!2333$..0XU5E5E5XXr   c                    | |k(   S r>   rP   rj   s     r   __ne__zIndirectReference.__ne__f   s    EM""r   c                D    t        | j                  | j                  f      S r>   )hashrX   rY   r`   s    r   __hash__zIndirectReference.__hash__i   s    T^^T__566r   Nreturnstrrs   bytesrk   objectrs   boolrs   rW   )rL   rM   rN   rb   rf   rl   rn   rq   rP   r   r   r\   r\   Y   s    71Y#7r   r\   c                      e Zd ZddZy)IndirectObjectDefc                :    | j                    d| j                   dS )Nr^   z objr_   r`   s    r   rb   zIndirectObjectDef.__str__n   s    ..!4??"3488r   Nrr   )rL   rM   rN   rb   rP   r   r   r|   r|   m   s    9r   r|   c                  L    e Zd Zd
dZddZddZddZddZddZddZ	ddZ
y	)	XrefTablec                @    i | _         i | _        ddi| _        d| _        y )Nr   i   F)existing_entriesnew_entriesdeleted_entriesreading_finishedr`   s    r   __init__zXrefTable.__init__s   s0     	  	 !"5z %r   c                    | j                   r|| j                  |<   n|| j                  |<   || j                  v r| j                  |= y y r>   )r   r   r   r   ra   keyvalues      r   __setitem__zXrefTable.__setitem__}   sL      $)DS!).D!!#&$&&&$$S) 'r   c                ^    	 | j                   |   S # t        $ r | j                  |   cY S w xY wr>   )r   KeyErrorr   ra   r   s     r   __getitem__zXrefTable.__getitem__   s8    	.##C(( 	.((--	.s    ,,c                F   || j                   v r2| j                   |   d   dz   }| j                   |= || j                  |<   y || j                  v r%| j                  |   d   dz   }|| j                  |<   y || j                  v r| j                  |   }y d| d}t        |      )N   z
object ID z+ cannot be deleted because it doesn't exist)r   r   r   
IndexError)ra   r   rY   msgs       r   __delitem__zXrefTable.__delitem__   s    $"""))#.q1A5J  %(2D  %D)))..s3A6:J(2D  %D(((--c2Jse#NOCS/!r   c                >    || j                   v xs || j                  v S r>   )r   r   r   s     r   __contains__zXrefTable.__contains__   s#    d+++Fsd6F6F/FFr   c                    t        t        | j                  j                               t        | j                  j                               z  t        | j
                  j                               z        S r>   )rE   setr   keysr   r   r`   s    r   __len__zXrefTable.__len__   s^    %%**,-$""'')*+$&&++-./
 	
r   c                    t        | j                  j                               t        | j                  j                               z
  t        | j                  j                               z  S r>   )r   r   r   r   r   r`   s    r   r   zXrefTable.keys   sS    %%**,-D4H4H4M4M4O0PP  %%'() 	)r   c                   t        t        | j                  j                               t        | j                  j                               z        }t        t        | j                  j                                     }|j                         }|j                  d       |rd }t        |      D ]  \  }}||dz   |k(  r|}|d | }||d  } n |}g }|j                  d|d   t        |      fz         |D ]  }	|	| j                  v r"|j                  d| j                  |	   z         3|j                  d      }
t        |	|
k(  d|	 d|
        	 |d   }|j                  d|| j                  |	   fz          |r|S # t        $ r d}Y 7w xY w)	Ns   xref
r   s   %d %d
r   s   %010d %05d n 
z*expected the next deleted object ID to be z, instead found s   %010d %05d f 
)sortedr   r   r   r   tellwrite	enumeraterE   poprT   r   )ra   fr   deleted_keys	startxrefprevindexr   contiguous_keysrX   this_deleted_object_idnext_in_linked_lists               r   r   zXrefTable.write   s   c$**//12S9M9M9R9R9T5UUVc$"6"6";";"=>?FFH			#D'o
s<4!8s?D&*6ElO<D . #'GGJ/!"4c/6J!KKL,	 0 00GG.1A1A)1LLM-9-=-=a-@**!%;;DYK P))?(@B
0.:1o+ GG*.0D0DY0OPQ - @  & 0./+0s   E>>FFNrs   None)r   rW   r   tuple[int, int]rs   r   )r   rW   rs   r   )r   rW   rs   r   )r   rW   rs   ry   rz   )rs   zset[int])r   	IO[bytes]rs   rW   )rL   rM   rN   r   r   r   r   r   r   r   r   rP   r   r   r   r   r   s+    &*."G
)
%r   r   c            	          e Zd ZU ded<   ddZddZddZddZddZe	dd       Z
 e ed	d
            dD  ch c]  }t        |       c}}} z
  ZddZyc c}}} w )PdfNamerv   namec                    t        |t              r|j                  | _        y t        |t              r|| _        y |j	                  d      | _        y rd   )ri   r   r   rv   r   )ra   r   s     r   r   zPdfName.__init__   s8    dG$		DIe$DIJ/DIr   c                8    | j                   j                  d      S rd   )r   rF   r`   s    r   name_as_strzPdfName.name_as_str   s    yy
++r   c                z    t        |t              xr |j                  | j                  k(  xs || j                  k(  S r>   )ri   r   r   rj   s     r   rl   zPdfName.__eq__   s4    ug&B5::+B dii	 r   c                ,    t        | j                        S r>   )rp   r   r`   s    r   rq   zPdfName.__hash__   s    DIIr   c                `    | j                   j                   dt        | j                         dS )N())rh   rL   reprr   r`   s    r   __repr__zPdfName.__repr__   s)    ..))*!DO+<A>>r   c                8     | t         j                  |            S r>   )	PdfParserinterpret_name)clsdatas     r   from_pdf_streamzPdfName.from_pdf_stream   s    9++D122r   !      z#%/()<>[]{}c                    t        d      }| j                  D ]6  }|| j                  v r|j                  |       #|j	                  d|z         8 t        |      S )N   /s   #%02X)	bytearrayr   allowed_charsappendextendrv   )ra   resultrH   s      r   rf   zPdfName.__bytes__   sO    4AD&&&a hl+	 
 V}r   N)r   zPdfName | bytes | strrs   r   rr   rw   rz   )r   rv   rs   r   ru   )rL   rM   rN   rZ   r   r   rl   rq   r   classmethodr   r   rangeordr   rf   )rB   cr   s   000r   r   r      si    
K0, 
? 3 3 b#'=*I=a3q6=*IIM +Js   A
r   c                      e Zd ZddZy)PdfArrayc                >    ddj                  d | D              z   dz   S )Ns   [     c              3  2   K   | ]  }t        |        y wr>   )pdf_repr)rB   xs     r   rD   z%PdfArray.__bytes__.<locals>.<genexpr>   s      ;d!ds   s    ])rG   r`   s    r   rf   zPdfArray.__bytes__   s!    tyy ;d ;;;eCCr   Nru   )rL   rM   rN   rf   rP   r   r   r   r      s    Dr   r   Fc                  $    e Zd ZddZddZddZy)PdfDictc                z    |dk(  r"t         j                  j                  | ||       y || |j                  d      <   y )Nr   re   )collectionsUserDict__setattr__r   r   s      r   r   zPdfDict.__setattr__  s4    &=  ,,T3>+0DJ'(r   c                `   	 | |j                  d         }t        |t              rt        |      }|j                  d      r|j                  d      r|dd  }d}t        |      dkD  r5|d   }t        |dd       d	z  }t        |      d
kD  r|t        |dd
       z  }dd t        |      dz
   }t        j                  |d t        |      dz    |      }|dv r:d	z  }|dk(  r|dz  }t        j                  t        j                  |      |z         }|S # t        $ r}t        |      |d }~ww xY w)Nre   DatezD:   Z         <         z%Y%m%d%H%M%S)+-r   )r   r   AttributeErrorri   rv   rI   endswith
startswithrE   rW   timestrptimegmtimecalendartimegm)ra   r   r   erelationshipoffsetformats          r   __getattr__zPdfDict.__getattr__  s:   	-J/0E eU#&E<<%ab	L5zB$RyU2b\*R/u:?c%2,//F#$4c%j1n5FMM%(9#f+/":FCEz)"3&bLFHOOE$:V$CD-  	- %1,	-s   D 	D-D((D-c                H   t        d      }| j                         D ]i  \  }}|	t        |      }|j                  d       |j                  t	        t        |                   |j                  d       |j                  |       k |j                  d       t	        |      S )N   <<   
r   s   
>>)r   itemsr   r   rv   r   )ra   outr   r   s       r   rf   zPdfDict.__bytes__'  s    **,JC}UOEJJuJJuWS\*+JJtJJu ' 	

7Szr   N)r   rt   r   r   rs   r   )r   rt   rs   zstr | time.struct_timeru   )rL   rM   rN   r   r   rf   rP   r   r   r   r     s    16r   r   c                      e Zd ZddZddZy)	PdfBinaryc                    || _         y r>   )r   )ra   r   s     r   r   zPdfBinary.__init__6  s	    	r   c                L    ddj                  d | j                  D              z  S )Ns   <%s>r   c              3  &   K   | ]	  }d |z    yw)s   %02XNrP   rB   rH   s     r   rD   z&PdfBinary.__bytes__.<locals>.<genexpr>:  s     !Ay!'A+ys   )rG   r   r`   s    r   rf   zPdfBinary.__bytes__9  s     !Atyy!AAAAr   N)r   zlist[int] | bytesrs   r   ru   )rL   rM   rN   r   rf   rP   r   r   r   r   5  s    Br   r   c                      e Zd ZddZddZy)	PdfStreamc                     || _         || _        y r>   )
dictionarybuf)ra   r  r  s      r   r   zPdfStream.__init__>  s    $r   c                F   	 | j                   d   }|dk(  r:	 | j                   d   }t        j                  | j                  t        |            S dt        |       d}t        |      # t        $ r | j                  cY S w xY w# t        $ r | j                   d   }Y yw xY w)Ns   Filters   FlateDecodes   DL   Length)bufsizezstream filter z unknown/unsupported)r  r   r  zlib
decompressrW   r   NotImplementedError)ra   filterexpected_lengthr   s       r   rF   zPdfStream.decodeB  s    	__Y/F ^#="&//%"8 ??488S5IJJ"4<.0DEC%c**  	88O	
  ="&//)"<=s"   A* B *BBB B N)r  r   r  rv   rs   r   ru   )rL   rM   rN   r   rF   rP   r   r   r   r   =  s    +r   r   c                   | du ry| du ry| yt        | t        t        t        t        f      rt        |       S t        | t        t        f      rt        |       j                  d      S t        | t        j                        r+dt        j                  d|       j                  d      z   d	z   S t        | t              rt        t        |             S t        | t              rt        t        |             S t        | t              rt        t!        |             S t        | t
              r>| j#                  d
d      } | j#                  dd      } | j#                  d	d      } d| z   d	z   S t        |       S )NTs   trueFs   falses   nullre   s   (D:z%Y%m%d%H%M%SZ   )   \s   \\   (   \(s   \))ri   r   r   r   r   rv   rW   floatrt   r   r   struct_timestrftimedictlistr   r   replace)r   s    r   r   r   R  s-   Dy	
e	
	A(I>	?Qx	AU|	$1v}}Z((	At''	(oq9@@LLtSS	At	WQZ  	At	Xa[!!	As	A''	Au	IIeW%IIdF#IIdF#ax$Qxr   c                  N   e Zd ZdZ	 	 	 	 	 dS	 	 	 	 	 	 	 	 	 	 	 dTdZdUdZdVdZdWdZdWdZdWdZ	dWd	Z
dWd
ZdXdZdYdZdWdZ	 dZ	 	 	 d[dZ	 	 	 	 	 	 	 	 d\dZ	 	 	 	 	 	 	 	 d]dZdWdZed^d       ZdWdZdZd_dZdZdZdZdZedz   Zedz   ZdZdZeez   ez   Z e jB                  edz   ez   dz   ez   dz   ez   d z   ez   d!z   ez   d"z   e jD                        Z# e jB                  edz   ez   d#z   ez   dz   ez   d z   ez   d!z   ez   e jD                        Z$dWd$Z%d`d%Z& e jB                  e      Z' e jB                  ed&z   ez   d'z         Z( e jB                  ed(z         Z) e jB                  ed)z   ez         Z*e+dad*       Z, e jB                  d+      Z-e+dbdcd,       Z. e jB                  ed-z   ez   d'z         Z/ e jB                  ed.z   ez   d'z         Z0 e jB                  ed/z   ez   d'z         Z1 e jB                  ed0z   ez   d'z         Z2 e jB                  ed1z   ez   d'z         Z3 e jB                  ed2z         Z4 e jB                  ed3z         Z5 e jB                  ed4z   ez   d5z         Z6 e jB                  ed6z         Z7 e jB                  ed7z   ez   d7z   ez   d8z   ez   d'z         Z8 e jB                  ed7z   ez   d7z   ez   d9z   ez   d'z         Z9 e jB                  ed:z   ez   d'z         Z: e jB                  d;ez   d<z   ez   d=z         Z; e jB                  ed>z         Z< e jB                  ed?z   ez   d'z         Z=e+	 	 dd	 	 	 	 	 	 	 	 	 ded@       Z> e jB                  dA      Z?i dBdCdDdEdFdGdHdIdJdKd;d;d'd'dLdL e@dB      dC e@dD      dE e@dF      dG e@dH      dI e@dJ      dK e@d;      d; e@d'      d' e@dL      dLZAe+	 	 	 	 	 	 dfdM       ZB e jB                  edNz   ez         ZC e jB                  ed z   ez   d z   ez   ez         ZD e jB                  dO      ZEdgdPZFdhdidQZG	 dZ	 	 	 djdRZHy)kr   z|Based on
    https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/PDF32000_2008.pdf
    Supports PDF up to 1.4
    Nc                   |r|rd}t        |      || _        || _        || _        || _        d| _        d| _        ||t        ||      x| _        }d| _        |<| j                  |      | _        d| _        |st        |d      r|j                  | _        i | _        |  |  |  |  | j                  r| j                          n{dx| _        | _        t               | _        d | _        t               | _        d | _        t               | _        g | _        g | _        d | _        d | _        i | _        t5               | _        d| j6                  _        |r| j;                          y y )Nz4specify buf or f or filename, but not both buf and fFTr   r   )RuntimeErrorfilenamer  r   start_offsetshould_close_bufshould_close_fileopenget_buf_from_filehasattrr   cached_objectsread_pdf_infofile_size_totalfile_size_thisr   rootroot_refinfoinfo_refpage_tree_rootpages
orig_pages	pages_reflast_xref_section_offsettrailer_dictr   
xref_tabler   seek_end)ra   r  r   r  r  moder   s          r   r   zPdfParser.__init__u  sM    1HCs## 9<( %!&AIh--DFQ%)D"=--a0DH$(D!6 2 !<>88 9::D 4#6	DI DM	DI DM"))D24DJ79DO!DN,0D)24D'kDO+/(MMO r   c                    | S r>   rP   r`   s    r   	__enter__zPdfParser.__enter__  s    r   c                $    | j                          y r>   )close)ra   argss     r   __exit__zPdfParser.__exit__  s    

r   c                D    | j                          | j                          y r>   )	close_bufr0  r`   s    r   start_writingzPdfParser.start_writing  s    r   c                    t        | j                  t        j                        r| j                  j                          d | _        y r>   )ri   r  mmapr5  r`   s    r   r9  zPdfParser.close_buf  s)    dhh		*HHNNr   c                    | j                   r| j                          | j                  /| j                  r"| j                  j	                          d | _        y y y r>   )r  r9  r   r  r5  r`   s    r   r5  zPdfParser.close  sC      NN66$"8"8FFLLNDF #9r   c                t    | j                   J | j                   j                  dt        j                         y )Nr   )r   seekosSEEK_ENDr`   s    r   r0  zPdfParser.seek_end  s(    vv!!!Ar{{#r   c                V    | j                   J | j                   j                  d       y )Ns	   %PDF-1.4
)r   r   r`   s    r   write_headerzPdfParser.write_header  s"    vv!!!]#r   c                z    | j                   J | j                   j                  d| dj                                y )Nz% 
)r   r   r   )ra   r   s     r   write_commentzPdfParser.write_comment  s3    vv!!!r!BZ&&()r   c                   | j                   J | j                          | j                  | j                   j                               | _        | j                  d      | _        | j                          | j                  | j                  t        d      | j
                         | j                  | j
                  t        d      t        | j                        | j                         | j                  S )Nr      Catalog)TypePages   Pages)rI  CountKids)r   del_rootnext_object_idr   r&  r,  rewrite_pages	write_objr   rE   r*  r`   s    r   write_catalogzPdfParser.write_catalog  s    vv!!!++DFFKKM:,,Q/t}}7:+>dnnUNN"djj/	 	 	
 }}r   c                   g }t        | j                        D ]  \  }}| j                  |   }| j                  |j                  = |j                  |t        d                || j                  vrXi }|j                         D ]  \  }}|||j                         <    | j                  |d<    | j                  di |}t        | j                        D ]  \  }	}
|
|k(  s|| j                  |	<     |D ]X  }|s| j                  |   }|j                  | j                  v r| j                  |j                  = |j                  dd       }|rSZ g | _        y )Ns   ParentParentr>   )r   r+  r!  r/  rX   r   r   r*  r   r   r,  
write_pager@   )ra   pages_tree_nodes_to_deleteipage_ref	page_infostringified_page_infor   r   new_page_refjcur_page_refpages_tree_node_refpages_tree_nodes                r   rP  zPdfParser.rewrite_pages  sM   %'"$T__5KAx++H5I 2 23&--i	8J.KLtzz)$&!'oo/
U;@%coo&78 0 /3nn!(+*4??I3HIL#,TZZ#8<8+$0DJJqM $9 6& $>%"&"5"56I"J&00DOOC(;(E(EF&5&9&9)T&J#	 & $> r   c                $   | j                   J |r| j                          || _        | j                  r!| j	                  d | j                        | _        | j                  j                  | j                         }t        | j                        }| j                  |d}| j                  | j                  |d<   | j                  r| j
                  |d<   || _	        | j                   j                  dt        t        |            z   d|z  z          y )N)   Root   Size   Prev   Infos   trailer
s   
startxref
%d
%%%%EOF)r   rN  r&  r'  rQ  r(  r/  r   rE   r-  rv   r   )ra   new_root_ref
start_xrefnum_entriesr.  s        r   write_xref_and_trailerz PdfParser.write_xref_and_trailer  s     vv!!!MMO(DM99 NN4;DM__**4662
$//*]] 0
 ((4$($A$AL!99$(MML!(2%GL)*+)J67	
r   c                    t        |t              r| j                  |   n|}d|vrt        d      |d<   d|vr| j                  |d<    | j
                  |g|i |S )NrI     PagerT  )ri   rW   r*  r   r,  rQ  )ra   refobjsdict_objobj_refs        r   rU  zPdfParser.write_page  sd     &0S%9$**S/s!&w/HV8#!%HXt~~g9999r   c                n   | j                   J | j                   }| | j                  |j                               }n3|j                         |j                  f| j                  |j
                  <   |j                  t        t        |              |j                  dd       }|t        |      |d<   |r|j                  t        |             |D ]  }|j                  t        |              |3|j                  d       |j                  |       |j                  d       |j                  d       |S )NstreamLengths   stream
s   
endstream
s   endobj
)r   rO  r   rY   r/  rX   r   rv   r|   r   rE   r   )ra   rk  rl  rm  r   rp  objs          r   rQ  zPdfParser.write_obj  s     vv!!!FF;%%affh/C./ffh-GDOOCMM*	'-./h-!$VHXGGHX&'CGGHSM" GGK GGFOGG$%	
r   c                    | j                   y | j                  | j                   j                  = | j                  | j                  d   j                  = y )NrK  )r&  r/  rX   r%  r`   s    r   rN  zPdfParser.del_root0  s@    == OODMM334OODIIh/99:r   c                    t        | d      r| j                         S t        | d      r| j                         S 	 t        j                  | j	                         dt        j
                        S # t        $ r Y yw xY w)N	getbuffergetvaluer   )accessr   )r   ru  rv  r<  filenoACCESS_READ
ValueError)r   s    r   r  zPdfParser.get_buf_from_file6  sd    1k";;= Q
#::<yyQt7G7GHH s   3A. .	A:9A:c                P   | j                   J t        | j                         | _        | j                  | j                  z
  | _        | j                          t        | j                  j                  d      d ud       | j                  d   | _	        | j                  J | j                  j                  dd       | _
        t        | j                  | j                              | _        | j                  t               | _        n)t        | j                  | j                              | _        t        d| j                  v d       t        | j                  d   dk(  d       t        | j                  j                  d      d ud	       t        t        | j                  d   t               d
       | j                  d   | _        | j"                  J | j                  | j"                        | _        | j'                  | j$                        | _        | j(                  d d  | _        y )Nra  zRoot is missingrd     Typez/Type missing in RootrH  z/Type in Root is not /CatalogrK  z/Pages missing in Rootz+/Pages in Root is not an indirect reference)r  rE   r#  r  r$  read_trailerrT   r.  r@   r&  r(  r   read_indirectr%  r'  ri   r\   r,  r)  linearize_page_treer*  r+  r`   s    r   r"  zPdfParser.read_pdf_infoB  s   xx###"488}"22T5F5FF!!'*$68I	
 ))'2}}((())--gt<D..t}}=>	== 	DI 2 24== ABDIw$))35LMIIg*,.M	
 	IIMM(#4/1I	
 	tyy*,=>9	
 8,~~)))"00@--d.A.AB
 **Q-r   c                    	 t        t        | j                  j                               dz   d      }||df| j                  |j
                  <   |S # t        $ r t        dd      }Y 6w xY w)Nr   r   )r\   maxr/  r   rz  rX   )ra   r   	references      r   rO  zPdfParser.next_object_idf  sm    	0)#doo.B.B.D*E*I1MI 4:A;DOOI//0	  	0)!Q/I	0s   0A A)(A)s   [][()<>{}/%]s$   [][()<>{}/%\000\011\012\014\015\040]s   [\000\011\012\014\015\040]s#   [\000\011\012\014\015\0400-9a-fA-F]   *   +s   [\000\011\014\040]*s   [\r\n]+s   trailers   <<(.*>>)s	   startxrefs   ([0-9]+)s   %%EOF   $s	   <<(.*?>>)c                   | j                   J t        | j                         dz
  }|| j                  k  r| j                  }| j                  j	                  | j                   |      }t        |d ud       |}|r<|}| j                  j	                  | j                   |j                         dz         }|r<|s|}|J |j                  d      }t        |j                  d            | _	        | j                  |      | _        t               | _        | j                  | j                         d| j                  v r| j                  | j                  d          y y )N @  ztrailer end not found   r   r   xref_section_offsetrc  )r  rE   r  re_trailer_endsearchrT   startgrouprW   r-  interpret_trailerr.  r   r/  read_xref_tableread_prev_trailer)ra   search_start_offsetm
last_matchtrailer_datas        r   r}  zPdfParser.read_trailer  s7   xx###!$((me3!2!22"&"3"3&&txx1DEq}.EF
J##**488QWWY^DA  A}}wwqz(+AGGAJ% 22<@#+1N1NOd'''""4#4#4W#=> (r   c                   | j                   J | j                  |      }| j                  j                  | j                   ||dz          }t	        |d ud       |J |j                  d      }t	        t        |j                  d            |k(  d       | j                  |      }d|v r| j                  |d          y y )Nr  r  zprevious trailer not foundr   r   zGxref section offset in previous trailer doesn't match what was expectedrc  )	r  r  re_trailer_prevr  rT   r  rW   r  r  )ra   r  trailer_offsetr  r  r.  s         r   r  zPdfParser.read_prev_trailer  s    xx###--BU-V  ''HH^nu&<=
 	q}.JK}}wwqz
O22U	
 --l;l"""<#89 #r   s   /([!-$&'*-.0-;=?-Z\\^-z|~]+)(?=r  r   s   >>c           	     H   i }d}	 | j                   j                  ||      }|sX| j                  j                  ||      }t        |d uxr |j	                         t        |      k(  dt        ||d        z          n`| j                  |j                  d            }t        |t              sJ | j                  ||j	                               \  }}|||<   |n|}t        d|v xr t        |d   t              d       t        d|v xr t        |d   t              d       |S )Nr   z+name not found in trailer, remaining data: r   rb  z&/Size not in trailer or not an integerra  z1/Root not in trailer or not an indirect reference)re_namematchre_dict_endrT   endrE   r   r   r  ri   rv   	get_valuerW   r\   )r   r  trailerr   r  r   r   value_offsets           r   r  zPdfParser.interpret_trailer  s1   !!,7AOO)),?&TMBaeeg\1B&BA<012
 $$QWWQZ0Cc5)))"%--aeeg"FE< GCL#!F! " 	wD:gg.>#D4	
 	wR:gg.>@Q#R?	
 r   s   ([^#]*)(#([0-9a-fA-F]{2}))?c                ^   d}| j                   j                  |      D ]p  }|j                  d      rI||j                  d      t        j	                  |j                  d      j                  d            z   z  }]||j                  d      z  }r |r|j                  d      S t        |      S )Nr      r   re   zutf-8)re_hashes_in_namefinditerr  r   fromhexrF   rv   )r   rawas_textr   r  s        r   r   zPdfParser.interpret_name  s    &&//4Awwqz
Y%6%6qwwqz7H7H7T%UUU
"	 5
 ;;w'';r   s   null(?=s   true(?=s   false(?=s   ([-+]?[0-9]+)(?=s)   ([-+]?([0-9]+\.[0-9]*|[0-9]*\.[0-9]+))(?=s   \[   ]s   <(s   *)>r  s   ([-+]?[0-9]+)s   R(?=s   obj(?=s	   endobj(?=r  s	   %[^\r\n]*s   )*s   stream\r?\ns   endstream(?=c                   |dk(  ry| j                   j                  ||      }|r|j                         }| j                  j                  ||      }|rt	        t        |j                  d            dkD  d       t	        t        |j                  d            dk\  d       t	        |d u xs? |t        t        |j                  d            t        |j                  d                  k(  d       | j                  ||j                         |dz
        \  }}||d fS | j                  j                  ||      }t	        |d ud	       |J ||j                         fS t	        | d
       | j                  j                  ||      }|rt	        t        |j                  d            dkD  d       t	        t        |j                  d            dk\  d       t        t        |j                  d            t        |j                  d                  |j                         fS | j                  j                  ||      }|r|j                         }i }| j                  j                  ||      }|}	|sh|	J | j                  ||	|dz
        \  }
}	|	|d fS | j                  ||	|dz
        \  }}	|||
<   |	|d fS | j                  j                  ||	      }|sh|j                         }	| j                  j                  ||	      }|r|j                  d      }|t        |t
              sd| d}t!        |      ||j                         |j                         |z    }| j"                  j                  ||j                         |z         }t	        |d ud       |J |j                         }	t%        t'        |      |      |	fS t'        |      |	fS | j(                  j                  ||      }|r|j                         }g }| j*                  j                  ||      }|}	|sT|	J | j                  ||	|dz
        \  }}	|j-                  |       |	|d fS | j*                  j                  ||	      }|sT||j                         fS | j.                  j                  ||      }|rd |j                         fS | j0                  j                  ||      }|rd|j                         fS | j2                  j                  ||      }|rd|j                         fS | j4                  j                  ||      }|r9t7        | j9                  |j                  d                  |j                         fS | j:                  j                  ||      }|r*t        |j                  d            |j                         fS | j<                  j                  ||      }|r*t?        |j                  d            |j                         fS | j@                  j                  ||      }|rtC        d |j                  d      D              }tE        |      dz  dk(  r|j-                  tG        d             tB        jI                  |jK                  d            |j                         fS | jL                  j                  ||      }|r | jO                  ||j                               S dtQ        |||dz           }t!        |      )Nr   )NNr   z<indirect object definition: object ID must be greater than 0r   z;indirect object definition: generation must be non-negativez2indirect object definition different than expected)max_nestingz(indirect object definition end not foundz$indirect object definition not foundz;indirect object reference: object ID must be greater than 0z:indirect object reference: generation must be non-negativer  z&bad or missing Length in stream dict (r   zstream end not foundTFc              3  *   K   | ]  }|d v s|  yw)s   0123456789abcdefABCDEFNrP   r   s     r   rD   z&PdfParser.get_value.<locals>.<genexpr>  s      #%a.G)G:s   	   0re   zunrecognized object:     ))
re_commentr  r  re_indirect_def_startrT   rW   r  r\   r  re_indirect_def_endre_indirect_referencere_dict_startr  re_stream_startr@   ri   rK   re_stream_endr   r   re_array_startre_array_endr   re_nullre_truere_falser  r   r   re_intre_realr  re_string_hexr   rE   r   r  rF   re_string_litget_literal_stringr   )r   r   r   expect_indirectr  r  rx   object_offsetr   current_offsetr   r   
stream_lenr   stream_dataresults
hex_strings                    r   r  zPdfParser.get_value)  s    !NN  v.UUWF%%++D&9"AGGAJ!#N #AGGAJ1$M #4' G"$S_c!''!*oFGD	 %(MMaeeg;? %2 %!FM $t|#''--dMBA"I = =1557?"!G	
 %%++D&9"AGGAJ!#M #AGGAJ1$L %S_c!''!*oFOO##D&1UUWF%'F%%dF3A)/N%111&)mm.kAo '4 '#^ ")!4<'(+.kAo )6 )%~ $s!)!4<'OO))$?  UUWN##))$?A#ZZ	2
%Z
C-HB:,aPC(--"1557QUUWz-AB%%++D!%%'J2FG&q}6LM}$}!" +>NN6?N22$$T62UUWFG  &&tV4A#N%111(+.kAo )6 )%~ u%!)"D=($$**4@  AEEG##KKdF+= KKdF+= LLtV,!%%'>!KKdF+3--aggaj9:AEEGCCJJT6*qwwqz?AEEG++KKdF+$aeeg--##D&1" #771:# J :"a'!!#d),$$Z%6%6z%BCQUUWLL##D&1))$88%d4"+E&F%GHS!!r   sF   (\\[nrtbf()\\])|(\\[0-9]{1,3})|(\\(\r\n|\r|\n))|(\r\n|\r|\n)|(\()|(\))   nr      r      t   	   b      f   r  c                ,   d}t               }| j                  j                  ||      D ]\  }|j                  |||j	                                 |j                  d      r1|j                  | j                  |j                  d      d             n|j                  d      r.|j                  t        |j                  d      dd  d             n|j                  d      rn|j                  d      r|j                  d       nq|j                  d      r|j                  d	       |dz  }nI|j                  d
      r8|dk(  rt        |      |j                         fc S |j                  d       |dz  }|j                         }_ d}t        |      )Nr   r   r      r     r      r     r  zunfinished literal string)r   re_lit_str_tokenr  r   r  r  escaped_charsr   rW   rv   r  rK   )r   r   r   nesting_depthr   r  r   s          r   r  zPdfParser.get_literal_string  sA    %%..tV<AMM$v	23wwqzc//
1>?c!''!*QR.!45e$d#" A% =!%%'11d#"UUWF% =& *S!!r   s   xrefs+   ([0-9]{10}) ([0-9]{5}) ([fn])( \r| \n|\r\n)c                Z   | j                   J d}| j                  j                  | j                   || j                  z         }t	        |d ud       |J |j                         }	 | j                  j                  | j                   |      }|st	        |d       	 |S d}|j                         }t        |j                  d            }t        |j                  d            }t        |||z         D ]  }| j                  j                  | j                   |      }t	        |d ud       |J |j                         }|j                  d      d	k(  }|rbt        |j                  d            }	t        |j                  d            |	f}
|| j                  vs|
| j                  |<    F)
NFzxref section start not foundTzxref subsection start not foundr   r   zxref entry not foundr  r  )r  re_xref_section_startr  r  rT   r  re_xref_subsection_startrW   r  r   re_xref_entryr/  )ra   r  subsection_foundr  r   first_objectnum_objectsrW  is_freerY   	new_entrys              r   r  zPdfParser.read_xref_table  s   xx### &&,,HH)D,=,==
 	q}.LM}}--33DHHfEA&$&G     $UUWFqwwqz?Laggaj/K<)CD&&,,TXXv>&q}6LM}$}''!*,!$QWWQZJ!$QWWQZ* =I/-6* E r   c                   | j                   |d      \  }}t        ||d   k(  d|d    d|d    d| d|        | j                  J | j                  | j                  || j                  z   t        | |      d   }|| j                  |<   |S )Nr   r   zexpected to find generation z for object ID z) in xref table, instead found generation z at offset )r  r  )r/  rT   r  r  r  r\   r!  )ra   rk  r  r   rY   r   s         r   r~  zPdfParser.read_indirect  s    !__SV4
#a& *3q6(/#a& J//9l+fXO	

 xx###HHT&&&-s3#	  

  $)C r   c                    ||n| j                   }t        |d   dk(  d       g }|d   D ]N  }| j                  |      }|d   dk(  r|j                  |       .|j	                  | j                  |             P |S )Nr|  rK  z%/Type of page tree node is not /Pagess   Kidsrj  )node)r)  rT   r~  r   r   r  )ra   r  	page_noder*  kid
kid_objects         r   r  zPdfParser.linearize_page_tree$  s     !,D$2E2E	g(*,S	
 W%C++C0J'"g-S!T55:5FG & r   )NNNr   rb)r  z
str | Noner   zIO[bytes] | Noner  zbytes | bytearray | Noner  rW   r1  rt   rs   r   )rs   r   )r6  rx   rs   r   r   )r   rt   rs   r   )rs   r\   r>   )re  IndirectReference | Noners   r   )rk  zint | IndirectReference | Nonerl  r   rm  r   rs   r\   )rk  r  rl  r   rm  r   rs   r\   )r   r   rs   zbytes | mmap.mmap)r   z
int | Noners   r\   )r  rW   rs   r   )r  rv   rs   zdict[bytes, Any])F)r  rv   r  ry   rs   zstr | bytes)Nr   )
r   bytes | bytearray | mmap.mmapr   rW   r  r  r  rW   rs   ztuple[Any, int | None])r   r  r   rW   rs   ztuple[bytes, int])r  rW   rs   rW   )r   )rk  r\   r  rW   rs   r   )r  zPdfDict | Noners   zlist[IndirectReference])IrL   rM   rN   rO   r   r3  r7  r:  r9  r5  r0  rC  rF  rR  rP  rh  rU  rQ  rN  staticmethodr  r"  rO  	delimiterdelimiter_or_ws
whitespacewhitespace_or_hexwhitespace_optionalwhitespace_mandatorywhitespace_optional_no_nlnewline_onlynewlinerecompileDOTALLr  r  r}  r  re_whitespace_optionalr  r  r  r   r  r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r  r  r  r  r  r  r~  r  rP   r   r   r   r   o  s|     $"(,// / &	/
 / / 
/b
$$*< 8<
4
	
4:1::=:KN:	:+47EH	0; 	 	"(H !I>O/J?$t+%, 7L',69RRGRZZ
	
	 	 		
 	 	 	 	 		 
	 	 			N !bjj
	
	 	 		
 	 	 	 	 		 
	 			O?.:" (RZZ(;<bjj
-	.
	 	G BJJ2V;<M"**069<OOPK < #

#BC
 
 bjj,{:_LuTUGbjj,{:_LuTUGrzz-<NQVVWHRZZ22_DuLF bjj
7	8
	 	G  RZZ 3f <=N2::1E9:LBJJf$'887BM BJJ2V;<M&BJJ
	
	 	 		
 	 	 		 'BJJ
	
	 	 		
 	 	 		 %"**m+o=E ##m3g=FJ !bjj!4!FGOBJJ..@5HM 
 59I"+I" I" 2	I"
 I" 
 I" I"V "rzzRee 	e 	e	
 	e 	d 	d 	u 	D	5 	D	5 	D	5 	D	5 	D	5 	D	4 	D	4  	E
E!M& "0":="	" "6 'BJJ':X'E'OP)rzz
	
	 	 		
 	  BJJNOMB$ &*"	 r   r   )r   rt   rs   rv   )rH   rv   rs   rt   )rR   ry   rS   rt   rs   r   )r   r   rs   rv   )&
__future__r   r   r
   r   r<  r@  r  r   r  typingr   r   r   r   r   r?   rI   r  rK   rT   rV   r\   r|   r   r   r  r   TYPE_CHECKINGr   rt   rv   	_DictBaser   r   r   r   r   rP   r   r   <module>r     s   "     	 	   - -
7*(*(* 	(* 	(	*
 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(* 	(*  	(!*" 	(#*$ 	(%*& 	('*( 	()** 	(+*, 	(-*. 	(/*0 	(1*2 	(3*4 	(5*6 	(7*8 	(9*: 	(;*< 	(=*> 	(?*@ 	(A*B 	(C*D 	(E*F 





S*ZJ	\ 	,
Z 
7. 7(9) 9
[ [|& &RDtCy D
 $$U3:%6%;<I$$I-i -`B B+ +*:C Cr   