
    @wgw                     ,   d Z d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
mZmZmZmZmZmZmZmZmZmZ ddlmZmZ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, ddl#m-Z. ddl/m0Z0m1Z1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z= ddl>m?Z? ddl@mAZAmBZBmCZCmDZDmEZE ddlmFZFmGZG ej                  dk\  rddl	mIZI nddlJmIZI  ej                  eL      ZMdZN ej                  d      ZP G d dee
   e;      ZQ G d dee
e
f   e;      ZR G d deR      ZSde
d dfd!ZT G d" d#eR      ZU G d$ d%eU      ZV G d& d'eU      ZW G d( d)eV      ZX	 d2d*ed+ee   d,edeYeeY   eeZeYf   f   d ee;eZeYeXf   fd-Z[ G d. d/eS      Z\ G d0 d1eS      Z]y)3zMathieu Fenniakzbiziqe@mathieu.fenniak.net    N)BytesIO)ceil)AnyCallableDictIterableListOptionalSequenceSetTupleUnioncast   )PdfReaderProtocolPdfWriterProtocolXmpInformationProtocol)	WHITESPACES
StreamTypedeprecation_no_replacementdeprecation_with_replacementlogger_warningread_non_whitespaceread_until_regexread_until_whitespaceskip_over_comment)CheckboxRadioButtonAttributesFieldDictionaryAttributesOutlineFontFlag)FilterTypes)StreamAttributes)TypArguments)TypFitArguments)STREAM_TRUNCATED_PREMATURELYPdfReadErrorPdfStreamError   )
BooleanObjectByteStringObjectFloatObjectIndirectObject
NameObject
NullObjectNumberObject	PdfObjectTextStringObjectis_null_or_none)Fit)extract_inline_A85extract_inline_AHxextract_inline_DCTextract_inline_defaultextract_inline_RL)read_hex_string_from_streamread_string_from_stream)      )Selfs   +-s   [+-]?(\d+)\s+(\d+)\s+R[^a-zA-Z]c                   "   e Zd Zdedd fdZ	 	 ddededeeee	e
f         dd fdZde
fdZdee   fdZd	edee   fd
Zd	edd fdZd	edefdZd	edefdZ	 ddedede	ef   ddfdZe	 ddedee   dede	ee	   ee
e	f   f   dd fd       Zy)ArrayObjectpdf_destreturnc                     t        d| j                  t               |d            }| D ]@  }t        |d      r!|j	                  |j                  |             0|j	                  |       B |S )Nr>   F	replicate)r   _reference_cloner>   hasattrappendrB   )selfr?   arrdatas       U/var/www/horilla/myenv/lib/python3.12/site-packages/pypdf/generic/_data_structures.pyrB   zArrayObject.replicatej   sh     !!+-5A
  	!Dt[)

4>>(34

4 		!
 
    force_duplicateignore_fieldsc                    	 | j                   j                  |k(  r|s| S t        d| j	                  t               ||            }| D ]  }t        |t              r@|j	                  |j                  |||      ||      }|j                  |j                          St        |d      r#|j                  |j                  |||             |j                  |        |S # t        $ r Y w xY w)Clone object into pdf_dest.r>   clone)indirect_referencepdf	Exceptionr   rC   r>   
isinstanceStreamObjectrO   rE   rD   )rF   r?   rK   rL   rG   rH   dups          rI   rO   zArrayObject.cloney   s    	&&**h6 !!+-?K
  	!D$-++JJx-H#
 

3112w'

4::hOP

4 	! 
%  		s   C 	C)(C)c                 P    t        | j                  t        d | D              f      S )q
        Used to detect modified object.

        Returns:
            Hash considering type and value.

        c              3   <   K   | ]  }|j                           y wNhash_bin).0xs     rI   	<genexpr>z'ArrayObject.hash_bin.<locals>.<genexpr>   s     *FA1::<*Fs   )hash	__class__tuplerF   s    rI   r[   zArrayObject.hash_bin   s#     T^^U*F*F%FGHHrJ   c                     t        |       S )z:Emulate DictionaryObject.items for a list (index, object).)	enumeraterb   s    rI   itemszArrayObject.items   s    rJ   lstc                    t        |t        t        t        f      r	 |S t        |t              r|g}|S t        |t
              r$|d   dk(  rt        |      g}|S t        |      g}|S t        |t              rt        |      g}|S |g}|S )Nr   /)
rS   listra   setr/   strr,   r0   bytesr)   rF   rf   s     rI   _to_lstzArrayObject._to_lst   s    cD%-. 
 Y'%C 
 S!1v}!#' 
 (,-
 
	 U##C()C 
 %C
rJ   c                 \    t        |       }|j                  | j                  |             |S )a  
        Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        Returns:
            ArrayObject with all elements

        )r>   extendrn   )rF   rf   temps      rI   __add__zArrayObject.__add__   s(     4 DLL%&rJ   c                 F    | j                  | j                  |             | S )a  
         Allow extension by adding list or add one element only

        Args:
            lst: any list, tuples are extended the list.
            other types(numbers,...) will be appended.
            if str is passed it will be converted into TextStringObject
            or NameObject (if starting with "/")
            if bytes is passed it will be converted into ByteStringObject

        )rp   rn   rm   s     rI   __iadd__zArrayObject.__iadd__   s     	DLL%&rJ   c                 z    | j                  |      D ]  }	 | j                  |      }| |=  | S # t        $ r Y 'w xY w)zAllow to remove items)rn   index
ValueError)rF   rf   r]   s      rI   __isub__zArrayObject.__isub__   sN    c" 	AJJqMG	   s   .	::Nstreamencryption_keyc                     |t        dd       |j                  d       | D ]$  }|j                  d       |j                  |       & |j                  d       y )N/the encryption_key parameter of write_to_stream5.0.0   [    s    ])r   writewrite_to_stream)rF   ry   rz   rH   s       rI   r   zArrayObject.write_to_stream   s\     %&A7 	T 	)DLL  (	) 	UrJ   rQ   forced_encodingc                    t               }| j                  d      }|dk7  rt        d      	 | j                  d      }|j                         r"| j                  d      }|j                         r"|dk(  r| j	                  dd       t        |        g| j	                  dd       | j                  d      }|dk(  r	 |S | j	                  dd       |j                  t        | ||             )Nr'   r~   zCould not read array   %   ])r>   readr%   isspaceseekr   rE   read_object)ry   rQ   r   rG   tmptok
peek_aheads          rI   read_from_streamzArrayObject.read_from_stream   s     mkk!n$;566++a.C++-kk!n ++-d{B"!&)KKAQJT! 
 KKAJJ{63@A! rJ   F rY   )__name__
__module____qualname__r   rB   boolr
   r   r   rk   intrO   r[   r   r   re   r	   rn   rr   r<   rt   rx   r   rl   r   staticmethodr   r   r   r   rJ   rI   r>   r>   i   s[   # 
$ !&=?	#   sCx 9:	
 
<I# Ix} 3 49 "3 = &C D C D  MQ 27c58H2I	  HL'( tS$s)T#s(^CD 
	 rJ   r>   c                      e Zd Zdedd fdZ	 	 ddededeeee	e
f         dd fdZdd dededeeee	e
f         deee
e
f      dd	fd
Zde
fdZdedefdZdde	dedefdZdededefdZddedee   defdZdedefdZedee   fd       Z	 ddeded	e	ef   dd	fdZe	 ddedee   ded	e	ee	   e e
e	f   f   dd fd       Z!y	)DictionaryObjectr?   r@   c                     t        d| j                  | j                         |d            }| j                         D ]6  \  }}t	        |d      r|j                  |      n|||j                  |      <   8 |S )Nr   FrB   )r   rC   r`   re   rD   rB   )rF   r?   d__kvs        rI   rB   zDictionaryObject.replicate  sv     !!$.."2HeD
 JJL 	DAq)0K)@H%a H%&	 
rJ   rK   rL   c                 4   	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                         ||            }|g }t        |j                               dk(  r|j                  | ||||       |S # t        $ r Y ww xY w)rN   r   r   )
rP   rQ   rR   rj   r   rC   r`   lenkeys_clonerF   r?   rK   rL   visitedr   s         rI   rO   zDictionaryObject.clone  s    	&&**h6 ),!!$.."2HoN
  Msxxz?aJJtXwO
  		s   B 	BBsrcr   Nc           
      &   d}J t              |t              k  rQt        |   t              r*t	        t        |         dk  r|= |= >|xx   dz  cc<   |dz  }|t              k  rQt        fddD              rt              dD ]  }|D ]  }g }	|v s|| vst        j                  |      t              s0t        |   t              sDj                  dd      Zt	        t        |         j                  dd      7j                  dd      t	        t        |         j                  dd      k(  st	        d|         }
| }|
t	        d|
j                  |
j                         ||            }|j                  H|j                  j                  }|j                  j                  }||f|v rd}
n_|j                  ||f       |	j!                  |
|f       |J |j                  |t#        |      <   |}	 |
k(  rd}
nt	        d|
|         }
|
|	D ]  \  }}|j'                  ||||          j)                         D ]  \  }}|vst        |t*              rSt-        |d	      sd|_        |j/                  ||      }|j                  J |j                  | |j/                  |      <   n|| vsst-        |d
      r|j/                  ||      n|| t#        |      <    y# t$        $ r d}
Y w xY w)z
        Update the object from src.

        Args:
            src: "DictionaryObject":
            pdf_dest:
            force_duplicate:
            ignore_fields:

        r   Nr'   c              3     K   | ]  }|vxr |v xr t        j                  |      t              xr t        |   t              xrs j	                  d d      du xs] t        t        |         j	                  d d      du xs6 j	                  d d      t        t        |         j	                  d d      k(    yw)/TypeN)rS   raw_getr+   r   getr   )r\   fieldrL   r   s     rI   r^   z*DictionaryObject._clone.<locals>.<genexpr>U  s      
  & 		3;;u-~>	 3u:'78	
 &$. I(#e*599'4HDPI777D)(#e*599'4HI	
s   B?C)/Next/Prev/N/V))r   r   )r   r   r   r   rP   rO   )ri   r   rS   r   r   anyr   r+   r   r   rC   r`   rP   idnum
generationaddrE   r,   rR   r   re   rT   rD   rO   )rF   r   r?   rK   rL   r   r]   rf   r   objscur_objprev_objclonr   r   scr   vvs    `  `              rI   r   zDictionaryObject._clone4  s`   ( (((]+#m$$-*C0]1-.!3%a(%a(!!$)$FA #m$$  
 8
 
 !/M9 2 1ADSTM&s{{1~~F&s1v/?@  GGGT2:#$4c!f=AA'4PX"www5#$4c!f=AA'4P Q ?C.A? @D%1#' 2 ' 8 8$+$5$5$7?!"$D  $66B(,(?(?(E(E-1-D-D-O-O
$):#6'#A.2G$) 'UJ,? @ KK$8#+#77#76:6M6MHZ]3'+H/#*c>.2G.23Ewqz.RG/ &14 %) DAqHH !8_mW]12h IIK 	DAq%a."1&:;/3,?MJB00<<<.0.C.CD*+d] #1g. /=I A'	 $- /*./s   LLLc                 l    t        | j                  t        d | j                         D              f      S )rW   c              3   F   K   | ]  \  }}||j                         f  y wrY   rZ   )r\   r   r   s      rI   r^   z,DictionaryObject.hash_bin.<locals>.<genexpr>  s     #O$!QQ

$5#Os   !)r_   r`   ra   re   rb   s    rI   r[   zDictionaryObject.hash_bin  s.     ^^U#O$**,#OPQ
 	
rJ   keyc                 .    t         j                  | |      S rY   )dict__getitem__rF   r   s     rI   r   zDictionaryObject.raw_get  s    c**rJ   defaultc                     || v r| |   S 	 d| vr|S t        d      # t         $ r0 t        d| d   j                               j                  ||      cY S w xY w)a>  
        Returns the value of a key or from the parent if not found.
        If not found returns default.

        Args:
            key: string identifying the field to return

            default: default value to return

        Returns:
            Current key or inherited one, otherwise default value.

        /ParentzNot presentr   )KeyErrorr   
get_objectget_inherited)rF   r   r   s      rI   r   zDictionaryObject.get_inherited  sn     $;9	$=)) 	*DO,F,F,HIWWW 	s     6AAvaluec                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S NzKey must be a PdfObjectzValue must be a PdfObject)rS   r/   rw   r   __setitem__rF   r   r   s      rI   r   zDictionaryObject.__setitem__  sC    #y)677%+899c511rJ   c                     t        |t              st        d      t        |t              st        d      t        j	                  | ||      S r   )rS   r/   rw   r   
setdefaultr   s      rI   r   zDictionaryObject.setdefault  sA    #y)677%+899tS%00rJ   c                 J    t         j                  | |      j                         S rY   )r   r   r   r   s     rI   r   zDictionaryObject.__getitem__  s    c*5577rJ   c                     ddl m} | j                  dd      }t        |      ry|j	                         }t        ||      s ||      }|| t        d      <   |S )u  
        Retrieve XMP (Extensible Metadata Platform) data relevant to the this
        object, if available.

        See Table 347 — Additional entries in a metadata stream dictionary.

        Returns:
          Returns a :class:`~pypdf.xmp.XmpInformation` instance
          that can be used to access XMP metadata from the document. Can also
          return None if no metadata was found on the document root.

        r   )XmpInformationz	/MetadataN)xmpr   r   r1   r   rS   r,   )rF   r   metadatas      rI   xmp_metadatazDictionaryObject.xmp_metadata  sX     	)88K.8$&&((N3%h/H,4DK()rJ   ry   rz   c                 n   |t        dd       |j                  d       t        | j                               D ]i  \  }}t	        |      dkD  r|d   dk(  r	|d   dk(  r%|j                  ||       |j                  d       |j                  |       |j                  d	       k |j                  d
       y )Nr|   r}      <<
r   r'   %r   r      
   >>)r   r   ri   re   r   r   )rF   ry   rz   r   r   s        rI   r   z DictionaryObject.write_to_stream  s     %&A7 	Wtzz|, 	 JC3x!|A##b'S.7LL!!&)LL	  	UrJ   rQ   r   c           
      
   dt         dt         dt        t            dt        dt         f
ddt        dt        dt        ffd}| j                  d	      }|d
k7  r&t        dt        | j                                d      i }	 t        |       }|dk(  r|dk(  r| j                  dd       t        |        5|st        t              |dk(  r| j                  d       n| j                  dd       	 	 t        | |      }t        |t               rnt        |t"              st        d|      	 t        |       }| j                  dd       t        | ||      }	|j3                  |      s|	||<   nHdt        | j                                d| }||j$                  rt        |      t'        |t*               7| j                         }t        |       }|dk(  rz| j                  d      dk(  re| j                  d      }|dk(  r| j                  d      }|dk(  r|dvrt        d      |dk(  r&| j                  d      dk7  r| j                  dd       t4        j6                  |vr_||j$                  rt        d      t'        d| j                          t*               t9        d      |t#        t4        j6                        <   |t4        j6                     }t        |t:              r7| j                         }|J |j=                  |      }| j                  |d       |d}| j                         }|dkD  r| j                  |      |d <   n"t?        | tA        jB                  d!            |d <   t        |       }| j                  d"      }||z   d!k7  r| j                         }| j                  d#d       | j                  d$      }|d!k(  r|d    d d |d <   n|;|j$                  s/| j                  |d        || |      |d <   | j                         }nP| j                  |d       t        d%t        | j                                d&|d'|d(      | j                  |d       d |v rtD        jG                  |      S t/               }
|
j1                  |       |
S # t        $ r8}||j$                  r t'        |j)                         t*               Y d }~Wd }~ww xY w# t,        $ rl}|%|j$                  rt        |j)                               t'        |j)                         t*               t/               }
|
j1                  |       |
cY d }~S d }~ww xY w))Npp1rem_gensrQ   r@   c                     |}|D ]R  }|j                   |   }	 t        |t        |j                         D cg c]  }| |cxk  r|k  sn n| c}            }T |S c c}w # t        $ r Y gw xY wrY   )xrefminvaluesrw   )r   r   r   rQ   outgenlocr]   s           rI   get_next_obj_posz;DictionaryObject.read_from_stream.<locals>.get_next_obj_pos  su     C hhsmc33::<'Oa1q;B;'O#PQC J (P! s(   A!AAA!A!!	A-,A-ry   c                 N    | j                         dt        |j                        |      dz
  }| j                         }| j                  || j                         z
        }|j	                  d      }|dk  rt        d| d      | j                  ||z   dz          |d |dz
   S )Nl        r'   	   endstreamr   z6Unable to find 'endstream' marker for obj starting at .	   )tellri   r   r   findr%   r   )ry   rQ   eoncurrrwr   r   s         rI   read_unsized_from_streamzCDictionaryObject.read_from_stream.<locals>.read_unsized_from_stream  s     #6;;=%chhMPQQC;;=DS6;;=01B%A1u"LTFRST  KKq1%gA;rJ   r      <<zDictionary read error at byte z: stream must begin with '<<'    r   r   r'      >z)Expecting a NameObject for key but found z+Multiple definitions in dictionary at byte z	 for key    s   s   treamr   )r      z)Stream data must be followed by a newliner   r   zStream length not definedzStream length not defined @pos=r   __streamdata__r      ir   z7Unable to find 'endstream' marker after stream at byte z (nd='z', end='z').)$r   r	   r   r   rl   r   r%   hexr   r   r   r   r&   r$   r   rS   r-   r,   strictr   __repr__r   rR   r   updater   SALENGTHr.   r+   r   r   recompilerT   initialize_from_dictionary)ry   rQ   r   r   r   rH   r   r   excr   retvalmsgposr   eollengthtpstartendstreamendr   s                        @rI   r   z!DictionaryObject.read_from_stream
  s	   
	
	
	'+Cy
	7H
	
			%6		 kk!n%<0V[[]1C0D E. .   "%f-Cg~B"!&)$%ABBd{AKKA%fc2C!#z2%c:6*GwO  7 *&1B"#FCA 88C=!S	 B6;;=)*)C5:  ?szz&s++sH-e h kkm'9Q83++a.C +kk!n +.($%PQQe|A% 7B"yy$?szz()DEE"9&++-I8 /;2.>Z		*+"))_F&.1KKM&/Aq!~[[]Fz)/V)<%&)9BJJ|4*%& $F+A{{1~HH- kkmC#kk!n,&-12B-CCR-HD)*_SZZKK*-Efc-RD)* ++-CKKQ'&Qv{{}-.fXLsT 
 KKQt#::4@@%'FMM$MA $ 3::"3<<>8<	  ?szz&s||~66s||~x8)+d#sI   2R R -+S  	S%-SS  SS   	U)A!U
UUr   rY   )"r   r   r   r   rB   r   r
   r   r   rk   r   rO   r   r   r   r[   r   r   r   r   r   r/   r   propertyr   r   r   rl   r   r   r   r	   r   r   r   rJ   rI   r   r     s   # 
" !&=?	#   sCx 9:	
 
0pp $p 	p
  sCx 9:p U38_%p 
pd

# 

+3 +3 + s c 22s 23 23 21c 1(3- 13 18s 8y 8 h'=>  4 MQ 27c58H2I	"  HL__'(_ tS$s)T#s(^CD_ 
	_ _rJ   r   c                      e Zd Zddee   ddfdZdefdZdefdZ	de
e   fdZded	eddfd
Zdeded f   deddfdZdeded f   deddfdZ	 ddeded	edeedef      def
dZdededededdf
dZdeddfdZddZddZy)
TreeObjectNdctr@   c                 V    t         j                  |        |r| j                  |       y y rY   )r   __init__r   )rF   r  s     rI   r  zTreeObject.__init__  s$    !!$'KK rJ   c                 
    d| v S )N/Firstr   rb   s    rI   has_childrenzTreeObject.has_children  s    4rJ   c                 "    | j                         S rY   )childrenrb   s    rI   __iter__zTreeObject.__iter__  s    }}rJ   c              #     K   | j                         sy | t        d         }|j                         }	 | || t        d         k(  ry |j                  t        d            }t	        |      ry |j                         }Mw)Nr  /Lastr   )r  r,   r   r   r1   )rF   	child_refchilds      rI   r  zTreeObject.children  s       "H-.	$$&KZ011		*W"56Iy)((*E s   A>B r  rQ   c                 *    | j                  |d |       y rY   )insert_child)rF   r  rQ   s      rI   	add_childzTreeObject.add_child  s    %s+rJ   parentnc                 ,   t        |      ry |J d       t        d|j                               }d|v rat        t	        dt        t
        |t        d               |z               |t        d      <   | j                  |j                  dd       |       y y )Nmypyr  /Countr   r   )	r1   r   r   r.   maxr   r,   inc_parent_counter_defaultr   )rF   r  r  s      rI   r#  z%TreeObject.inc_parent_counter_default  s     6"!)6)!lF$5$5$78v+7AtC
8(<!=>BC,F:h'( ++FJJy$,GK	 rJ   c                 x   t        |      ry |J d       t        d|j                               }|j                  dd      dk(  }t        t        |j                  dd            }|dk  rt        |      }t        ||z   |rdndz        |t        d      <   |sy | j                  |j                  d	d       |       y )
Nr   r  z
/%is_open%Tr!  r   r'   r   r   )	r1   r   r   r   r   absr.   r,   inc_parent_counter_outline)rF   r  r  opnr   s        rI   r&  z%TreeObject.inc_parent_counter_outline  s     6"!)6)!lF$5$5$78jjt,4fjj1-.q5AA'3QUCqR4P'Qz(#$''

9d(CQGrJ   beforeinc_parent_counter.c                    || j                   }|j                         }|j                  }d| vrt|| t        d      <   t	        d      | t        d      <   || t        d      <   | j                  |t        d      <    || |j                  dd             d|v r|d= d|v r|d= |S t        d	| d         }|j                  |k7  rd|v rt        d
|d         }nxt        d
|      |t        d      <   |j                  |t        d      <   | j                  |t        d      <   d|v r|d= || t        d      <    || |j                  dd             |S |j                  |k7  r	 t        |d   t              sJ ||d   t        d      <   |d   |t        d      <   ||t        d      <   ||t        d      <   | j                  |t        d      <    || |j                  dd             |S # t        $ r |d= Y ]w xY w)Nr  r   r!  r  r   r'   r   r   r   r  )
r#  r   rP   r,   r.   r   r   rS   r   rR   )rF   r  r(  rQ   r)  	child_objprevs          rI   r  zTreeObject.insert_child  s     %!%!@!@$$&	(( 4).DH%&)5aDH%&(-DG$%/3/F/FIj+,tY]]8Q%?@)#g&)#g&L*DM:D%%/$L$w-8,0u,EZ()151H1H	*W-.373J3J	*Y/0i'!'*,1Z()"4x)CD %%/	#d7m-=>>>16DM*W-.-1']Ij)* *.	*W%&$)Z !+/+B+B	*Y'(4x!;<  	#'"	#s   7G$ $G32G3r,  prev_refcurlastc                 L   |j                  t        d      d      }||rQ|j                         }|t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   yt        d      | t        d      <   | t        d      = t        d      | v r| t        d      = yy|r-|j                         }||t        d      <   ||t        d      <   n!||k(  sJ |t        d      = || t        d      <   t        | t        d         dz
        | t        d      <   y)	z
        Adjust the pointers of the linked list and tree node count.

        Args:
            prev:
            prev_ref:
            cur:
            last:

        r   Nr   r  r!  r'   r   r  )r   r,   r   r.   )rF   r,  r-  r.  r/  next_refnext_objs          rI   _remove_node_from_treez!TreeObject._remove_node_from_tree  s1    77:g.5<#..0Z01-5Z)*-9H-.2.Z)* .:!_Z)*H-.g&$.Z01 / #..008G,-,4Z() d{"{G,-,4Z())5d:h;O6PST6T)UDH%&rJ   c                    |j                         }|j                  }t        d      |vrt        d      |t        d         | k7  rt        d      d}d }d }| t        d         }|j                         }| t        d         }|j                         }	|S||k(  r| j	                  ||||	       d}n7|}|}t        d      |v r|t        d         }|j                         }nd }d }|S|st        d	      t        |       y )
Nr   /Removed child does not appear to be a tree itemz*Removed child is not a member of this treeFr  r  Tr   z"Removal couldn't find item in tree)r   rP   r,   rw   r3  _reset_node_tree_relationship)
rF   r  r+  foundr-  r,  cur_refr.  last_refr/  s
             rI   remove_childzTreeObject.remove_childG  s$   $$&	,,i 	1NOOz),-5IJJ!%j&:!;(/(:(:(<
7+,""$oi++D(CF HD'"c)j12((* o  ABB%i0rJ   c                 p    t        d      | vrt        d      t        d| d         j                  |        y)z)Remove the object from the tree it is in.r   r5  r  N)r,   rw   r   r:  rb   s    rI   remove_from_treezTreeObject.remove_from_treel  s4    i ,NOOtI/<<TBrJ   c                     | D ]  }|j                         }t        |        t        d      | v r| t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = y y )Nr!  r  r  )r   r6  r,   )rF   r  r+  s      rI   
empty_treezTreeObject.empty_trees  s|     	5E((*I))4	5 h4'Z)*h4'Z)*g$&Z() 'rJ   rY   r@   N)r   r   r   r
   r   r  r   r  r   r  r   r  r   r  r   r+   r   r#  r&  r   r  r3  r:  r<  r>  r   rJ   rI   r  r    sU   H%56 $ 
 d  # +(3- +,s ,): ,t ,LD.,>?LDGL	LHD.,>?HDGH	H, <@11 1 	1
 %Xc3h%781 
1f)V)V#&)V-0)V8;)V	)VV#1# #1$ #1JC
*rJ   r  r+  r@   c                     | t        d      = t        d      | v r| t        d      = t        d      | v r| t        d      = yy)z
    Call this after a node has been removed from a tree.

    This resets the nodes attributes in respect to that tree.

    Args:
        child_obj:

    r   r   r   N)r,   )r+  s    rI   r6  r6    sJ     	*Y'('i'j)*'i'j)* (rJ   c                   B    e Zd ZddZdedd fdZdedededee	e
eef         d	eeeef      ddf fd
Zdef fdZdefdZdeddfdZdef fdZ	 ddede
deef   ddfdZedeeef   ddfd       Zedeeef   de
d   fd       ZddeddfdZdefdZ xZS )rT   r@   Nc                      d| _         d | _        y NrJ   )_datadecoded_selfrb   s    rI   r  zStreamObject.__init__  s    
;?rJ   r?   c                    t        d| j                  | j                         |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)NrT   FDecodedStreamObjectrB   )	r   rC   r`   rD  rE  rB   rR   re   rD   rF   r?   r   rE  r   r   s         rI   rB   zStreamObject.replicate  s     !!$.."2HeD
 JJ			,,L#$(!$()<+A+A(+K%!
 JJL 	DAq)0K)@H%a H%&	 
  		s   6B? ?	C
Cr   rK   rL   r   c                    t        d|      j                  | _        	 t        d|      j                  }|d| _        n"t        d|j                  |||            | _        t
        |   |||||       y# t        $ r Y w xY w)
        Update the object from src.

        Args:
            src:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        rT   NrG  )r   rD  rE  rO   rR   superr   )rF   r   r?   rK   rL   r   rE  r`   s          rI   r   zStreamObject._clone  s    $ .#.44

	4AAL#$(!$() &&x-P%! 	sHo}gN  		s   AA4 4	B ?B c                 J    t        t        | 	         | j                  f      S )rW   )r_   rK  r[   rD  )rF   r`   s    rI   r[   zStreamObject.hash_bin  s!     UW%'455rJ   c                     | j                   S rY   rD  rb   s    rI   get_datazStreamObject.get_data  s    zzrJ   rH   c                     || _         y rY   rN  )rF   rH   s     rI   set_datazStreamObject.set_data  s	    
rJ   c                 B    t         |          }|| j                  z  }|S rY   )rK  hash_value_datarD  rF   rH   r`   s     rI   rS  zStreamObject.hash_value_data  s#    w&(

rJ   ry   rz   c                 X   |t        dd       t        t        | j                              | t	        t
        j                        <   t        j                  | |       | t
        j                  = |j                  d       |j                  | j                         |j                  d       y )Nr|   r}   s   
stream
s
   
endstream)
r   r.   r   rD  r,   r   r   r   r   r   )rF   ry   rz   s      rI   r   zStreamObject.write_to_stream  s|     %&A7 '33tzz?&CZ		"#((v6O]#TZZ ^$rJ   c                     t        ddd       y )NinitializeFromDictionaryr   r}   )r   )rH   s    rI   rW  z%StreamObject.initializeFromDictionary  s    $&(Dg	
rJ   )EncodedStreamObjectrG  c                     t         j                  | v rt               }n
t               }| d   |_        | d= t         j
                  | v r| t         j
                  = |j                  |        |S )Nr   )r   FILTERrX  rG  rD  r   r   )rH   r   s     rI   r   z'StreamObject.initialize_from_dictionary  s^    
 99(*F(*F,-!"99RYYdrJ   levelrX  c           	         ddl m} t        j                  | v r| t        j                     }t	        |t
              rct        t        t        j                        g|      }	 t        t               g| j                  t        j                  t                           }n{t        t        t        j                        |g      }t        t               | j                  t        j                  t                     g      }nt        t        j                        }d }t               }|j                  |        ||t        t        j                        <   |||t        t        j                        <   |j                  | j                   |      |_        |S # t        $ r> t        t               | j                  t        j                  t                     g      }Y w xY w)Nr   FlateDecode)filtersr^  r   rZ  rS   r>   r,   FTFLATE_DECODEr-   r   DECODE_PARMS	TypeErrorrX  r   encoderD  )rF   r[  r^  fparamsr   s         rI   flate_encodezStreamObject.flate_encode	  sW   )99RYYA![)BOO!< Aq AB(#Q+-(PQF  BOO!<a @A$\488BOOZ\#JK 2??+AF$&d()z"))$%28F:boo./"))$**e<' ! (#txx'OPFs   "<F AGGc                     ddl m} | j                  dd      dk7  r 	 | j                   d}t        |t                ||       \  }}}|y|S # t        $ r | j                          d}Y ?w xY w)	a~  
        Try to decode the stream object as an image

        Returns:
            a PIL image if proper decoding has been found
        Raises:
            Exception: (any)during decoding to to invalid object or
                errors during decoding will be reported
                It is recommended to catch exceptions to prevent
                stops in your program.

        r   )_xobj_to_imagez/Subtype z/Imagez does not seem to be an Imagez$ object does not seem to be an ImageN)r_  ri  r   rP   AttributeErrorr   r   r   )rF   ri  r  	extensionbyte_streamimgs         rI   decode_as_imagezStreamObject.decode_as_image)  s     	-88J#x/O0011NO 3)&4T&:#	;
 " O))MNOs   A A,+A,r?  rY   )r   )r   r   r   r  r   rB   r   r   r
   r   r   rk   r   r   r   r   r[   rl   rO  rQ  rS  r   r   r   r   r   rW  r   rg  ro  __classcell__r`   s   @rI   rT   rT     sj   @# 
2OO $O 	O
  sCx 9:O U38_%O 
O@	6# 	6% U t   MQ% %27c58H2I%	% 
tCH~ 
$ 
 

 38n	;	< # /D @ rJ   rT   c                       e Zd Zy)rG  N)r   r   r   r   rJ   rI   rG  rG  D  s    rJ   rG  c                   <     e Zd ZddZdefdZdeddf fdZ xZS )rX  r@   Nc                     d | _         y rY   )rE  rb   s    rI   r  zEncodedStreamObject.__init__I  s
    ;?rJ   c                 z   ddl m} | j                  | j                  j                         S t	               }|j                   ||              t        | j                               D ]<  \  }}|t        j                  t        j                  t        j                  fvs8|||<   > || _        |j                         S )Nr   )decode_stream_data)r_  rv  rE  rO  rG  rQ  ri   re   r   r   rZ  rb  )rF   rv  decodedr   r   s        rI   rO  zEncodedStreamObject.get_dataM  s    0($$--// *+G/56"4::<0 )
Uryy"))R__EE#(GCL) !(D##%%rJ   rH   c                    ddl m} | j                  t        j                  d      t
        j                  t
        j                  gfv rt        |t              st        d      | j                  | j                          | j                  J d       | j                  j                  |       t        | 1  |j                  |             y t        d      )Nr   r]  rj  zData must be bytesr   zJStreams encoded with a filter different from FlateDecode are not supported)r_  r^  r   r   rZ  r`  ra  rS   rl   rc  rE  rO  rQ  rK  rd  r%   )rF   rH   r^  r`   s      rI   rQ  zEncodedStreamObject.set_data_  s    )88BIIr"r8I&JJdE* 455  ($$08&80&&t,G[//56\ rJ   r?  )r   r   r   r  rl   rO  rQ  rp  rq  s   @rI   rX  rX  H  s-    @&% &$U t  rJ   rX  c                       e Zd ZdZ	 ddedededeee   ee	ef   f   ddf fdZ
dedd fd	Z	 	 dded
edeeeee	f         dd fdZdeded
edeeeee	f         deee	e	f      ddf fdZdeddfdZdedeeef   fdZdefdZdeddf fdZedeeeef      fd       Zej:                  deeeef      ddfd       ZddZ	 ddededeef   ddf fdZ xZ S )ContentStreama  
    In order to be fast, this data structure can contain either:

    * raw data in ._data
    * parsed stream operations in ._operations.

    At any time, ContentStream object can either have both of those fields defined,
    or one field defined and the other set to None.

    These fields are "rebuilt" lazily, when accessed:

    * when .get_data() is called, if ._data is None, it is rebuilt from ._operations.
    * when .operations is called, if ._operations is None, it is rebuilt from ._data.

    Conversely, these fields can be invalidated:

    * when .set_data() is called, ._operations is set to None.
    * when .operations is set, ._data is set to None.
    Nry   rQ   r   r@   c                    || _         g | _        |t        |   d       || _
        y |j	                         }t        |t              rfd}|D ]?  }||j	                         j                         z  }t        |      dk(  s	|d   dk7  s;|dz  }A t        |   t        |             || _
        y |j                         }|J t        |   |       || _
        y )NrJ   r   r   r   )rQ   _operationsrK  rQ  r   rS   r>   rO  r   rl   r   )rF   ry   rQ   r   rH   r   stream_datar`   s          rI   r  zContentStream.__init__  s     
 57 >GS!  / &&(F&+. &AALLN3355D4yA~bU):&  t-
  / %oo/"... -.rJ   r?   c           	         t        d| j                  | j                  d d       |d            }| j                  |_        	 | j                  }|d | _        n t        d|j                  |            | _        | j                         D ]6  \  }}t        |d      r|j                  |      n|||j                  |      <   8 |S # t        $ r Y Vw xY w)Nrz  FrG  rB   )r   rC   r`   rD  rE  rB   rR   re   rD   rQ  rQ   ri   r|  r   rH  s         rI   rB   zContentStream.replicate  s     !!$..t"<hN
 JJ			,,L#$(!$()<+A+A(+K%!
 JJL 	DAq)0K)@H%a H%&	 
  		s    6C 	CCrK   rL   c           	          	 | j                   j                  |k(  r|s| S t               }t	        d| j                  | j                  dd      ||            }|g }|j                  | ||||       |S # t        $ r Y ]w xY w)z
        Clone object into pdf_dest.

        Args:
            pdf_dest:
            force_duplicate:
            ignore_fields:

        Returns:
            The cloned ContentStream

        rz  N)rP   rQ   rR   rj   r   rC   r`   r   r   s         rI   rO   zContentStream.clone  s    $	&&**h6 ),!!tT*Ho
  M

4?M7K
  		s   A1 1	A=<A=r   r   c                     t        d|      }t        | 	  |j                         || _        t        |j                        | _        |j                  | _        y)rJ  rz  N)r   rK  rQ  rD  rQ   ri   r|  r   )rF   r   r?   rK   rL   r   src_csr`   s          rI   r   zContentStream._clone  sJ    $ os+& 2 23%55rJ   c                    |j                  dd       g }	 t        |      }|dk(  s|dk(  ry |j                  dd       |j                         s|dv rut        |t        j
                        }|dk(  r6|g k(  sJ | j                  |      }| j                  j                  |df       nf| j                  j                  ||f       g }nF|dk(  r|d	vr=|j                  d      }|d	vrn&|j                  t        |d | j                               )
Nr   rJ   r   r'   )   '   "   BI   INLINE IMAGEr   )r   r   rJ   )r   r   isalphar   r,   delimiter_pattern_read_inline_imager|  rE   r   r   r   )rF   ry   operandspeekoperatoriis         rI   _parse_content_streamz#ContentStream._parse_content_stream  s   Aq57&v.Ds{daiKKA||~!5+FJ4P4PQu$ $r>)>008B$$++R,AB$$++Xx,@A!H "55!;;q>D "55 FD$:N:N OP3 rJ   c           	         t               }	 t        |      }|j                  dd       |dk(  rnOt        || j                        }t        |      }|j                  dd       t        || j                        }|||<   r|j                  d      }|d d dk(  sJ |j                  d|j                  dd	            }|j                         }t        |t              r|d
   }d|v sd|v rt        |      }	nd|v sd|v rt        |      }	nd|v sd|v rt        |      }	nd|v sd|v rt        |      }	n|d	k(  r|j                  dd      }
d|
v rd}n7d|
v rd}n0|j                  d|
dv rdnd      }|d
kD  r|dz  }nt        |      }	d}|d
kD  rB|j                  t        t!        t"        |d         |z        t!        t"        |d         z        }	t        |      }|j                  dd       nt        |      }	|j                  d      }|j                  dd       |d
d dk7  s|dd t$        vr|j                  |d
       t        |      }	|	dS ) Nr   r'      Ir:   r   s   ID/Fz/Filterznot setr   AHxASCIIHexDecodeA85ASCII85DecodeRLRunLengthDecodeDCT	DCTDecodez/CSrj  RGBCMYK   z/BPC>   /G/I/Indexed/DeviceGrayr   g       @z/Wz/H   EI)settingsrH   )r   r   r   r   rQ   r   r   r   rS   ri   r4   r3   r7   r5   r6   r   r   r   r   )rF   ry   r  r   r   r   r   filtrsavposrH   cslcsbitseis                 rI   r  z ContentStream._read_inline_image   s^    $%%f-CKKAd{fdhh/C%f-CKKA1E!HSM  kk!n2Aw%T8<<	9#EFeT"!HEE>-6%f-De^%7%f-DU]/58$V,De^{e3%f-DieR(B{2||FFAB !8*C1&9DCQw{{c8D>2S89Dhtn<UU %V,BKKA)&1D[[^Ba7er!Awk9KK")&1D$d33rJ   c                 J   | j                   st               }| j                  D ]  \  }}|dk(  r|j                  d       t               }|d   j	                  |       |j                  |j                         dd        |j                  d       |j                  |d          |j                  d       n:|D ]$  }|j	                  |       |j                  d	       & |j                  |       |j                  d
        |j                         | _         | j                   S )Nr  r  r  r   s   ID rH   r  r   r   )rD  r   r|  r   r   getvalue)rF   new_datar  r  	dict_textops         rI   rO  zContentStream.get_data_  s    zzyH&*&6&6 &"(.NN5) '	IZ(88CNN9#5#5#7"#=>NN6*NN8F#34NN5)& -**84 t,- NN8,u%& "**,DJzzrJ   rH   c                 2    t         |   |       g | _        y rY   )rK  rQ  r|  rT  s     rI   rQ  zContentStream.set_datau  s    rJ   c                     | j                   s7| j                  r+| j                  t        | j                               d| _        | j                   S rC  )r|  rD  r  r   rb   s    rI   
operationszContentStream.operationsy  s;    DJJ&&wtzz':;DJrJ   r  c                      || _         d| _        y rC  )r|  rD  )rF   r  s     rI   r  zContentStream.operations  s    %
rJ   c                     | j                   r<| j                   j                  dg df       | j                   j                  g df       y | j                  rd| j                  z   dz   | _        y y )Nr      q   Qs   q
s   
Q
)r|  insertrE   rD  rb   s    rI   isolate_graphics_statez$ContentStream.isolate_graphics_state  s^    ##ADz2##RJ/ZZ$**,x7DJ rJ   rz   c                 v    | j                   s| j                  r| j                          t        |   ||       y rY   )rD  r|  rO  rK  r   )rF   ry   rz   r`   s      rI   r   zContentStream.write_to_stream  s,     zzd..MMO7rJ   rY   r   r?  )!r   r   r   __doc__r   r   rk   r	   r   r   r  r   rB   r   r
   r   rO   r   r   r   r   r   r  r  rl   rO  rQ  r
  r  setterr  r   rp  rq  s   @rI   rz  rz  p  s   0 HL	// / tS$s)T#s(^CD	/
 
/@# 
B !&=?	"" "  sCx 9:	"
 
"H66 $6 	6
  sCx 9:6 U38_%6 
64QJ Q4 Q><4 <4S#X <4~% ,U t   DsCx1     T%U
*;%<   8 MQ8 827c58H2I8	8 8rJ   rz  ry   rQ   r   c                 x   | j                  d      }| j                  dd       |dk(  rt        j                  | |      S |dk(  rK| j                  d      }| j                  dd       |dk(  rt        j                  | ||      S t        | |      S |dk(  rt        j                  | ||      S |d	k(  s|d
k(  rt        j                  |       S |dk(  rt        | |      S |dk(  r0| j                  d      dk(  r| j                  dd       t               S |dk(  rt        j                  |       S |dk(  r5t        |        t        |       }| j                  dd       t        | ||      S |dv rq| j                  d      }| j                  t        |       d       t        j                  |      |J t!        j                  | |      S t#        j                  |       S | j%                         }| j                  dd       | j                  d      }| j                  |       t'        |        t)        d|d| d|      )Nr'   r      /   <r   r  r   r~      t   f   (   e   s   endobji   nr   s   0123456789+-.   iP   z(Invalid Elementary Object starting with z @z: )r   r   r,   r   r   r8   r>   r(   r9   r-   r   r   r   r   IndirectPatternmatchr+   r.   r   r   r%   )ry   rQ   r   r   r  r  stream_extracts          rI   r   r     s   
 ++a.C
KKA
d{**6377	{{1~B5=#44VS/RR.vGG	++FCII	t--f55	&v??	Q94B|	**622	&!!&)B6388	 	 {{2SYJ"  &2?"?!2263??0088kkmCRCf%6sgRuB~FXY
 	
rJ   c                   8   e Zd ZdZdeddfdZedee   fd       Z	edee   fd       Z
eded   fd	       Zedee   fd
       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zy)Fieldz
    A class representing a field dictionary.

    This class is accessed through
    :meth:`get_fields()<pypdf.PdfReader.get_fields>`
    rH   r@   Nc                    t         j                  |        t        j                         t	        j                         z   }|j
                  | _        |D ]  }	 ||   | t        |      <    t        | j                  d      t              rst        t        | t        d               j                         }t        |t              r|j                         }n|d}nt        d      t!        |      | t        d      <   y y # t        $ r Y w xY w)Nr   rj  zShould never happen)r   r  r   
attributesr   rP   r,   r   rS   r   rX  r   rO  rl   decoderR   r0   )rF   rH   field_attributesattrdd_strs         rI   r  zField.__init__  s    !!$'%002+6689 	 #'"9"9$ 	D)-dZ%&	
 dhhtn&9:($z$/?*@AJJLA!U#
 566%5e%<DD!" ;  s   C<<	DDc                 @    | j                  t        j                        S )z4Read-only property accessing the type of this field.)r   r   r`  rb   s    rI   
field_typezField.field_type       xx14455rJ   c                 @    | j                  t        j                        S )z6Read-only property accessing the parent of this field.)r   r   Parentrb   s    rI   r  zField.parent  s     xx18899rJ   r>   c                 @    | j                  t        j                        S )z4Read-only property accessing the kids of this field.)r   r   Kidsrb   s    rI   kidsz
Field.kids  s     xx16677rJ   c                 @    | j                  t        j                        S )z4Read-only property accessing the name of this field.)r   r   Trb   s    rI   namez
Field.name  s     xx13344rJ   c                 @    | j                  t        j                        S )z>Read-only property accessing the alternate name of this field.)r   r   TUrb   s    rI   alternate_namezField.alternate_name  r  rJ   c                 @    | j                  t        j                        S )z
        Read-only property accessing the mapping name of this field.

        This name is used by pypdf as a key in the dictionary returned by
        :meth:`get_fields()<pypdf.PdfReader.get_fields>`
        )r   r   TMrb   s    rI   mapping_namezField.mapping_name       xx14455rJ   c                 @    | j                  t        j                        S )z
        Read-only property accessing the field flags, specifying various
        characteristics of the field (see Table 8.70 of the PDF 1.7 reference).
        )r   r   Ffrb   s    rI   flagszField.flags  s     xx14455rJ   c                 @    | j                  t        j                        S )zs
        Read-only property accessing the value of this field.

        Format varies based on field type.
        )r   r   Vrb   s    rI   r   zField.value  s     xx13344rJ   c                 @    | j                  t        j                        S )z=Read-only property accessing the default value of this field.)r   r   DVrb   s    rI   default_valuezField.default_value  r  rJ   c                 @    | j                  t        j                        S )z
        Read-only property accessing the additional actions dictionary.

        This dictionary defines the field's behavior in response to trigger
        events. See Section 8.5.2 of the PDF 1.7 reference.
        )r   r   AArb   s    rI   additional_actionszField.additional_actions#  r  rJ   )r   r   r   r  r   r  r
  r
   r,   r  r  r  rk   r  r  r  r   r  r   r   r  r  r   rJ   rI   r  r    sW   =- =$ =. 6HZ0 6 6 :!12 : : 8h}- 8 8 5hsm 5 5 6 6 6 6hsm 6 6 6x} 6 6 5x} 5 5 6x} 6 6 6H-=$> 6 6rJ   r  c                      e Zd ZU dZdZee   ed<   dede	e
eeef   deddfdZedd
       Z	 ddede	deef   ddfdZedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zedee   fd       Zeded	   fd       Zedee   fd       Z edee   fd       Z!y)Destinationa  
    A class representing a destination within a PDF file.

    See section 12.3.2 of the PDF 2.0 reference.

    Args:
        title: Title of this destination.
        page: Reference to the page of this destination. Should
            be an instance of :class:`IndirectObject<pypdf.generic.IndirectObject>`.
        fit: How the destination is displayed.

    Raises:
        PdfReadError: If destination type is invalid.

    Nnodetitlepagefitr@   c                    g | _         |j                  }|j                  }t        j	                  |        t        |      | t        d      <   || t        d      <   || t        d      <   |dk(  rt        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             t        |      dk  r|j                  t        d             |\  | t        t        j                        <   | t        t        j                        <   | t        d	      <   y t        |      d
k(  ry |t        j                  k(  rp|\  | t        t        j                        <   | t        t        j                        <   | t        t        j                         <   | t        t        j                        <   y |t        j"                  t        j$                  fv r 	 |\  | t        t        j                        <   y |t        j*                  t        j,                  fv r 	 |\  | t        t        j                        <   y |t        j.                  t        j0                  fv ry t3        d|      # t&        $ r' t)               | t        t        j                        <   Y y w xY w# t&        $ r' t)               | t        t        j                        <   Y y w xY w)N/Title/Pager   z/XYZr'   g        r   r:   /Zoomr   zUnknown Destination Type: )_filtered_childrenfit_typefit_argsr   r  r0   r,   r   rE   r.   TALEFTTOPTFFIT_RBOTTOMRIGHTFIT_HFIT_BHrR   r-   FIT_VFIT_BVFITFIT_Br%   )rF   r  r  r  typargss         rI   r  zDestination.__init__C  s5    .0ll||!!$'%5e%<Z!"$(Z !$'Z ! &=4y1}L-.4y1}L-.4y1}L-.
 	Z()Z'(Z()Y!^BHH_ Z()Z		*+Z)*Z'(RXXryy))>.2+j() RXXryy))?/3,j)* RVVRXX&&!;C7CDD  >/9|j()>
  ?0:j)*?s$   !I3 #J& 3-J#"J#&-KKr>   c                 z    t        | j                  d      | d   gdD cg c]  }|| v r| |    c}z         S c c}w )Nr  r   )/Left/Bottom/Right/Topr  )r>   r   )rF   r]   s     rI   
dest_arrayzDestination.dest_arrayx  sR    \\'"DM2 I9 Q
 	
s   8
ry   rz   c                    |t        dd       |j                  d       t        d      }|j                  |       |j                  d       | j                  }|j                  |       t        d      }|j                  |       |j                  d       t        d      }|j                  |       |j                  d       |j                  d	       y )
Nr|   r}   r   z/Dr   z/Sz/GoTor   r   )r   r   r,   r   r  )rF   ry   rz   r   r   value_ss         rI   r   zDestination.write_to_stream  s     %&A7 	WF#Tf%F#TW%'UUrJ   c                 $    | j                  d      S )z3Read-only property accessing the destination title.r  r   rb   s    rI   r  zDestination.title  s     xx!!rJ   c                 $    | j                  d      S )z9Read-only property accessing the destination page number.r  r  rb   s    rI   r  zDestination.page       xx  rJ   c                 $    | j                  d      S )z2Read-only property accessing the destination type.r   r  rb   s    rI   r	  zDestination.typ  r  rJ   c                 &    | j                  dd      S )z-Read-only property accessing the zoom factor.r  Nr  rb   s    rI   zoomzDestination.zoom       xx&&rJ   c                 &    | j                  dd      S )z<Read-only property accessing the left horizontal coordinate.r  Nr  rb   s    rI   leftzDestination.left  r  rJ   c                 &    | j                  dd      S )z=Read-only property accessing the right horizontal coordinate.r  Nr  rb   s    rI   rightzDestination.right  s     xx$''rJ   c                 &    | j                  dd      S )z9Read-only property accessing the top vertical coordinate.r  Nr  rb   s    rI   topzDestination.top  s     xx%%rJ   c                 &    | j                  dd      S )z<Read-only property accessing the bottom vertical coordinate.r  Nr  rb   s    rI   bottomzDestination.bottom  s     xx	4((rJ   c           
      t    | j                  dt        t        d      t        d      t        d      g            S )zHRead-only property accessing the color in (R, G, B) with values 0.0-1.0.z/Cr   )r   r>   r*   rb   s    rI   colorzDestination.color  s2     xx+{1~{1~{1~NO
 	
rJ   c                 &    | j                  dd      S )z_
        Read-only property accessing the font type.

        1=italic, 2=bold, 3=both
        r  r   r  rb   s    rI   font_formatzDestination.font_format  s     xxa  rJ   c                 &    | j                  dd      S )z
        Read-only property accessing the outline count.

        positive = expanded
        negative = collapsed
        absolute value = number of visible descendants at all levels
        r!  Nr  rb   s    rI   outline_countzDestination.outline_count  s     xx$''rJ   )r@   r>   rY   )"r   r   r   r  r  r
   r   __annotations__rk   r   r.   r+   r-   r2   r  r
  r  r   rl   r   r  r   r  r	  r  r*   r  r  r   r"  r$  r   r&  r(  r   rJ   rI   r  r  .  s   $ 	 	( 3E3E L.*>NNO3E 	3E
 
3Ej 
 
 MQ 27c58H2I	. "x} " " !hsm ! ! !Xc] ! ! 'hsm ' ' 'h{+ ' ' (x, ( ( &Xk* & & )- ) ) 
x. 
 
 !Xo6 ! ! (x} ( (rJ   r  rY   )^
__author____author_email__loggingr   sysior   mathr   typingr   r   r   r   r	   r
   r   r   r   r   r   
_protocolsr   r   r   _utilsr   r   r   r   r   r   r   r   r   	constantsr   r   r   r    r`  r!   r   r"   r  r#   r  errorsr$   r%   r&   _baser(   r)   r*   r+   r,   r-   r.   r/   r0   r1   _fitr2   _image_inliner3   r4   r5   r6   r7   r8   r9   version_infor<   typing_extensions	getLoggerr   loggerNumberSignsr   r  r>   r   r  r6  rT   rG  rX  rz  rk   r   r   r  r  r   rJ   rI   <module>r=     s  : 
/   	 
      V U
 
 
 
 * . * - O O     Iw&			8	$"**@Aa$s)Y aH]tCH~y ]@P*! P*f+S +T +"p# pf	, 	%, %Pb8' b8P	 DH3
3
	#	$3
 4d3ic3h?@3
 9c3-.	3
l`6J `6Fm(* m(rJ   