§
    ;]¥eë< ã            
       óˆ  — d dl Z d dlZd dlZd dlZd dlmZ d dlmZ d dlmZ d dl	m
Z
mZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZ dd	lmZ dd
lmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%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/Z0 ddl)m1Z2 ddl)m3Z3m4Z4 ddl)m5Z6 ddl)m7Z8 ddl)m9Z: ddl;m<Z<m=Z=m>Z>m?Z?m@Z@ ddlAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZR ddlSmTZTmUZU ddlVmWZW deXdeYdeeYee
df         f         fd„ZZdeXdeYdeeYee
df         f         fd„Z[ G d„ deF¦  «        Z\ G d „ d!¦  «        Z] G d"„ d#e]¦  «        Z^dS )$é    N)Údatetime)ÚBytesIO)ÚPath)	ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚTupleÚUnionÚcasté   )Ú
EncryptionÚPasswordType)Ú
PageObjectÚ_VirtualList)Úindex2label)ÚStrByteTypeÚ
StreamTypeÚb_Údeprecate_no_replacementÚdeprecation_no_replacementÚdeprecation_with_replacementÚlogger_warningÚread_non_whitespaceÚread_previous_lineÚread_until_whitespaceÚskip_over_commentÚskip_over_whitespace)ÚCatalogAttributes)ÚCatalogDictionary)ÚCheckboxRadioButtonAttributes)ÚCore)ÚDocumentInformationAttributes)ÚFieldDictionaryAttributesÚGoToActionArguments)ÚPageAttributes)ÚPagesAttributes)ÚTrailerKeys)ÚEmptyFileErrorÚFileNotDecryptedErrorÚPdfReadErrorÚPdfStreamErrorÚWrongPasswordError)ÚArrayObjectÚContentStreamÚDecodedStreamObjectÚDestinationÚDictionaryObjectÚEncodedStreamObjectÚFieldÚFitÚFloatObjectÚIndirectObjectÚ
NameObjectÚ
NullObjectÚNumberObjectÚ	PdfObjectÚTextStringObjectÚ
TreeObjectÚread_object)ÚOutlineTypeÚPagemodeType)ÚXmpInformationÚdÚsizeÚreturn.c                 ó€   — |dk    rt          d¦  «        ‚d| z   } | dd …         } t          j        d| ¦  «        d         S )Né   zinvalid size in convert_to_ints           iøÿÿÿz>qr   )r-   ÚstructÚunpack©rD   rE   s     ú//usr/lib/python3/dist-packages/pypdf/_reader.pyÚconvert_to_intrM   i   sH   € Øˆa‚x€xÝÐ;Ñ<Ô<Ð<Ø+¨aÑ/€AØ	ˆ"ˆ#ˆ#Œ€AÝŒ=˜˜qÑ!Ô! !Ô$Ð$ó    c                 óB   — t          dd¦  «         t          | |¦  «        S )NÚconvertToIntrM   )r   rM   rK   s     rL   rP   rP   q   s#   € Ý  Ð1AÑBÔBÐBÝ˜!˜TÑ"Ô"Ð"rN   c                   ó‚  — e Zd ZdZdd„Zdedee         fd„Zd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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dS )ÚDocumentInformationa„  
    A class representing the basic document metadata provided in a PDF File.
    This class is accessible through
    :py:class:`PdfReader.metadata<pypdf.PdfReader.metadata>`.

    All text properties of the document metadata have
    *two* properties, eg. author and author_raw. The non-raw property will
    always return a ``TextStringObject``, making it ideal for a case where
    the metadata is being displayed. The raw property can sometimes return
    a ``ByteStringObject``, if pypdf was unable to decode the string's
    text encoding; this requires additional safety in the caller and
    therefore is not as commonly accessed.
    rF   Nc                 ó.   — t          j        | ¦  «         d S ©N)r4   Ú__init__©Úselfs    rL   rU   zDocumentInformation.__init__…   s   € ÝÔ! $Ñ'Ô'Ð'Ð'Ð'rN   Úkeyc                 ó`   — |                       |d ¦  «        }t          |t          ¦  «        r|S d S rT   )ÚgetÚ
isinstancer>   )rW   rX   Úretvals      rL   Ú	_get_textzDocumentInformation._get_textˆ   s2   € Ø—’˜#˜tÑ$Ô$ˆÝ�fÕ.Ñ/Ô/ð 	ØˆMØˆtrN   c                 óL   — t          dd¦  «         |                      |¦  «        S )zq
        Use the attributes (e.g. :py:attr:`title` / :py:attr:`author`).

        .. deprecated:: 1.28.0
        ÚgetTextú3.0.0)r   r]   )rW   rX   s     rL   r_   zDocumentInformation.getTextŽ   s&   € õ 	# 9¨gÑ6Ô6Ð6Ø�~Š~˜cÑ"Ô"Ð"rN   c                 óä   — |                       t          j        ¦  «        rP|                      t          j        ¦  «        p0|                       t          j        ¦  «                             ¦   «         ndS )zŸ
        Read-only property accessing the document's title.

        Returns a ``TextStringObject`` or ``None`` if the title is not
        specified.
        N)rZ   ÚDIÚTITLEr]   Ú
get_objectrV   s    rL   ÚtitlezDocumentInformation.title—   sR   € ð �xŠx�œÑ!Ô!ðˆD�NŠN�2œ8Ñ$Ô$ÐG¨¯ªµ´Ñ(:Ô(:×(EÒ(EÑ(GÔ(Gøàð	
rN   c                 ó@   — |                       t          j        ¦  «        S )z>The "raw" version of title; can return a ``ByteStringObject``.)rZ   rb   rc   rV   s    rL   Ú	title_rawzDocumentInformation.title_raw¥   s   € ð �xŠx�œÑ!Ô!Ð!rN   c                 ó@   — |                       t          j        ¦  «        S )z¡
        Read-only property accessing the document's author.

        Returns a ``TextStringObject`` or ``None`` if the author is not
        specified.
        )r]   rb   ÚAUTHORrV   s    rL   ÚauthorzDocumentInformation.authorª   s   € ð �~Š~�bœiÑ(Ô(Ð(rN   c                 ó@   — |                       t          j        ¦  «        S )z?The "raw" version of author; can return a ``ByteStringObject``.)rZ   rb   ri   rV   s    rL   Ú
author_rawzDocumentInformation.author_raw´   s   € ð �xŠx�œ	Ñ"Ô"Ð"rN   c                 ó@   — |                       t          j        ¦  «        S )z£
        Read-only property accessing the document's subject.

        Returns a ``TextStringObject`` or ``None`` if the subject is not
        specified.
        )r]   rb   ÚSUBJECTrV   s    rL   ÚsubjectzDocumentInformation.subject¹   s   € ð �~Š~�bœjÑ)Ô)Ð)rN   c                 ó@   — |                       t          j        ¦  «        S )z@The "raw" version of subject; can return a ``ByteStringObject``.)rZ   rb   rn   rV   s    rL   Úsubject_rawzDocumentInformation.subject_rawÃ   ó   € ð �xŠx�œ
Ñ#Ô#Ð#rN   c                 ó@   — |                       t          j        ¦  «        S )ac  
        Read-only property accessing the document's creator.

        If the document was converted to PDF from another format, this is the
        name of the application (e.g. OpenOffice) that created the original
        document from which it was converted. Returns a ``TextStringObject`` or
        ``None`` if the creator is not specified.
        )r]   rb   ÚCREATORrV   s    rL   ÚcreatorzDocumentInformation.creatorÈ   s   € ð �~Š~�bœjÑ)Ô)Ð)rN   c                 ó@   — |                       t          j        ¦  «        S )z@The "raw" version of creator; can return a ``ByteStringObject``.)rZ   rb   rt   rV   s    rL   Úcreator_rawzDocumentInformation.creator_rawÔ   rr   rN   c                 ó@   — |                       t          j        ¦  «        S )aG  
        Read-only property accessing the document's producer.

        If the document was converted to PDF from another format, this is the
        name of the application (for example, OSX Quartz) that converted it to
        PDF. Returns a ``TextStringObject`` or ``None`` if the producer is not
        specified.
        )r]   rb   ÚPRODUCERrV   s    rL   ÚproducerzDocumentInformation.producerÙ   s   € ð �~Š~�bœkÑ*Ô*Ð*rN   c                 ó@   — |                       t          j        ¦  «        S )zAThe "raw" version of producer; can return a ``ByteStringObject``.)rZ   rb   ry   rV   s    rL   Úproducer_rawz DocumentInformation.producer_rawå   s   € ð �xŠx�œÑ$Ô$Ð$rN   c                 óš   — |                       t          j        ¦  «        }|€dS t          j        |                     dd¦  «        d¦  «        S )z:Read-only property accessing the document's creation date.Nú'Ú úD:%Y%m%d%H%M%S%z)r]   rb   ÚCREATION_DATEr   ÚstrptimeÚreplace©rW   Útexts     rL   Úcreation_datez!DocumentInformation.creation_dateê   sD   € ð �~Š~�bÔ.Ñ/Ô/ˆØˆ<Ø�4ÝÔ  §¢¨c°2Ñ!6Ô!6Ð8JÑKÔKÐKrN   c                 ó@   — |                       t          j        ¦  «        S )zÈ
        The "raw" version of creation date; can return a ``ByteStringObject``.

        Typically in the format ``D:YYYYMMDDhhmmss[+-]hh'mm`` where the suffix
        is the offset from UTC.
        )rZ   rb   r�   rV   s    rL   Úcreation_date_rawz%DocumentInformation.creation_date_rawò   s   € ð �xŠx�Ô(Ñ)Ô)Ð)rN   c                 óš   — |                       t          j        ¦  «        }|€dS t          j        |                     dd¦  «        d¦  «        S )z”
        Read-only property accessing the document's modification date.

        The date and time the document was most recently modified.
        Nr~   r   r€   )r]   rb   ÚMOD_DATEr   r‚   rƒ   r„   s     rL   Úmodification_datez%DocumentInformation.modification_dateü   sC   € ð �~Š~�bœkÑ*Ô*ˆØˆ<Ø�4ÝÔ  §¢¨c°2Ñ!6Ô!6Ð8JÑKÔKÐKrN   c                 ó@   — |                       t          j        ¦  «        S )zÔ
        The "raw" version of modification date; can return a
        ``ByteStringObject``.

        Typically in the format ``D:YYYYMMDDhhmmss[+-]hh'mm`` where the suffix
        is the offset from UTC.
        )rZ   rb   rŠ   rV   s    rL   Úmodification_date_rawz)DocumentInformation.modification_date_raw  s   € ð �xŠx�œÑ$Ô$Ð$rN   )rF   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__rU   Ústrr   r]   r_   Úpropertyre   rg   rj   rl   ro   rq   ru   rw   rz   r|   r   r†   rˆ   r‹   r�   © rN   rL   rR   rR   v   sä  € € € € € ðð ð(ð (ð (ð (ð˜Sð  X¨c¤]ð ð ð ð ð#˜3ð # 8¨C¤=ð #ð #ð #ð #ð ð
�x ”}ð 
ð 
ð 
ñ „Xð
ð ð"˜8 Cœ=ð "ð "ð "ñ „Xð"ð ð)˜ œð )ð )ð )ñ „Xð)ð ð#˜H SœMð #ð #ð #ñ „Xð#ð ð*˜ #œð *ð *ð *ñ „Xð*ð ð$˜X cœ]ð $ð $ð $ñ „Xð$ð ð	*˜ #œð 	*ð 	*ð 	*ñ „Xð	*ð ð$˜X cœ]ð $ð $ð $ñ „Xð$ð ð	+˜( 3œ-ð 	+ð 	+ð 	+ñ „Xð	+ð ð%˜h sœmð %ð %ð %ñ „Xð%ð ðL˜x¨Ô1ð Lð Lð Lñ „XðLð ð* 8¨C¤=ð *ð *ð *ñ „Xð*ð ð	L 8¨HÔ#5ð 	Lð 	Lð 	Lñ „Xð	Lð ð% x°¤}ð %ð %ð %ñ „Xð%ð %ð %rN   rR   c                   ór  — e Zd ZdZ	 	 dydeeef         dededee	f         ddfd„Z
edefd	„¦   «         Zedee         fd
„¦   «         Zdee         fd„Zedee         fd„¦   «         Zedee         fd„¦   «         Zdee         fd„Zedee         fd„¦   «         Zdefd„Zdefd„Zedefd„¦   «         Zdedefd„Zdedefd„Zedeeef         fd„¦   «         Zedeeef         fd„¦   «         Z 	 	 	 dzdee!         deeeef                  dee         deeeef                  fd„Z"	 	 	 dzdee!         deeeef                  dee         deeeef                  fd„Z#de$defd„Z%d ee!e$f         deeef         ded!eddf
d"„Z&dee!e$f         dededdfd#„Z'ded ed!eddfd$„Z(d{d%edeeef         fd&„Z)deeef         fd'„Z*	 	 d|dee!df         dee         deeef         fd(„Z+	 	 d|dee!df         dee         deeef         fd)„Z,ede-fd*„¦   «         Z.ede-fd+„¦   «         Z/	 d|d,ee$         d-ee         de-fd.„Z0	 d|d,ee$         d-ee         de-fd/„Z1edee2         fd0„¦   «         Z3d1edee4e5f         defd2„Z6d3edefd4„Z7d3edefd5„Z8d6e9defd7„Z:d6e9defd8„Z;d9ed:ee<ee=e5de4e$f                           de9fd;„Z>d,e$dee9         fd<„Z?ede<e         fd=„¦   «         Z@ede<e         fd>„¦   «         ZAedee         fd?„¦   «         ZBdee         fd@„ZCedee         fdA„¦   «         ZDedeeE         fdB„¦   «         ZFdeeE         fdC„ZGedeeE         fdD„¦   «         ZH	 	 	 dzdEede$ef         dFeeeef                  d1ee5         ddfdG„ZId1e5deeeJef         fdH„ZKdIedJedeeJ         fdK„ZLd1eee5f         deeJ         fdL„ZMdMe5deeJ         fdN„ZNdeOdePeef         fdO„ZQdeOdePeef         fdP„ZRdQedRedeeJ         fdS„ZSdQedRedeeJ         fdT„ZTdQedRedUeeJ         deeJ         fdV„ZUdQedRedUeeJ         deeJ         fdW„ZVdeOddfdX„ZWdeOddfdY„ZXdeOddfdZ„ZYdeOdefd[„ZZdeOddfd\„Z[deOd]ee         d^eddfd_„Z\deOdee         fd`„Z]deOd]edee         fda„Z^deOdee_e`eaf         fdb„ZbecdeOd]edefdc„¦   «         ZddeOddfdd„Zedee<e         dfefegeeePedgf         f         f         dhefeeeePedgf         f         gef         ddfdi„Zgd:e<e         dehePeef                  fdj„Zi	 d}deOdlede	fdm„Zj	 d}deOdlede	fdn„Zkdeee	f         delfdo„Zmdpedeeef         fdq„Znedefdr„¦   «         Zodefds„Zpedefdt„¦   «         Zqedeeeef                  fdu„¦   «         Zrdvedee$         fdw„Zsdvedee$         fdx„ZtdS )~Ú	PdfReadera³  
    Initialize a PdfReader object.

    This operation can take some time, as the PDF stream's cross-reference
    tables are read into memory.

    Args:
        stream: A File object or an object that supports the standard read
            and seek methods similar to a File object. Could also be a
            string representing a path to a PDF file.
        strict: Determines whether user should be warned of all
            problems and also causes some correctable problems to be fatal.
            Defaults to ``False``.
        password: Decrypt PDF file at initialization. If the
            password is None, the file will not be decrypted.
            Defaults to ``None``
    FNÚstreamÚstrictÚpasswordrF   c                 óÎ  — || _         d | _        i | _        d| _        d | _        t          |d¦  «        rd|j        vrt          dt          ¦  «         t          |t          t          f¦  «        rIt          |d¦  «        5 }t          |                     ¦   «         ¦  «        }d d d ¦  «         n# 1 swxY w Y   |                      |¦  «         || _        d| _        d | _        | j        rìd| _        | j                             t*          j        ¦  «        }|r|d                              ¦   «         j        nd}t3          t4          | j        t*          j                                      ¦   «         ¦  «        }t9          j        ||¦  «        | _        |�|nd}| j                             |¦  «        t<          j        k    r|�tA          d	¦  «        ‚d| _        d S |�tC          d
¦  «        ‚d S )Nr   ÚmodeÚbzQPdfReader stream/file object is not in binary mode. It may not be read correctly.ÚrbFTrN   zWrong passwordúNot encrypted file)"r˜   Úflattened_pagesÚresolved_objectsÚ
xref_indexÚ_page_id2numÚhasattrr›   r   rŽ   r[   r’   r   Úopenr   Úreadr—   Ú_override_encryptionÚ_encryptionÚis_encryptedÚtrailerrZ   ÚTKÚIDrd   Úoriginal_bytesr   r4   ÚENCRYPTr   Úverifyr   ÚNOT_DECRYPTEDr/   r-   )	rW   r—   r˜   r™   ÚfhÚid_entryÚ	id1_entryÚencrypt_entryÚpwds	            rL   rU   zPdfReader.__init__'  s   € ð ˆŒØ;?ˆÔØLNˆÔØˆŒð ð 	Ôõ �6˜6Ñ"Ô"ð 	 s°&´+Ð'=Ð'=Ýð0åñô ð õ
 �f�s¥D˜kÑ*Ô*ð 	,Ý�f˜dÑ#Ô#ð , rÝ  §¢¡¤Ñ+Ô+�ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,à�	Š	�&ÑÔÐØˆŒà$)ˆÔ!Ø15ˆÔØÔð 	9Ø(,ˆDÔ%ð ”|×'Ò'­¬Ñ.Ô.ˆHØCKÐT˜ œ×.Ò.Ñ0Ô0Ô?Ð?ÐQTˆIÝ Ý  $¤,­r¬zÔ":×"EÒ"EÑ"GÔ"Gñô ˆMõ  *œ¨}¸iÑHÔHˆDÔð 'Ð2�(�(¸ˆCàÔ ×'Ò'¨Ñ,Ô,µÔ0JÒJÐJØÐ(õ )Ð)9Ñ:Ô:Ð:Ø(-ˆDÔ%Ð%Ð%àÐ#Ý"Ð#7Ñ8Ô8Ð8ð $Ð#s   Á>"B,Â,B0Â3B0c                 óþ   — | j                              ¦   «         }| j                              dd¦  «         | j                              d¦  «                             d¦  «        }| j                              |d¦  «         |S )zÇ
        The first 8 bytes of the file.

        This is typically something like ``'%PDF-1.6'`` and can be used to
        detect if the file is actually a PDF file and which version it is.
        r   rH   zutf-8)r—   ÚtellÚseekr¥   Údecode)rW   ÚlocÚpdf_file_versions      rL   Ú
pdf_headerzPdfReader.pdf_header[  sq   € ð Œk×ÒÑ Ô ˆØŒ×Ò˜˜AÑÔÐØœ;×+Ò+¨AÑ.Ô.×5Ò5°gÑ>Ô>ÐØŒ×Ò˜˜aÑ Ô Ð ØÐrN   c                 óü   — t           j        | j        vrdS | j        t           j                 }t          ¦   «         }t	          |t          d¦  «        ¦  «        rt          d¦  «        ‚|                     |¦  «         |S )a  
        Retrieve the PDF file's document information dictionary, if it exists.

        Note that some PDF files use metadata streams instead of docinfo
        dictionaries, and these metadata streams will not be accessed by this
        function.
        NzEtrailer not found or does not point to document information directory)rª   ÚINFOr©   rR   r[   Útyper-   Úupdate)rW   Úobjr\   s      rL   ÚmetadatazPdfReader.metadatak  sw   € õ Œ7˜$œ,Ð&Ð&Ø�4ØŒl�2œ7Ô#ˆÝ$Ñ&Ô&ˆÝ�c�4 ™:œ:Ñ&Ô&ð 	ÝØWñô ð ð 	�Š�cÑÔÐØˆrN   c                 ó2   — t          ddd¦  «         | j        S )ú`
        Use the attribute :py:attr:`metadata` instead.

        .. deprecated:: 1.28.0
        ÚgetDocumentInforÁ   r`   ©r   rÁ   rV   s    rL   rÄ   zPdfReader.getDocumentInfo  s   € õ 	%Ð%6¸
ÀGÑLÔLÐLØŒ}ÐrN   c                 ó2   — t          ddd¦  «         | j        S )rÃ   ÚdocumentInforÁ   r`   rÅ   rV   s    rL   rÇ   zPdfReader.documentInfoˆ  s   € õ 	% ^°ZÀÑIÔIÐIØŒ}ÐrN   c                 óp   — 	 d| _         | j        t          j                 j        d| _         S # d| _         w xY w)z(XMP (Extensible Metadata Platform) data.TF)r¦   r©   rª   ÚROOTÚxmp_metadatarV   s    rL   rÊ   zPdfReader.xmp_metadata’  s=   € ð	.Ø(,ˆDÔ%Ø”<¥¤Ô(Ô5à(-ˆDÔ%Ð%ø¨ˆDÔ%Ð-Ð-Ð-Ð-s   ‚", ¬	5c                 ó2   — t          ddd¦  «         | j        S )rÃ   ÚgetXmpMetadatarÊ   r`   ©r   rÊ   rV   s    rL   rÌ   zPdfReader.getXmpMetadata›  ó    € õ 	%Ð%5°~ÀwÑOÔOÐOØÔ Ð rN   c                 ó2   — t          ddd¦  «         | j        S )ze
        Use the attribute :py:attr:`xmp_metadata` instead.

        .. deprecated:: 1.28.0.
        ÚxmpMetadatarÊ   r`   rÍ   rV   s    rL   rÐ   zPdfReader.xmpMetadata¤  ó   € õ 	% ]°NÀGÑLÔLÐLØÔ Ð rN   c                 ó´   — | j         r#| j        t          j                 d         d         S | j        €|                      ¦   «          t          | j        ¦  «        S )a  
        Calculate the number of pages in this PDF file.

        Args:

        Returns:
            The number of pages of the parsed PDF file

        Raises:
            PdfReadError: if file is encrypted and restrictions prevent
                this action.
        ú/Pagesú/Count)r¨   r©   rª   rÉ   rŸ   Ú_flattenÚlenrV   s    rL   Ú_get_num_pageszPdfReader._get_num_pages®  sO   € ð  Ôð 	-Ø”<¥¤Ô(¨Ô2°8Ô<Ð<àÔ#Ð+Ø—’‘”�Ý�tÔ+Ñ,Ô,Ð,rN   c                 óL   — t          ddd¦  «         |                      ¦   «         S )úX
        Use :code:`len(reader.pages)` instead.

        .. deprecated:: 1.28.0
        zreader.getNumPagesúlen(reader.pages)r`   ©r   r×   rV   s    rL   ÚgetNumPageszPdfReader.getNumPagesÅ  s+   € õ 	%Ð%9Ð;NÐPWÑXÔXÐXØ×"Ò"Ñ$Ô$Ð$rN   c                 óL   — t          ddd¦  «         |                      ¦   «         S )rÙ   zreader.numPagesrÚ   r`   rÛ   rV   s    rL   ÚnumPageszPdfReader.numPagesÎ  s*   € õ 	%Ð%6Ð8KÈWÑUÔUÐUØ×"Ò"Ñ$Ô$Ð$rN   Ú
pageNumberc                 óN   — t          ddd¦  «         |                      |¦  «        S )z`
        Use :code:`reader.pages[page_number]` instead.

        .. deprecated:: 1.28.0
        zreader.getPage(pageNumber)zreader.pages[page_number]r`   )r   Ú	_get_page)rW   rß   s     rL   ÚgetPagezPdfReader.getPageØ  s2   € õ 	%Ø(Ð*EÀwñ	
ô 	
ð 	
ð �~Š~˜jÑ)Ô)Ð)rN   Úpage_numberc                 ót   — | j         €|                      ¦   «          | j         €
J d¦   «         ‚| j         |         S )zÿ
        Retrieve a page by number from this PDF file.

        Args:
            page_number: The page number to retrieve
                (pages begin at zero)

        Returns:
            A :class:`PageObject<pypdf._page.PageObject>` instance.
        Núhint for mypy)rŸ   rÕ   )rW   rã   s     rL   rá   zPdfReader._get_pageã  s?   € ð ÔÐ'Ø�MŠM‰OŒOˆOØÔ#Ð/Ð/°Ñ/Ô/Ð/ØÔ# KÔ0Ð0rN   c                 ó2   — t          ddd¦  «         | j        S )ú\
        Use :py:attr:`named_destinations` instead.

        .. deprecated:: 1.28.0
        ÚnamedDestinationsÚnamed_destinationsr`   )r   ré   rV   s    rL   rè   zPdfReader.namedDestinationsó  s"   € õ 	%Ð%8Ð:NÐPWÑXÔXÐXØÔ&Ð&rN   c                 ó*   — |                       ¦   «         S )zu
        A read-only dictionary which maps names to
        :class:`Destinations<pypdf.generic.Destination>`
        )Ú_get_named_destinationsrV   s    rL   ré   zPdfReader.named_destinationsý  s   € ð ×+Ò+Ñ-Ô-Ð-rN   Útreer\   Úfileobjc                 ór  — t          j        ¦   «         }|                     t          j        ¦   «         ¦  «         |€mi }t	          t
          | j        t          j                 ¦  «        }t          j
        |v r1t	          t          t                   |t          j
                 ¦  «        }ndS |€|S |                      |||¦  «         |D ] }||v r|                      ||||¦  «          nŒ!d|v rLt	          t          |d         ¦  «        }|D ].}|                     ¦   «         }	|                      |	|||¦  «         Œ/|S )aX  
        Extract field data if this PDF contains interactive form fields.

        The *tree* and *retval* parameters are for recursive use.

        Args:
            tree:
            retval:
            fileobj: A file object (usually a text file) to write
                a report to on all interactive form fields found.

        Returns:
            A dictionary where each key is a field name, and each
            value is a :class:`Field<pypdf.generic.Field>` object. By
            default, the mapping name is used for keys.
            ``None`` if form data could not be located.
        Nú/Fields)r&   Úattributes_dictr¿   r#   r   r4   r©   rª   rÉ   ÚCDÚ	ACRO_FORMr   r?   Ú_check_kidsÚ_build_fieldr0   rd   )
rW   rì   r\   rí   Úfield_attributesÚcatalogÚattrÚfieldsÚfÚfields
             rL   Ú
get_fieldszPdfReader.get_fields  sC  € õ. 5ÔDÑFÔFÐØ×ÒÕ =Ô MÑ OÔ OÑPÔPÐPØˆ>ØˆFÝÕ+¨T¬\½"¼'Ô-BÑCÔCˆGåŒ|˜wÐ&Ð&Ý�H¥ZÔ0°'½"¼,Ô2GÑHÔH��à�tØˆ<ØˆMØ×Ò˜˜v wÑ/Ô/Ð/Ø$ð 	ð 	ˆDØ�tˆ|ˆ|à×!Ò! $¨°Ð9IÑJÔJÐJØ�ð ð
 ˜ÐÐÝ�+ t¨I¤Ñ7Ô7ˆFØð Lð L�ØŸš™œ�Ø×!Ò! %¨°Ð:JÑKÔKÐKÐKàˆrN   c                 óR   — t          ddd¦  «         |                      |||¦  «        S )zQ
        Use :meth:`get_fields` instead.

        .. deprecated:: 1.28.0
        Ú	getFieldsrû   r`   )r   rû   )rW   rì   r\   rí   s       rL   rý   zPdfReader.getFields:  s,   € õ 	% [°,ÀÑHÔHÐHØ�Š˜t V¨WÑ5Ô5Ð5rN   Úparentc                 ó  — d|v rt          t          |d         ¦  «        S d|v rM|                      t          t          |d         ¦  «        ¦  «        dz   t          t          |d         ¦  «        z   S t          t          |d         ¦  «        S )Nú/TMú/Parentú.ú/T)r   r’   Ú_get_qualified_field_namer4   )rW   rþ   s     rL   r  z#PdfReader._get_qualified_field_nameH  s�   € Ø�Fˆ?ˆ?Ý�˜V Eœ]Ñ+Ô+Ð+Ø˜&Ð Ð à×.Ò.ÝÕ)¨6°)Ô+<Ñ=Ô=ñô ð ñõ •s˜F 4œLÑ)Ô)ñ	*ðõ �˜V Dœ\Ñ*Ô*Ð*rN   rú   rõ   c                 óâ  — |                       |||¦  «         	 t          t          |d         ¦  «        }nz# t          $ rm 	 d|v r2|                      t          t
          |d         ¦  «        ¦  «        dz   }nd}|t          t          |d         ¦  «        z  }n# t          $ r Y Y d S w xY wY nw xY w|r,|                      |||¦  «         |                     d¦  «         t          |¦  «        ||<   d S )Nr   r  r  r   r  ú
)	ró   r   r’   ÚKeyErrorr  r4   Ú_write_fieldÚwriter6   )rW   rú   r\   rí   rõ   rX   s         rL   rô   zPdfReader._build_fieldV  s,  € ð 	×Ò˜ ¨Ñ0Ô0Ð0ð	Ý•s˜E %œLÑ)Ô)ˆCˆCøÝð 	ð 	ð 	ðØ Ð%Ð%à×6Ò6Ý Õ!1°5¸Ô3CÑDÔDñô ð ñð �Cð �CØ•t�C  t¤Ñ-Ô-Ñ-��øÝð ð ð à���ðøøøð �ð	øøøð ð 	 Ø×Ò˜g uÐ.>Ñ?Ô?Ð?Ø�MŠM˜$ÑÔÐÝ˜E‘l”lˆˆs‰ˆˆs4   ™5 µ
B,Á ABÂB,Â
B&Â!B,Â%B&Â&B,Â+B,c                 ó¢   — t           j        |v r>|t           j                 D ]-}|                      |                     ¦   «         ||¦  «         Œ,d S d S rT   )ÚPAÚKIDSrû   rd   )rW   rì   r\   rí   Úkids        rL   ró   zPdfReader._check_kidst  s\   € õ Œ7�dˆ?ˆ?à�BœG”}ð Cð C�Ø—’ §¢Ñ 0Ô 0°&¸'ÑBÔBÐBÐBð ˆ?ðCð CrN   c                 ó€  — t          j        ¦   «         }|t          j        ¦   «         z   }|D �]}|t           j        t           j        fv rŒ||         }	 |t           j        k    r9dddddœ}||         |v r'|                     |› d|||                  › d�¦  «         n�|t           j        k    r^	 ||         t           j                 }n(# t          $ r ||         t           j
                 }Y nw xY w|                     |› d|› d�¦  «         n!|                     |› d||         › d�¦  «         �Œ# t          $ r Y �Œw xY wd S )NÚButtonÚTextÚChoiceÚ	Signature)z/Btnú/Txz/Chz/Sigú: r  )r&   Ú
attributesr#   ÚKidsÚAAÚFTr	  ÚParentÚTMr  ÚT)	rW   rí   rú   rõ   Úfield_attributes_tupler÷   Ú	attr_nameÚtypesÚnames	            rL   r  zPdfReader._write_field|  s¨  € Ý!:Ô!EÑ!GÔ!GÐà"Õ%BÔ%MÑ%OÔ%OÑOð 	ð +ð 	ñ 	ˆDØÝ)Ô.Ý)Ô,ðð ð ð Ø(¨Ô.ˆIðØÕ4Ô7Ò7Ð7ð !)Ø%Ø'Ø +ð	ð �Eð ˜T”{ eÐ+Ð+ØŸš¨Ð&LÐ&L°e¸EÀ$¼KÔ6HÐ&LÐ&LÐ&LÑMÔMÐMøØÕ6Ô=Ò=Ð=ðHØ$ Tœ{Õ+DÔ+GÔH˜˜øÝ#ð Hð Hð HØ$ Tœ{Õ+DÔ+FÔG˜˜˜ðHøøøà—M’M YÐ":Ð":°$Ð":Ð":Ð":Ñ;Ô;Ð;Ð;à—M’M YÐ"AÐ"A°%¸´+Ð"AÐ"AÐ"AÑBÔBÐBùøÝð ð ð à‘ðøøøð7	ð 	s8   ÁAD-Â-CÃD-Ã"C+Ã(D-Ã*C+Ã+A D-Ä-
D;Ä:D;Úfull_qualified_namec           
      ó~  — dt           dt          dt           fd„}|                      ¦   «         }|€i S i }|                     ¦   «         D ]t\  }}|                     d¦  «        dk    rV|r|                     d¦  «        ||<   Œ9|                     d¦  «        | |t          t           |d	         ¦  «        |¦  «        <   Œu|S )
a¦  
        Retrieve form fields from the document with textual data.

        Args:
            full_qualified_name: to get full name

        Returns:
            A dictionary. The key is the name of the form field,
            the value is the content of the field.

            If the document contains multiple form fields with the same name, the
            second and following will get the suffix .2, .3, ...
        Úkrø   rF   c                 ór   ‡ — ‰ |vr‰ S ‰ dz   t          t          ˆ fd„|D ¦   «         ¦  «        dz   ¦  «        z   S )Nr  c                 óD   •— g | ]}|                      ‰d z   ¦  «        ¯d‘ŒS )r  r   )Ú
startswith)Ú.0Úkkr"  s     €rL   ú
<listcomp>zGPdfReader.get_form_text_fields.<locals>.indexed_key.<locals>.<listcomp>·  s.   ø€ ÐLÐLÐL R°R·]²]À1ÀsÁ7Ñ5KÔ5KÐL˜qÐLÐLÐLrN   é   )r’   Úsum)r"  rø   s   ` rL   Úindexed_keyz3PdfReader.get_form_text_fields.<locals>.indexed_key°  sW   ø€ Ø˜ˆˆØ�ð Øñå�#ÐLÐLÐLÐL¨6ÐLÑLÔLÑMÔMÐPQÑQÑRÔRñSðrN   Nz/FTr  z/Vr  )r’   Údictrû   ÚitemsrZ   r   )rW   r   r+  Ú
formfieldsÚffrú   Úvalues          rL   Úget_form_text_fieldszPdfReader.get_form_text_fields¡  sÖ   € ð	�3ð 	­ð 	µð 	ð 	ð 	ð 	ð —_’_Ñ&Ô&ˆ
ØÐØˆIØˆØ&×,Ò,Ñ.Ô.ð 	Rð 	R‰LˆE�5Ø�yŠy˜ÑÔ 5Ò(Ð(Ø&ð RØ %§	¢	¨$¡¤�B�u‘I�IàBGÇ)Â)ÈDÁ/Ä/�B�{�{¥4­¨U°4¬[Ñ#9Ô#9¸2Ñ>Ô>Ñ?øØˆ	rN   c                 óL   — t          ddd¦  «         |                      ¦   «         S )z[
        Use :meth:`get_form_text_fields` instead.

        .. deprecated:: 1.28.0
        ÚgetFormTextFieldsr1  r`   )r   r1  rV   s    rL   r3  zPdfReader.getFormTextFieldsÇ  s2   € õ 	%ØÐ!7¸ñ	
ô 	
ð 	
ð ×(Ò(Ñ*Ô*Ð*rN   c                 ó®  — |€Æi }t          t          | j        t          j                 ¦  «        }t
          j        |v r&t          t          |t
          j                 ¦  «        }nft
          j        |v rXt          t          |t
          j                 ¦  «        }t
          j        |v r%t          t          |t
          j                 ¦  «        }|€|S t          j
        |v rRt          t          |t          j
                 ¦  «        D ]*}|                      |                     ¦   «         |¦  «         Œ+�n(t
          j        |v rÏt          t          |t
          j                 ¦  «        }t          dt          |¦  «        d¦  «        D ]Š}t          t           ||                              ¦   «         ¦  «        }||dz                                 ¦   «         }t#          |t          ¦  «        rd|v r|d         }|                      ||¦  «        }	|	�|	||<   Œ‹nK|                     ¦   «         D ]6\  }
}|                     ¦   «         }|                      |
|¦  «        }	|	�|	||
<   Œ7|S )zü
        Retrieve the named destinations present in the document.

        Args:
            tree:
            retval:

        Returns:
            A dictionary which maps names to
            :class:`Destinations<pypdf.generic.Destination>`.
        Nr   r)  r   ú/D)r   r4   r©   rª   rÉ   ÚCAÚDESTSr?   ÚNAMESr  r  r0   rë   rd   ÚrangerÖ   r’   r[   Ú_build_destinationr-  )rW   rì   r\   rö   Únamesr  ÚirX   r0  ÚdestÚk__Úv__Úvals                rL   rë   z!PdfReader._get_named_destinationsÒ  s  € ð  ˆ>ØˆFÝÕ+¨T¬\½"¼'Ô-BÑCÔCˆGõ Œx˜7Ð"Ð"Ý�J¨µ´Ô(9Ñ:Ô:��Ý”˜WÐ$Ð$ÝÕ-¨wµr´xÔ/@ÑAÔA�Ý”8˜uÐ$Ð$Ý¥
¨Eµ"´(¬OÑ<Ô<�Dàˆ<ØˆMåŒ7�dˆ?ˆ?å�K¨­b¬g¬Ñ7Ô7ð Gð G�Ø×,Ò,¨S¯^ª^Ñ-=Ô-=¸vÑFÔFÐFÐFñGõ ŒX˜ÐÐÝÕ)¨4µ´¬>Ñ:Ô:ˆEÝ˜1�c %™jœj¨!Ñ,Ô,ð 'ð '�Ý�3  a¤× 3Ò 3Ñ 5Ô 5Ñ6Ô6�Ø˜a !™eœ×/Ò/Ñ1Ô1�Ý˜eÕ%5Ñ6Ô6ð (¸4À5¸=¸=Ø! $œK�EØ×.Ò.¨s°EÑ:Ô:�ØÐ#Ø"&�F˜3‘Køð'ð !ŸJšJ™LœLð 'ð '‘��SØ—n’nÑ&Ô&�Ø×.Ò.¨s°CÑ8Ô8�ØÐ#Ø"&�F˜3‘KøØˆrN   c                 óP   — t          ddd¦  «         |                      ||¦  «        S )rç   ÚgetNamedDestinationsré   r`   )r   rë   )rW   rì   r\   s      rL   rB  zPdfReader.getNamedDestinations  s6   € õ 	%Ø"Ð$8¸'ñ	
ô 	
ð 	
ð ×+Ò+¨D°&Ñ9Ô9Ð9rN   c                 ó*   — |                       ¦   «         S )zª
        Read-only property for the outline present in the document.

        (i.e., a collection of 'outline items' which are also known as
        'bookmarks')
        )Ú_get_outlinerV   s    rL   ÚoutlinezPdfReader.outline  s   € ð × Ò Ñ"Ô"Ð"rN   c                 ó2   — t          ddd¦  «         | j        S )zP
        Use :py:attr:`outline` instead.

        .. deprecated:: 2.9.0
        ÚoutlinesrE  r`   )r   rE  rV   s    rL   rG  zPdfReader.outlines!  s   € õ 	% Z°¸GÑDÔDÐDØŒ|ÐrN   ÚnoderE  c                 ó¦  — |€°g }t          t          | j        t          j                 ¦  «        }t
          j        |v r]t          t          |t
          j                 ¦  «        }t          |t          ¦  «        r|S |�d|v rt          t          |d         ¦  «        }|  	                    ¦   «         | _
        |€|S 	 |                      |¦  «        }|r|                     |¦  «         d|v rHg }|                      t          t          |d         ¦  «        |¦  «         |r|                     |¦  «         d|vrnt          t          |d         ¦  «        }Œ™|S )Nú/FirstTz/Next)r   r4   r©   rª   rÉ   ÚCOÚOUTLINESr[   r;   rë   Ú_namedDestsÚ_build_outline_itemÚappendrD  )rW   rH  rE  rö   ÚlinesÚoutline_objÚsub_outlines          rL   rD  zPdfReader._get_outline+  sY  € ð ˆ?ØˆGÝÕ+¨T¬\½"¼'Ô-BÑCÔCˆGõ Œ{˜gÐ%Ð%ÝÕ-¨wµr´{Ô/CÑDÔD�å˜e¥ZÑ0Ô0ð #Ø"�Nð Ð$¨°UÐ):Ð):ÝÕ 0°%¸´/ÑBÔB�DØ#×;Ò;Ñ=Ô=ˆDÔàˆ<ØˆNð	9Ø×2Ò2°4Ñ8Ô8ˆKØð ,Ø—’˜{Ñ+Ô+Ð+ð ˜4ÐÐØ)+�Ø×!Ò!¥$Õ'7¸¸h¼Ñ"HÔ"HÈ+ÑVÔVÐVØð 0Ø—N’N ;Ñ/Ô/Ð/à˜dÐ"Ð"ØÝÕ(¨$¨w¬-Ñ8Ô8ˆDð	9ð  ˆrN   c                 óP   — t          ddd¦  «         |                      ||¦  «        S )zQ
        Use :py:attr:`outline` instead.

        .. deprecated:: 1.28.0
        ÚgetOutlinesrE  r`   )r   rD  )rW   rH  rE  s      rL   rT  zPdfReader.getOutlinesT  s,   € õ 	% ]°I¸wÑGÔGÐGØ× Ò   wÑ/Ô/Ð/rN   c                 ó¶   — t          t          | j        t          j                 ¦  «        }t
          j        |v r t          d|t
          j                 ¦  «        S dS )uÔ   
        Read-only property for the list of threads.

        See Â§8.3.2 from PDF 1.7 spec.

        It's an array of dictionaries with "/F" and "/I" properties or
        None if there are no articles.
        r0   N)r   r4   r©   rª   rÉ   rK  ÚTHREADS)rW   rö   s     rL   ÚthreadszPdfReader.threads_  sF   € õ Õ'¨¬µb´gÔ)>Ñ?Ô?ˆÝŒ:˜Ð Ð Ý˜ w­r¬zÔ':Ñ;Ô;Ð;à�4rN   Úindirect_referencec                 ó"  — | j         €#d„ t          | j        ¦  «        D ¦   «         | _         |�t          |t          ¦  «        rdS t          |t
          ¦  «        r|}n|j        }| j         €
J d¦   «         ‚| j                              |d¦  «        }|S )z†
        Generate _page_id2num.

        Args:
            indirect_reference:

        Returns:
            The page number.
        Nc                 ó.   — i | ]\  }}|j         j        |“ŒS r”   )rX  Úidnum)r&  r<  Úxs      rL   ú
<dictcomp>z:PdfReader._get_page_number_by_indirect.<locals>.<dictcomp>|  s1   € ð !ð !ð !Ù26°!°Q�Ô$Ô*¨Að!ð !ð !rN   éÿÿÿÿrå   )r¢   Ú	enumerateÚpagesr[   r;   Úintr[  rZ   )rW   rX  r[  Úrets       rL   Ú_get_page_number_by_indirectz&PdfReader._get_page_number_by_indirecto  s«   € ð ÔÐ$ð!ð !Ý:CÀDÄJÑ:OÔ:Oð!ñ !ô !ˆDÔð Ð%­Ð4FÍ
Ñ)SÔ)SÐ%Ø�2ÝÐ(­#Ñ.Ô.ð 	-Ø&ˆEˆEà&Ô,ˆEØÔ Ð,Ð,¨oÑ,Ô,Ð,ØÔ×#Ò# E¨2Ñ.Ô.ˆØˆ
rN   Úpagec                 ó6   — |                       |j        ¦  «        S )a  
        Retrieve page number of a given PageObject.

        Args:
            page: The page to get page number. Should be
                an instance of :class:`PageObject<pypdf._page.PageObject>`

        Returns:
            The page number or -1 if page is not found
        )rc  rX  ©rW   rd  s     rL   Úget_page_numberzPdfReader.get_page_numberŠ  s   € ð ×0Ò0°Ô1HÑIÔIÐIrN   c                 óN   — t          ddd¦  «         |                      |¦  «        S )zV
        Use :meth:`get_page_number` instead.

        .. deprecated:: 1.28.0
        ÚgetPageNumberrg  r`   )r   rg  rf  s     rL   ri  zPdfReader.getPageNumber—  s+   € õ 	% _Ð6GÈÑQÔQÐQØ×#Ò# DÑ)Ô)Ð)rN   Údestinationc                 ó6   — |                       |j        ¦  «        S )zÚ
        Retrieve page number of a given Destination object.

        Args:
            destination: The destination to get page number.

        Returns:
            The page number or -1 if page is not found
        )rc  rd  ©rW   rj  s     rL   Úget_destination_page_numberz%PdfReader.get_destination_page_number   s   € ð ×0Ò0°Ô1AÑBÔBÐBrN   c                 óN   — t          ddd¦  «         |                      |¦  «        S )zb
        Use :meth:`get_destination_page_number` instead.

        .. deprecated:: 1.28.0
        ÚgetDestinationPageNumberrm  r`   )r   rm  rl  s     rL   ro  z"PdfReader.getDestinationPageNumber¬  s4   € õ 	%Ø&Ð(EÀwñ	
ô 	
ð 	
ð ×/Ò/°Ñ<Ô<Ð<rN   re   Úarrayc                 óZ  — d\  }}t          |t          t          f¦  «        s*t          |t          ¦  «        rt	          |¦  «        dk    s|€0t          ¦   «         }t          ||t          j        ¦   «         ¦  «        S |dd…         \  }}|dd …         }	 t          ||t          ||¬¦  «        ¦  «        S # t          $ rl t          d|› d|› �t          ¦  «         | j        r‚ | j        d         j        }|€t          ¦   «         n|}t          ||t          j        ¦   «         ¦  «        cY S w xY w)N©NNr   r)  )Úfit_typeÚfit_argszUnknown destination: ú )r[   r;   r’   r0   rÖ   r3   r7   Úfitr-   r   rŽ   r˜   r`  rX  )rW   re   rp  rd  ÚtypÚtmprX  s          rL   r:  zPdfReader._build_destination·  s@  € ð ‰	ˆˆcõ �u�z­3Ð/Ñ0Ô0ð	Iå˜5¥+Ñ.Ô.ð	Iå36°u±:´:À²?°?Øˆ}õ ‘<”<ˆDÝ˜u d­C¬G©I¬IÑ6Ô6Ð6à˜a ˜cœ
‰IˆD�#Ø˜!˜"˜"”IˆEð	IÝ" 5¨$µ¸SÈ5Ð0QÑ0QÔ0QÑRÔRÐRøÝð Ið Ið IÝÐF°uÐFÐF¸uÐFÐFÍÑQÔQÐQØ”;ð Øà”j ”mÔ6�Ø58°[¥Z¡\¤\ \ÀcÐ"Ý" 5Ð*<½c¼g¹i¼iÑHÔHÐHÐHÐHðIøøøs   ÂB4 Â4A3D*Ä)D*c                 ót  — d\  }}}	 t          d|d         ¦  «        }n+# t          $ r | j        rt          d|›�¦  «        ‚d}Y nw xY wd|v rYt          t          |d         ¦  «        }t          t
          |t          j                 ¦  «        }|dk    r|t          j                 }n-d|v r)|d         }t          |t          ¦  «        rd	|v r|d	         }t          |t          ¦  «        r|                      ||¦  «        }nÄt          |t          ¦  «        rN	 |                      || j        |         j        ¦  «        }n‡# t          $ r |                      |d ¦  «        }Y new xY w|€|                      ||¦  «        }nH| j        rt          d
|›�¦  «        ‚t          d|›d�t           ¦  «         |                      |d ¦  «        }|rkd|v r/t          d„ |d         D ¦   «         ¦  «        |t          d¦  «        <   d|v r|d         |t          d¦  «        <   d|v r|d         |t          d¦  «        <   ||_        |S )N©NNNr’   z/Titlez(Outline Entry Missing /Title attribute: r   z/Az/GoToz/Destr5  zUnexpected destination zRemoved unexpected destination z from destinationz/Cc              3   ó4   K  — | ]}t          |¦  «        V — Œd S rT   )r8   )r&  Úcs     rL   ú	<genexpr>z0PdfReader._build_outline_item.<locals>.<genexpr>  s)   è è € Ð<`Ð<`ÐPQ½[È¹^¼^Ð<`Ð<`Ð<`Ð<`Ð<`Ð<`rN   z/FrÔ   )r   r  r˜   r-   r4   r:   r'   ÚSÚDr[   r0   r:  r’   rM  Ú
dest_arrayr   rŽ   rH  )rW   rH  r=  re   Úoutline_itemÚactionÚaction_types          rL   rN  zPdfReader._build_outline_itemØ  sª  € Ø$4Ñ!ˆˆe�\ð	Ý˜  X¤Ñ/Ô/ˆEˆEøÝð 	ð 	ð 	ØŒ{ð XÝ"Ð#VÈdÐ#VÐ#VÑWÔWÐWØˆEˆEˆEð	øøøð
 �4ˆ<ˆ<åÕ*¨D°¬JÑ7Ô7ˆFÝ�z¨6Õ2EÔ2GÔ+HÑIÔIˆKØ˜gÒ%Ð%ØÕ1Ô3Ô4�øØ˜ˆ_ˆ_à˜”=ˆDå˜$Õ 0Ñ1Ô1ð "°d¸d°l°lØ˜D”z�å�d�KÑ(Ô(ð 	@Ø×2Ò2°5¸$Ñ?Ô?ˆLˆLÝ˜�cÑ"Ô"ð 	@ðDØ#×6Ò6Ø˜4Ô+¨DÔ1Ô<ñ ô  ��øõ ð Dð Dð Dà#×6Ò6°u¸dÑCÔC���ðDøøøð ˆ\ð  ×2Ò2°5¸$Ñ?Ô?ˆLˆLàŒ{ð Ý"Ð#E¸TÐ#EÐ#EÑFÔFÐFåØO°dÐOÐOÐOÝñô ð ð  ×2Ò2°5¸$Ñ?Ô?ˆLð ð 	DØ�tˆ|ˆ|å1<Ð<`Ð<`ÐUYÐZ^ÔU_Ð<`Ñ<`Ô<`Ñ1`Ô1`��Z¨Ñ-Ô-Ñ.Ø�tˆ|ˆ|ð 26°d´��Z¨Ñ-Ô-Ñ.Ø˜4ÐÐð 6:¸(´^��Z¨Ñ1Ô1Ñ2Ø ˆÔØÐs!   ˆ Ÿ%AÁAÄ&D= Ä= E ÅE c                 ó6   — t          | j        | j        ¦  «        S )zVRead-only property that emulates a list of :py:class:`Page<pypdf._page.Page>` objects.)r   r×   rá   rV   s    rL   r`  zPdfReader.pages  s   € õ ˜DÔ/°´Ñ@Ô@Ð@rN   c                 ó^   ‡ — ˆ fd„t          t          ‰ j        ¦  «        ¦  «        D ¦   «         S )z²
        A list of labels for the pages in this document.

        This property is read-only. The labels are in the order that the pages
        appear in the document.
        c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r”   )Úpage_index2page_label)r&  r<  rW   s     €rL   r(  z)PdfReader.page_labels.<locals>.<listcomp>(  s$   ø€ ÐOÐOÐO°1Õ% d¨AÑ.Ô.ÐOÐOÐOrN   )r9  rÖ   r`  rV   s   `rL   Úpage_labelszPdfReader.page_labels   s0   ø€ ð PÐOÐOÐO½½cÀ$Ä*¹o¼oÑ8NÔ8NÐOÑOÔOÐOrN   c                 óÀ   — t          t          | j        t          j                 ¦  «        }t
          j        |v r%t          t          |t
          j                 ¦  «        S dS )aï  
        Get the page layout currently being used.

        .. list-table:: Valid ``layout`` values
           :widths: 50 200

           * - /NoLayout
             - Layout explicitly not specified
           * - /SinglePage
             - Show one page at a time
           * - /OneColumn
             - Show one column at a time
           * - /TwoColumnLeft
             - Show pages in two columns, odd-numbered pages on the left
           * - /TwoColumnRight
             - Show pages in two columns, odd-numbered pages on the right
           * - /TwoPageLeft
             - Show two pages at a time, odd-numbered pages on the left
           * - /TwoPageRight
             - Show two pages at a time, odd-numbered pages on the right
        N)r   r4   r©   rª   rÉ   rñ   ÚPAGE_LAYOUTr:   )rW   r©   s     rL   Úpage_layoutzPdfReader.page_layout*  sF   € õ. Õ'¨¬µb´gÔ)>Ñ?Ô?ˆÝŒ>˜WÐ$Ð$Ý�
 G­B¬NÔ$;Ñ<Ô<Ð<ØˆtrN   c                 ó2   — t          ddd¦  «         | j        S )úU
        Use :py:attr:`page_layout` instead.

        .. deprecated:: 1.28.0
        ÚgetPageLayoutr‹  r`   ©r   r‹  rV   s    rL   rŽ  zPdfReader.getPageLayoutF  s   € õ 	% _°mÀWÑMÔMÐMØÔÐrN   c                 ó2   — t          ddd¦  «         | j        S )r�  Ú
pageLayoutr‹  r`   r�  rV   s    rL   r‘  zPdfReader.pageLayoutO  s   € õ 	% \°=À'ÑJÔJÐJØÔÐrN   c                 ó`   — 	 | j         t          j                 d         S # t          $ r Y dS w xY w)a2  
        Get the page mode currently being used.

        .. list-table:: Valid ``mode`` values
           :widths: 50 200

           * - /UseNone
             - Do not show outline or thumbnails panels
           * - /UseOutlines
             - Show outline (aka bookmarks) panel
           * - /UseThumbs
             - Show page thumbnails panel
           * - /FullScreen
             - Fullscreen view
           * - /UseOC
             - Show Optional Content Group (OCG) panel
           * - /UseAttachments
             - Show attachments panel
        z	/PageModeN)r©   rª   rÉ   r  rV   s    rL   Ú	page_modezPdfReader.page_modeY  s=   € ð*	Ø”<¥¤Ô(¨Ô5Ð5øÝð 	ð 	ð 	Ø�4�4ð	øøøs   ‚ Ÿ
-¬-c                 ó2   — t          ddd¦  «         | j        S )úS
        Use :py:attr:`page_mode` instead.

        .. deprecated:: 1.28.0
        ÚgetPageModer“  r`   ©r   r“  rV   s    rL   r–  zPdfReader.getPageModes  s   € õ 	% ]°KÀÑIÔIÐIØŒ~ÐrN   c                 ó2   — t          ddd¦  «         | j        S )r•  ÚpageModer“  r`   r—  rV   s    rL   r™  zPdfReader.pageMode|  s   € õ 	% Z°¸gÑFÔFÐFØŒ~ÐrN   r`  Úinheritc                 óx  — t          t          j        ¦  «        t          t          j        ¦  «        t          t          j        ¦  «        t          t          j        ¦  «        f}|€i }|€J| j        t          j                  	                    ¦   «         }|d          	                    ¦   «         }g | _
        d}t          j        |v r|t          j                 }|dk    rh|D ]}||v r||         ||<   Œ|t          j                 D ]?}i }	t          |t          ¦  «        r||	d<    | j        | 	                    ¦   «         |fi |	¤Ž Œ@d S |dk    rqt#          |                     ¦   «         ¦  «        D ]\  }
}|
|vr|||
<   Œt'          | |¦  «        }|                     |¦  «         | j
                             |¦  «         d S d S )NrÓ   rX  z/Page)r:   ÚPGÚ	RESOURCESÚMEDIABOXÚCROPBOXÚROTATEr©   rª   rÉ   rd   rŸ   r  ÚTYPEr  r[   r9   rÕ   Úlistr-  r   r¿   rO  )rW   r`  rš  rX  Úinheritable_page_attributesrö   Útr÷   rd  ÚaddtÚattr_inr0  Úpage_objs                rL   rÕ   zPdfReader._flatten†  sÒ  € õ •r”|Ñ$Ô$Ý•r”{Ñ#Ô#Ý•r”zÑ"Ô"Ý•r”yÑ!Ô!ð	'
Ð#ð ˆ?ØˆGØˆ=ð ”l¥2¤7Ô+×6Ò6Ñ8Ô8ˆGØ˜HÔ%×0Ò0Ñ2Ô2ˆEØ#%ˆDÔ àˆÝŒ7�eÐÐØ•b”g”ˆAà�Š=ˆ=Ø3ð 0ð 0�Ø˜5�=�=Ø$)¨$¤K�G˜D‘MøØ�bœgœð Bð B�Ø�Ý˜d¥NÑ3Ô3ð 6Ø15�DÐ-Ñ.Ø�”˜dŸošoÑ/Ô/°ÐAÐA¸DÐAÐAÐAÐAð	Bð Bð
 �'Š\ˆ\Ý"& w§}¢}¡¤Ñ"7Ô"7ð +ð +‘�˜ð  %Ð'Ð'Ø%*�E˜'‘NøÝ! $Ð(:Ñ;Ô;ˆHØ�OŠO˜EÑ"Ô"Ð"ð Ô ×'Ò'¨Ñ1Ô1Ð1Ð1Ð1ð ˆ\rN   c                 óÂ  — | j         |j                 \  }}t          |d| ¦  «                             ¦   «         }t	          t
          |d         ¦  «        dk    sJ ‚||d         k     sJ ‚t          t          |                     ¦   «         ¦  «        ¦  «        }t          |d         ¦  «        D �]�}t          |¦  «         |                     dd¦  «         t          j        |¦  «        }t          |¦  «         |                     dd¦  «         t          j        |¦  «        }t          |¦  «         |                     dd¦  «         ||j        k    rŒ¦| j        r||k    rt          d¦  «        ‚|                     t!          |d         |z   ¦  «        d¦  «         t          |¦  «         |                     dd¦  «         	 t#          || ¦  «        }	ni# t$          $ r\}
t'          d	|› d
|j        › d|j        › d|
› �t*          ¦  «         | j        rt          d|
› �¦  «        ‚t-          ¦   «         }	Y d }
~
nd }
~
ww xY w|	c S | j        rt          d¦  «        ‚t-          ¦   «         S )Nr   ú/Typez/ObjStmz/Nr^  r   zObject is in wrong index.rJ  zInvalid stream (index z) within object ru  r  zCan't read object stream: z%This is a fatal error in strict mode.)Úxref_objStmr[  r9   rd   r   r’   r   r   Úget_datar9  r   r·   r<   Úread_from_streamr˜   r-   ra  r@   r.   r   Ú
generationrŽ   r;   )rW   rX  ÚstmnumÚidxÚobj_stmÚstream_datar<  ÚobjnumÚoffsetrÀ   Úexcs              rL   Ú_get_object_from_streamz!PdfReader._get_object_from_stream´  s§  € ð
 Ô&Ð'9Ô'?Ô@‰ˆ�Ý'5°f¸aÀÑ'FÔ'F×'QÒ'QÑ'SÔ'Sˆå•C˜ Ô)Ñ*Ô*¨iÒ7Ð7Ð7Ð7à�W˜T”]Ò"Ð"Ð"Ð"Ý�b ×!1Ò!1Ñ!3Ô!3Ñ4Ô4Ñ5Ô5ˆÝ�w˜t”}Ñ%Ô%ð $	ñ $	ˆAÝ Ñ,Ô,Ð,Ø×Ò˜R Ñ#Ô#Ð#Ý!Ô2°;Ñ?Ô?ˆFÝ Ñ,Ô,Ð,Ø×Ò˜R Ñ#Ô#Ð#Ý!Ô2°;Ñ?Ô?ˆFÝ Ñ,Ô,Ð,Ø×Ò˜R Ñ#Ô#Ð#ØÐ+Ô1Ò1Ð1àØŒ{ð @˜s ašx˜xÝ"Ð#>Ñ?Ô?Ð?Ø×Ò�S ¨Ô!2°VÑ!;Ñ<Ô<¸aÑ@Ô@Ð@õ   Ñ,Ô,Ð,Ø×Ò˜R Ñ#Ô#Ð#ð#Ý! +¨tÑ4Ô4��øÝ!ð #ð #ð #õ ð¨Qð ð Ø)Ô/ðð Ø2DÔ2Oðð àðð õ ñ	ô ð ð ”;ð KÝ&Ð'IÀCÐ'IÐ'IÑJÔJÐJå ‘l”l������øøøøð#øøøð ˆJˆJˆJàŒ;ð 	HÝÐFÑGÔGÐGÝ‰|Œ|Ðs   Æ?GÇ
H6ÇAH1È1H6ÚnumÚgenc                 óH   — t          ||| ¦  «                             ¦   «         S )z×
        Used to ease development.

        This is equivalent to generic.IndirectObject(num,gen,self).get_object()

        Args:
            num:
            gen:

        Returns:
            A PdfObject
        )r9   rd   )rW   r¶  r·  s      rL   Ú_get_indirect_objectzPdfReader._get_indirect_objectê  s"   € õ ˜c 3¨Ñ-Ô-×8Ò8Ñ:Ô:Ð:rN   c                 ó
  — t          |t          ¦  «        rt          |d| ¦  «        }|                      |j        |j        ¦  «        }|�|S |j        dk    r%|j        | j        v r|                      |¦  «        }�nç|j        | j        v �rc|j        | j        |j                 v �rI| j	         
                    |j        i ¦  «         
                    |j        d¦  «        rt          ¦   «         S | j        |j                 |j                 }| j                             |d¦  «         	 |                      | j        ¦  «        \  }}�n–# t          $ �rˆ t!          | j        d¦  «        r't#          | j                             ¦   «         ¦  «        }ni| j                             ¦   «         }| j                             dd¦  «         | j                             d¦  «        }| j                             |d¦  «         t+          j        d|j        › d|j        › d�                     ¦   «         |¦  «        }|�¤t1          d|j        › d	|j        › d
�t2          ¦  «         |                     d¦  «        dz   | j        |j                 |j        <   | j                             |                     d¦  «        dz   ¦  «         |                      | j        ¦  «        \  }}nd}Y nw xY w||j        k    r5| j        r.| j        r&t;          d|j        › d|j        › d|› d|› d�	¦  «        ‚n8||j        k    r-| j        r&t;          d|j        › d|j        › d|› d|› d�	¦  «        ‚| j        r||j        k    sJ ‚t=          | j        | ¦  «        }| j        sj| j         �c| j          !                    ¦   «         stE          d¦  «        ‚tG          tH          |¦  «        }| j          %                    ||j        |j        ¦  «        }�nut!          | j        d¦  «        r't#          | j                             ¦   «         ¦  «        }ni| j                             ¦   «         }| j                             dd¦  «         | j                             d¦  «        }| j                             |d¦  «         t+          j        d|j        › d|j        › d�                     ¦   «         |¦  «        }|��Yt1          d|j        › d|j        › d�t2          ¦  «         |j        | j        vri | j        |j        <   |                     d¦  «        dz   | j        |j                 |j        <   | j                             | &                    d¦  «        dz   ¦  «         tO          | j        ¦  «         | j                             dd¦  «         t=          | j        | ¦  «        }| j        sj| j         �c| j          !                    ¦   «         stE          d¦  «        ‚tG          tH          |¦  «        }| j          %                    ||j        |j        ¦  «        }n<t1          d|j        › d|j        › d�t2          ¦  «         | j        rt;          d¦  «        ‚|  (                    |j        |j        |¦  «         |S )Nr   FÚ	getbufferr^  z\sz\s+z\s+objz
Object ID ú,z ref repairedr   zExpected object ID (ru  z) does not match actual (z); xref table not zero-indexed.z).zFile has not been decryptedzObject z foundz not defined.zCould not find object.))r[   ra  r9   Úcache_get_indirect_objectr­  r[  rª  rµ  ÚxrefÚxref_free_entryrZ   r;   r—   r·   Úread_object_headerÚ	Exceptionr£   Úbytesr»  r¶   r¥   ÚreÚsearchÚencoder   rŽ   Ústartr¡   r˜   r-   r@   r¦   r§   Úis_decryptedr,   r   r=   Údecrypt_objectÚendr    Úcache_indirect_object)	rW   rX  r\   rÆ  r[  r­  ÚbufÚpÚms	            rL   rd   zPdfReader.get_objectù  s  € õ Ð(­#Ñ.Ô.ð 	MÝ!/Ð0BÀAÀtÑ!LÔ!LÐØ×/Ò/ØÔ)Ð+=Ô+Cñ
ô 
ˆð ÐØˆMàÔ)¨QÒ.Ð.Ø"Ô(¨DÔ,<Ð<Ð<à×1Ò1Ð2DÑEÔEˆF‰FàÔ)¨T¬YÐ6Ñ6Ø"Ô(¨D¬IÐ6HÔ6SÔ,TÐTÑTàÔ#×'Ò'Ð(:Ô(EÀrÑJÔJ×NÒNØ"Ô(¨%ñô ð $õ "‘|”|Ð#Ø”IÐ0Ô;Ô<Ð=OÔ=UÔVˆEØŒK×Ò˜U AÑ&Ô&Ð&ðØ$(×$;Ò$;¸D¼KÑ$HÔ$HÑ!��z‘zøÝð ñ ð Ý˜4œ;¨Ñ4Ô4ð +Ý ¤× 5Ò 5Ñ 7Ô 7Ñ8Ô8�C�Càœ×(Ò(Ñ*Ô*�AØ”K×$Ò$ Q¨Ñ*Ô*Ð*Øœ+×*Ò*¨2Ñ.Ô.�CØ”K×$Ò$ Q¨Ñ*Ô*Ð*Ý”IØ\Ð,Ô2Ð\Ð\Ð7IÔ7TÐ\Ð\Ð\×cÒcÑeÔeØñô �ð �=Ý"ØlÐ%7Ô%=ÐlÐlÐ@RÔ@]ÐlÐlÐlÝ ñô ð ð Ÿš ™œ a™ð ”IÐ0Ô;Ô<Ø*Ô0ñð ”K×$Ò$ Q§W¢W¨Q¡Z¤Z°!¡^Ñ4Ô4Ð4Ø(,×(?Ò(?ÀÄÑ(LÔ(LÑ%�E˜:˜:à�Eøøð/øøøð0 Ð*Ô0Ò0Ð0°T´_Ð0à”;ð Ý&ð7Ð/AÔ/Gð 7ð 7ÐJ\ÔJgð 7ð 7Ø27ð7ð 7Ø:Dð7ð 7ð 7ñô ð ðð Ð,Ô2Ò2Ð2°t´{Ð2å"ð/Ð+=Ô+Cð /ð /Ø)Ô4ð/ð /àð/ð /à *ð/ð /ð /ñô ð ð
 Œ{ð CØ!Ð%7Ô%BÒBÐBÐBÐBÝ  ¤¨dÑ3Ô3ˆFð Ô,ð °Ô1AÐ1MàÔ'×4Ò4Ñ6Ô6ð OÝ/Ð0MÑNÔNÐNå�i¨Ñ0Ô0�ØÔ)×8Ò8ØÐ.Ô4Ð6HÔ6Sñô �ùõ �t”{ KÑ0Ô0ð 'Ý˜DœK×1Ò1Ñ3Ô3Ñ4Ô4��à”K×$Ò$Ñ&Ô&�Ø”× Ò   AÑ&Ô&Ð&Ø”k×&Ò& rÑ*Ô*�Ø”× Ò   AÑ&Ô&Ð&Ý”	ØXÐ(Ô.ÐXÐXÐ3EÔ3PÐXÐXÐX×_Ò_ÑaÔaØñô ˆAð ‰}ÝØ^Ð0Ô6Ð^Ð^Ð9KÔ9VÐ^Ð^Ð^Ýñô ð ð &Ô0¸¼	ÐAÐAØ?A�D”IÐ0Ô;Ñ<à—G’G˜A‘J”J ‘Nð ”	Ð,Ô7Ô8Ð9KÔ9QÑRð ”× Ò  §¢ q¡¤¨A¡Ñ.Ô.Ð.Ý$ T¤[Ñ1Ô1Ð1Ø”× Ò   QÑ'Ô'Ð'Ý$ T¤[°$Ñ7Ô7�ð Ô0ð °TÔ5EÐ5QàÔ+×8Ò8Ñ:Ô:ð SÝ3Ð4QÑRÔRÐRå!¥)¨VÑ4Ô4�FØ!Ô-×<Ò<ØÐ 2Ô 8Ð:LÔ:Wñô �Føõ ØeÐ0Ô6ÐeÐeÐ9KÔ9VÐeÐeÐeÝñô ð ð ”;ð AÝ&Ð'?Ñ@Ô@Ð@Ø×"Ò"ØÔ)Ð+=Ô+CÀVñ	
ô 	
ð 	
ð ˆs   Ä$E ÅFKËKÚindirectReferencec                 óN   — t          ddd¦  «         |                      |¦  «        S )zQ
        Use :meth:`get_object` instead.

        .. deprecated:: 1.28.0
        Ú	getObjectrd   r`   )r   rd   )rW   rÎ  s     rL   rÐ  zPdfReader.getObject{  s)   € õ 	% [°,ÀÑHÔHÐHØ�ŠÐ0Ñ1Ô1Ð1rN   c                 óH  — d}t          |¦  «         |t          |¦  «        z  }|                     dd¦  «         t          |¦  «        }|t          |¦  «        z  }|                     dd¦  «         t          |¦  «        }|t          |¦  «        z  }|                     dd¦  «         |                     d¦  «        }t          |¦  «         |                     dd¦  «         |r"| j        rt          d|› d|› �t          ¦  «         t          |¦  «        t          |¦  «        fS )NFr^  r   é   z.Superfluous whitespace found in object header ru  )
r   r    r·   r   r¥   r   r˜   r   rŽ   ra  )rW   r—   Úextrar[  r­  Ú_objs         rL   rÀ  zPdfReader.read_object_header†  s+  € ð
 ˆÝ˜&Ñ!Ô!Ð!ØÕ% fÑ-Ô-Ñ-ˆØ�Š�B˜ÑÔÐÝ% fÑ-Ô-ˆØÕ% fÑ-Ô-Ñ-ˆØ�Š�B˜ÑÔÐÝ*¨6Ñ2Ô2ˆ
ØÕ% fÑ-Ô-Ñ-ˆØ�Š�B˜ÑÔÐð �{Š{˜1‰~Œ~ˆå˜FÑ#Ô#Ð#Ø�Š�B˜ÑÔÐØð 	�T”[ð 	ÝØUÀÐUÐUÈÐUÐUÝñô ð õ �5‰zŒz�3˜z™?œ?Ð*Ð*rN   c                 óN   — t          ddd¦  «         |                      |¦  «        S )zY
        Use :meth:`read_object_header` instead.

        .. deprecated:: 1.28.0
        ÚreadObjectHeaderrÀ  r`   )r   rÀ  )rW   r—   s     rL   rÖ  zPdfReader.readObjectHeader¢  s,   € õ 	%Ð%7Ð9MÈwÑWÔWÐWØ×&Ò& vÑ.Ô.Ð.rN   r­  r[  c                 ó:   — | j                              ||f¦  «        S rT   )r    rZ   ©rW   r­  r[  s      rL   r½  z#PdfReader.cache_get_indirect_object«  s    € ð Ô$×(Ò(¨*°eÐ)<Ñ=Ô=Ð=rN   c                 óP   — t          ddd¦  «         |                      ||¦  «        S )z`
        Use :meth:`cache_get_indirect_object` instead.

        .. deprecated:: 1.28.0
        ÚcacheGetIndirectObjectr½  r`   )r   r½  rØ  s      rL   rÚ  z PdfReader.cacheGetIndirectObject°  s6   € õ 	%Ø$Ð&AÀ7ñ	
ô 	
ð 	
ð ×-Ò-¨j¸%Ñ@Ô@Ð@rN   rÀ   c                 óÊ   — ||f| j         v r3d|› d|› �}| j        rt          |¦  «        ‚t          |t          ¦  «         || j         ||f<   |�t          ||| ¦  «        |_        |S )NzOverwriting cache for ru  )r    r˜   r-   r   rŽ   r9   rX  )rW   r­  r[  rÀ   Úmsgs        rL   rÊ  zPdfReader.cache_indirect_object½  s„   € ð ˜Ð $Ô"7Ð7Ð7Ø?¨:Ð?Ð?¸Ð?Ð?ˆCØŒ{ð (Ý" 3Ñ'Ô'Ð'Ý˜3¥Ñ)Ô)Ð)Ø58ˆÔ˜z¨5Ð1Ñ2Øˆ?Ý%3°E¸:ÀtÑ%LÔ%LˆCÔ"Øˆ
rN   c                 óP   — t          dd¦  «         |                      |||¦  «        S )z\
        Use :meth:`cache_indirect_object` instead.

        .. deprecated:: 1.28.0
        ÚcacheIndirectObjectrÊ  )r   rÊ  )rW   r­  r[  rÀ   s       rL   rÞ  zPdfReader.cacheIndirectObjectÊ  s.   € õ 	%Ð%:Ð<SÑTÔTÐTØ×)Ò)¨*°e¸SÑAÔAÐArN   c                 óf  — |                       |¦  «         |                      |¦  «         |                      |¦  «        }|                      ||¦  «        }|dk    r1| j        r|rt          d¦  «        ‚t          d|› d�t          ¦  «         |                      |||¦  «         | j	        �r| j        sþ| 
                    ¦   «         }| j                             ¦   «         D ]¶\  }}|dk    rŒt          |                     ¦   «         ¦  «        }|D ]†}|                     ||         d¦  «         	 |                      |¦  «        \  }	}
n# t"          $ r Y  nBw xY w|	|| j	        z
  k    r/| j        |         |         | j        |         |	<   | j        |         |= Œ‡Œ·|                     |d¦  «         d S d S d S )Nr   zBroken xref tablezincorrect startxref pointer(ú)éÿÿ  )Ú_basic_validationÚ_find_eof_markerÚ_find_startxref_posÚ_get_xref_issuesr˜   r-   r   rŽ   Ú_read_xref_tables_and_trailersr¡   r¶   r¾  r-  ÚsortedÚkeysr·   rÀ  Ú
ValueError)rW   r—   Ú	startxrefÚxref_issue_nrr¹   r·  Ú
xref_entryÚxref_kÚidÚpidÚ_pgens              rL   r¥   zPdfReader.readÕ  sô  € Ø×Ò˜vÑ&Ô&Ð&Ø×Ò˜fÑ%Ô%Ð%Ø×,Ò,¨VÑ4Ô4ˆ	ð ×-Ò-¨f°iÑ@Ô@ˆØ˜AÒÐØŒ{ð 8˜}ð 8Ý"Ð#6Ñ7Ô7Ð7ÝÐJ¸-ÐJÐJÐJÍHÑUÔUÐUð 	×+Ò+¨F°I¸}ÑMÔMÐMð Œ?ñ 	  4¤;ð 	 Ø—+’+‘-”-ˆCØ#'¤9§?¢?Ñ#4Ô#4ð /ð /‘��ZØ˜%’<�<ØÝØ—O’OÑ%Ô%ñô �ð !ð 	/ð 	/�BØ—K’K 
¨2¤°Ñ2Ô2Ð2ðØ%)×%<Ò%<¸VÑ%DÔ%D™
˜˜U˜UøÝ%ð ð ð Ø˜˜ðøøøà˜b 4¤?Ñ2Ò2Ð2à.2¬i¸¬n¸RÔ.@˜œ	 #œ sÑ+Ø œI cœN¨2Ð.øøð �KŠK˜˜QÑÔÐÐÐð)	 ð 	 ð 	 ð 	 s   Ä.EÅ
EÅEc                 ó   — |                      dt          j        ¦  «         |                     ¦   «         st	          d¦  «        ‚| j        rƒ|                      dt          j        ¦  «         |                     d¦  «        }|dk    r&t          d| 	                    d¦  «        › d�¦  «        ‚|                      dt          j        ¦  «         d S d S )Nr   zCannot read an empty fileé   s   %PDF-zPDF starts with 'Úutf8z', but '%PDF-' expected)
r·   ÚosÚSEEK_ENDr¶   r+   r˜   ÚSEEK_SETr¥   r-   r¸   )rW   r—   Úheader_bytes      rL   râ  zPdfReader._basic_validationû  sÏ   € à�Š�A•r”{Ñ#Ô#Ð#Ø�{Š{‰}Œ}ð 	>Ý Ð!<Ñ=Ô=Ð=ØŒ;ð 	(Ø�KŠK˜�2œ;Ñ'Ô'Ð'Ø Ÿ+š+ a™.œ.ˆKØ˜hÒ&Ð&Ý"ð+¨×(:Ò(:¸6Ñ(BÔ(Bð +ð +ð +ñô ð ð �KŠK˜�2œ;Ñ'Ô'Ð'Ð'Ð'ð	(ð 	(rN   c                 ó¶   — d}d}|d d…         dk    rF|                      ¦   «         |k     rt          d¦  «        ‚t          |¦  «        }|d d…         dk    °Dd S d S )NrH   rN   rò  s   %%EOFzEOF marker not found)r¶   r-   r   )rW   r—   Úlast_mbÚlines       rL   rã  zPdfReader._find_eof_marker
  so   € ØˆØˆØ�2�A�2Œh˜(Ò"Ð"Ø�{Š{‰}Œ}˜wÒ&Ð&Ý"Ð#9Ñ:Ô:Ð:Ý% fÑ-Ô-ˆDð �2�A�2Œh˜(Ò"Ð"Ð"Ð"Ð"Ð"rN   c                 ó‚  — t          |¦  «        }	 t          |¦  «        }t          |¦  «        }|dd…         dk    rt          d¦  «        ‚nr# t          $ re |                     d¦  «        st          d¦  «        ‚t          |dd…                              ¦   «         ¦  «        }t          dt          ¦  «         Y nw xY w|S )zš
        Find startxref entry - the location of the xref table.

        Args:
            stream:

        Returns:
            The bytes offset
        Né	   s	   startxrefzstartxref not foundz startxref on same line as offset)r   ra  r-   ré  r%  Ústripr   rŽ   )rW   r—   rú  rê  s       rL   rä  zPdfReader._find_startxref_pos  sÙ   € õ " &Ñ)Ô)ˆð	:Ý˜D™	œ	ˆIõ & fÑ-Ô-ˆDØ�B�Q�BŒx˜<Ò'Ð'Ý"Ð#8Ñ9Ô9Ð9ð (øõ ð 	Ið 	Ið 	Ià—?’? <Ñ0Ô0ð :Ý"Ð#8Ñ9Ô9Ð9Ý˜D   œHŸNšNÑ,Ô,Ñ-Ô-ˆIÝÐ=½xÑHÔHÐHÐHÐHð	Iøøøð Ðs   ‘A ÁA,B<Â;B<c                 ó
  — |                      d¦  «        }|d d…         dk    rt          d¦  «        ‚t          |¦  «         |                     dd¦  «         d}	 t	          t
          t          || ¦  «        ¦  «        }|r)|dk    r#|| _        | j        rt          d	t          ¦  «         d
}t          |¦  «         |                     dd¦  «         t	          t
          t          || ¦  «        ¦  «        }t          |¦  «         |                     dd¦  «         d}||k     �r‰|                      d¦  «        }|d         dv r5|                     dd¦  «         |                      d¦  «        }|d         dv °5|d         dv r|                     dd¦  «         	 |d d…                              d¦  «        \  }}	|dd…         }
t          |¦  «        t          |	¦  «        }}�n0# t          $ �r" t          |d¦  «        r"t          |                     ¦   «         ¦  «        }nT|                     ¦   «         }|                     dd¦  «         |                      d¦  «        }|                     |¦  «         t#          j        |› d�                     ¦   «         |¦  «        }|€t          d|› d�t          ¦  «         d}d}nOt          d|› d�t          ¦  «         t          |                     d¦  «        ¦  «        }|                     ¦   «         }Y nw xY w|| j        vri | j        |<   i | j        |<   || j        |         v rn\|| j        |         |<   	 |
dk    | j        |         |<   n# t          $ r Y nw xY w	 |
dk    | j        d         |<   n# t          $ r Y nw xY w|dz  }|dz  }||k     �°‰t          |¦  «         |                     dd¦  «         |                      d¦  «        }|dk    r|                     dd¦  «         nd S �Œª)Né   rÒ  s   refzxref table read errorr^  r   Tr   zFXref table not zero-indexed. ID numbers for objects will be corrected.Fé   ó   
iíÿÿÿs   0123456789té   ó    é   é   r»  z\s+(\d+)\s+objzentry z( in Xref table invalid; object not foundrá  z' in Xref table invalid but object foundó   fé   s   traileriùÿÿÿ)r¥   r-   r   r·   r   ra  r@   r¡   r˜   r   rŽ   ÚsplitrÁ  r£   rÂ  r»  r¶   rÃ  rÄ  rÅ  ÚgrouprÆ  r¾  r¿  )rW   r—   ÚrefÚ	firsttimer¶  rE   Úcntrú  Úoffset_bÚgeneration_bÚentry_type_br³  r­  rË  rÌ  rù   Ú
trailertags                    rL   Ú_read_standard_xref_tablez#PdfReader._read_standard_xref_table+  sa  € à�kŠk˜!‰nŒnˆØˆr�ˆrŒ7�fÒÐÝÐ6Ñ7Ô7Ð7Ý˜FÑ#Ô#Ð#Ø�Š�B˜ÑÔÐØˆ	ðc	Ý•s�K¨°Ñ5Ô5Ñ6Ô6ˆCØð ˜S AšX˜XØ"%�”Ø”;ð Ý"Ø`Ý ñô ð ð ˆIÝ Ñ'Ô'Ð'Ø�KŠK˜˜AÑÔÐÝ��[¨°Ñ6Ô6Ñ7Ô7ˆDÝ Ñ'Ô'Ð'Ø�KŠK˜˜AÑÔÐØˆCØ˜’*‘*Ø—{’{ 2‘”�ð ˜1”g Ð,Ð,Ø—K’K ¨Ñ+Ô+Ð+Ø!Ÿ;š; r™?œ?�Dð ˜1”g Ð,Ð,ð ˜”8˜~Ð-Ð-Ø—K’K  AÑ&Ô&Ð&ð+Ø-1°#°2°#¬Y¯_ª_¸TÑ-BÔ-BÑ*�H˜lØ#'¨¨2¨¤;�Lå),¨X©¬½¸LÑ8IÔ8I˜J�F‘FøÝ ð +ñ +ð +å˜v {Ñ3Ô3ð 'Ý# F×$4Ò$4Ñ$6Ô$6Ñ7Ô7˜˜à"ŸKšK™MœM˜ØŸš A qÑ)Ô)Ð)Ø$Ÿkšk¨"™oœo˜ØŸš A™œ˜åœ	 SÐ";Ð";Ð";×"BÒ"BÑ"DÔ"DÀcÑJÔJ�AØ�yÝ&ØR SÐRÐRÐRÝ$ñô ð ð &+˜
Ø!#˜˜å&ØQ SÐQÐQÐQÝ$ñô ð õ &)¨¯ª°©¬¡_¤_˜
Ø!"§¢¡¤˜øøð1+øøøð4  T¤YÐ.Ð.Ø,.�D”I˜jÑ)Ø79�DÔ(¨Ñ4Ø˜$œ) JÔ/Ð/Ð/ð
 à17�D”I˜jÔ)¨#Ñ.ðØ@LÐPTÒ@T˜Ô,¨ZÔ8¸Ñ=Ð=øÝ$ð ð ð Ø˜ðøøøðØ;GÈ4Ò;O˜Ô,¨UÔ3°CÑ8Ð8øÝ$ð ð ð Ø˜ðøøøà�q‘�Ø�q‘�ðS ˜’*‘*õT   Ñ'Ô'Ð'Ø�KŠK˜˜AÑÔÐØŸš Q™œˆJØ˜ZÒ'Ð'à—’˜B Ñ"Ô"Ð"Ð"à�ñGc	s8   ÆAG  Ç D*LÌLÍM# Í#
M0Í/M0Í4N	 Î	
NÎNrê  rë  c                 óÆ  — i | _         i | _        i | _        t          ¦   «         | _        |��5|                     |d¦  «         |                     d¦  «        }|dv r|                     d¦  «        }|dk    r|                      |¦  «        }�nÏ|r+	 |                      |¦  «         d S # t          $ r d}Y �n¦w xY w| 
                    ¦   «         �rw	 |                      |¦  «        }n_# t          $ rR}t          j        | j        v r#t          d|j        › �t           ¦  «         Y d }~d S t#          d|j        › �¦  «        ‚d }~ww xY wt          j        t          j        t          j        t          j        f}|D ]9}||v r3|| j        vr*|                     |¦  «        | j        t-          |¦  «        <   Œ:d|v rq|                     ¦   «         }	|                     t1          t2          |d         ¦  «        dz   d¦  «         |                      |¦  «         |                     |	d¦  «         d|v rt1          t2          |d         ¦  «        }nd S |                      ||¦  «        }|�­3d S d S )	Nr   r   r  ó   xz!Previous trailer can not be read ztrailer can not be read ú/XRefStmú/Prev)r¾  r¿  rª  r4   r©   r·   r¥   Ú
_read_xrefÚ_rebuild_xref_tablerÁ  ÚisdigitÚ_read_pdf15_xref_streamrª   rÉ   r   ÚargsrŽ   r-   r­   r½   r«   Úraw_getr:   r¶   r   ra  Ú_read_xref_other_error)
rW   r—   rê  rë  r\  Ú
xrefstreamÚeÚtrailer_keysrX   rÌ  s
             rL   ræ  z(PdfReader._read_xref_tables_and_trailers˜  s‘  € ð 02ˆŒ	Ø:<ˆÔØ79ˆÔÝ'Ñ)Ô)ˆŒØÑ#à�KŠK˜	 1Ñ%Ô%Ð%Ø—’˜A‘”ˆAØ�Gˆ|ˆ|Ø—K’K ‘N”N�Ø�DŠyˆyØ ŸOšO¨FÑ3Ô3�	‘	Øð  Kð&Ø×,Ò,¨VÑ4Ô4Ð4Ø�EøÝ ð &ð &ð &Ø$%�M�M‘Mð&øøøà—’‘”ñ Kð
PØ!%×!=Ò!=¸fÑ!EÔ!E�J�JøÝ ð Pð Pð PÝ”w $¤,Ð.Ð.Ý&ØHÀÄÐHÐHÝ$ñô ð ð ˜˜˜˜˜å*Ð+NÀaÄfÐ+NÐ+NÑOÔOÐOøøøøðPøøøõ  "œw­¬
µB´G½R¼UÐB�Ø'ð Pð P�CØ˜jÐ(Ð(¨S¸¼Ð-DÐ-DØ8B×8JÒ8JÈ3Ñ8OÔ8O˜œ¥Z°¡_¤_Ñ5øØ Ð+Ð+ØŸš™œ�AØ—K’K¥¥S¨*°ZÔ*@Ñ AÔ AÀAÑ EÀqÑIÔIÐIØ×0Ò0°Ñ8Ô8Ð8Ø—K’K  1Ñ%Ô%Ð%Ø˜jÐ(Ð(Ý $¥S¨*°WÔ*=Ñ >Ô >�I�Ià�Eà ×7Ò7¸À	ÑJÔJ�	ðQ Ñ#Ð#Ð#Ð#Ð#s0   ÂB' Â'B7Â6B7ÃC& Ã&
EÃ00D=Ä&D=Ä=Ec                 ó¦  — |                       |¦  «         t          |¦  «         |                     dd¦  «         t          t          t
          t          f         t          || ¦  «        ¦  «        }|                     ¦   «         D ]\  }}|| j	        vr
|| j	        |<   Œd|v r¢| 
                    ¦   «         }|                     t          t          |d         ¦  «        dz   d¦  «         	 |                      |¦  «         n/# t          $ r" t          d|d         › d�t          ¦  «         Y nw xY w|                     |d¦  «         d|v r
|d         }|S d S )Nr^  r   r  r   zXRef object at z, can not be read, some object may be missingr  )r  r   r·   r   r   r’   r   r@   r-  r©   r¶   ra  r  rÁ  r   rŽ   )rW   r—   Únew_trailerrX   r0  rÌ  rê  s          rL   r  zPdfReader._read_xrefÉ  sq  € Ø×&Ò& vÑ.Ô.Ð.Ý˜FÑ#Ô#Ð#Ø�Š�B˜ÑÔÐÝ�4¥¥S œ>­;°v¸tÑ+DÔ+DÑEÔEˆØ%×+Ò+Ñ-Ô-ð 	*ð 	*‰JˆC�Ø˜$œ,Ð&Ð&Ø$)�”˜SÑ!øØ˜Ð$Ð$Ø—’‘”ˆAØ�KŠK��S +¨jÔ"9Ñ:Ô:¸QÑ>ÀÑBÔBÐBðØ×,Ò,¨VÑ4Ô4Ð4Ð4øÝð ð ð ÝØk k°*Ô&=ÐkÐkÐkÝñô ð ð ð ðøøøð
 �KŠK˜˜1ÑÔÐØ�kÐ!Ð!Ø# GÔ,ˆIØÐà�4s   Ã(C> Ã>)D*Ä)D*c                 óŠ  — |dk    r-| j         rt          d¦  «        ‚t          dt          ¦  «         d S |                     dd¦  «         |                     d¦  «        }|                     d¦  «        }|dk    r
|d	|z
  z  }|S |                     |d¦  «         t          d
¦  «        D ]2}|                     d¦  «                             ¦   «         r	||z  }|c S Œ3d| j	        v rQ| j         sJt          dt          ¦  «         	 |  
                    |¦  «         d S # t          $ r t          d¦  «        ‚w xY wt          d¦  «        ‚)Nr   z6/Prev=0 in the trailer (try opening with strict=False)zA/Prev=0 in the trailer - assuming there is no previous xref tableiõÿÿÿr   r   ó   xrefr^  é
   rò  z/Rootz"Invalid parent xref., rebuild xrefzcan not rebuild xrefz/Could not find xref table at specified location)r˜   r-   r   rŽ   r·   r¥   Úfindr9  r  r©   r  rÁ  )rW   r—   rê  rx  Úxref_locÚlooks         rL   r  z PdfReader._read_xref_other_errorâ  s€  € ð ˜Š>ˆ>ØŒ{ð Ý"ØLñô ð õ ØSÝñô ð ð �4ð 	�Š�C˜ÑÔÐØ�kŠk˜"‰oŒoˆØ—8’8˜GÑ$Ô$ˆØ�rŠ>ˆ>Ø˜˜h™Ñ&ˆIØÐà�Š�I˜qÑ!Ô!Ð!Ý˜!‘H”Hð 	!ð 	!ˆDØ�{Š{˜1‰~Œ~×%Ò%Ñ'Ô'ð !à˜TÑ!�	Ø Ð Ð Ð ð!ð
 �d”lÐ"Ð"¨4¬;Ð"åÐ?ÅÑJÔJÐJð;Ø×(Ò(¨Ñ0Ô0Ð0Ø�tøÝð ;ð ;ð ;Ý"Ð#9Ñ:Ô:Ð:ð;øøøåÐLÑMÔMÐMs   ÄD ÄD3c                 óÐ  ‡ ‡‡	— |                      dd¦  «         ‰                      |¦  «        \  }}t          t          t	          |‰ ¦  «        ¦  «        }t          t
          |d         ¦  «        dk    sJ ‚‰                      |||¦  «         t          t          | 	                    ¦   «         ¦  «        ¦  «        Š	| 
                    dd| 
                    d¦  «        g¦  «        }t          t          t          t          f         | 
                    d¦  «        ¦  «        Št          ‰¦  «        d	k    sJ ‚‰ j        r%t          ‰¦  «        d	k    rt          d
‰› �¦  «        ‚dt           dt"          t           t$          t           df         f         fˆˆ	fd„}dt           dt"          t           t$          t           df         f         dt&          fˆ fd„}‰                      |||¦  «         |S )Nr^  r   r©  z/XRefz/Indexr   z/Sizez/WrÒ  zToo many entry sizes: r<  rF   .c                 ó’   •— ‰|          dk    r1‰                      ‰|          ¦  «        }t          |‰|          ¦  «        S | dk    rdS dS )Nr   r   )r¥   rM   )r<  rD   Úentry_sizesr±  s     €€rL   Ú	get_entryz4PdfReader._read_pdf15_xref_stream.<locals>.get_entry  sT   ø€ ð ˜1Œ~ Ò!Ð!Ø×$Ò$ [°¤^Ñ4Ô4�Ý% a¨°Q¬Ñ8Ô8Ð8ð �AŠvˆvØ�qà�qrN   r¶  r­  c                 óP   •— | ‰j                              |g ¦  «        v p| ‰j        v S rT   )r¾  rZ   rª  )r¶  r­  rW   s     €rL   Úused_beforez6PdfReader._read_pdf15_xref_stream.<locals>.used_before+  s+   ø€ à˜$œ)Ÿ-š-¨
°BÑ7Ô7Ð7ÐR¸3À$ÔBRÐ;RÐRrN   )r·   rÀ  r   r1   r@   r’   rÊ  r   r   r«  rZ   r   r   rÖ   r˜   r-   ra  r   r   ÚboolÚ_read_xref_subsections)
rW   r—   r[  r­  r  Ú	idx_pairsr+  r-  r*  r±  s
   `       @@rL   r  z!PdfReader._read_pdf15_xref_stream  sì  øøø€ ð 	�Š�B˜ÑÔÐØ ×3Ò3°FÑ;Ô;ÑˆˆzÝ�-­°V¸TÑ)BÔ)BÑCÔCˆ
Ý•C˜ GÔ,Ñ-Ô-°Ò8Ð8Ð8Ð8Ø×"Ò" :¨u°jÑAÔAÐAÝ�b ×!4Ò!4Ñ!6Ô!6Ñ7Ô7Ñ8Ô8ˆð —N’N 8¨a°·²ÀÑ1HÔ1HÐ-IÑJÔJˆ	Ý�4¥¥S œ>¨:¯>ª>¸$Ñ+?Ô+?Ñ@Ô@ˆÝ�;ÑÔ 1Ò$Ð$Ð$Ð$ØŒ;ð 	G�3˜{Ñ+Ô+¨aÒ/Ð/ÝÐE¸ÐEÐEÑFÔFÐFð	�ð 	¥¥s­Eµ#°s°(¬OÐ';Ô!<ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð	S�Sð 	S­eµC½½sÀC¸x¼Ð4HÔ.Ið 	SÍdð 	Sð 	Sð 	Sð 	Sð 	Sð 	Sð
 	×#Ò# I¨y¸+ÑFÔFÐFØÐrN   c                 óV  — |                       |dz
  d¦  «         |                      d¦  «        }|dvrdS |                      d¦  «        }|dk    rYd}|dv r!|                      d¦  «        }|dk    rdS |dv °!||                      d¦  «        z  }|                     ¦   «         d	k    rd
S dS )zæ
        Return an int which indicates an issue. 0 means there is no issue.

        Args:
            stream:
            startxref:

        Returns:
            0 means no issue, other values represent specific issues.
        r   r   s   
 	rÿ  r#  rN   s   0123456789 	r)  s   objrÒ  )r·   r¥   Úlower)r—   rê  rú  s      rL   rå  zPdfReader._get_xref_issues3  sÂ   € ð 	�Š�I ‘M 1Ñ%Ô%Ð%Ø�{Š{˜1‰~Œ~ˆØ�zÐ!Ð!Ø�1Ø�{Š{˜1‰~Œ~ˆØ�7Š?ˆ?àˆDØÐ*Ð*Ð*Ø—{’{ 1‘~”~�Ø˜3’;�;Ø˜1ð Ð*Ð*Ð*ð �F—K’K ‘N”NÑ"ˆDØ�zŠz‰|Œ|˜vÒ%Ð%Ø�qØˆqrN   c                 ó  — i | _         |                     dd¦  «         |                     d¦  «        }t          j        d|¦  «        D ]|}t          |                     d¦  «        ¦  «        }t          |                     d¦  «        ¦  «        }|| j         vr
i | j         |<   |                     d¦  «        | j         |         |<   Œ}|                     dd¦  «         t          j        d|¦  «        D ]‘}|                     |                     d¦  «        d¦  «         t          t          t          t          f         t          || ¦  «        ¦  «        }t          |                     ¦   «         ¦  «        D ]\  }}|| j        |<   ŒŒ’d S )Nr   r^  s(   [\r\n \t][ \t]*(\d+)[ \t]+(\d+)[ \t]+objr   r)  s$   [\r\n \t][ \t]*trailer[\r\n \t]*(<<))r¾  r·   r¥   rÃ  Úfinditerra  r	  rÆ  r   r   r   r@   r¢  r-  r©   )	rW   r—   Úf_rÍ  r[  r­  r!  rX   r0  s	            rL   r  zPdfReader._rebuild_xref_tableP  s]  € ØˆŒ	Ø�Š�A�qÑÔÐØ�[Š[˜‰_Œ_ˆå”ÐIÈ2ÑNÔNð 	6ð 	6ˆAÝ˜Ÿš ™
œ
‘O”OˆEÝ˜QŸWšW Q™ZœZ™œˆJØ ¤Ð*Ð*Ø(*�”	˜*Ñ%Ø+,¯7ª7°1©:¬:ˆDŒI�jÔ! %Ñ(Ð(Ø�Š�A�qÑÔÐÝ”ÐEÀrÑJÔJð 	*ð 	*ˆAØ�KŠK˜Ÿš ™
œ
 AÑ&Ô&Ð&Ý�t¥C­ Hœ~­{¸6À4Ñ/HÔ/HÑIÔIˆKå" ;×#4Ò#4Ñ#6Ô#6Ñ7Ô7ð *ð *‘
��UØ$)�”˜SÑ!Ð!ð*ð		*ð 	*rN   r0  r+  .r-  c                 óð  — |                       |¦  «        D ]ß\  }}t          |||z   ¦  «        D ]Æ} |d¦  «        }|dk    r |d¦  «        } |d¦  «        }	Œ*|dk    rF |d¦  «        }
 |d¦  «        }|| j        vr
i | j        |<    |||¦  «        s|
| j        |         |<   Œv|dk    r1 |d¦  «        } |d¦  «        }d} |||¦  «        s||f| j        |<   Œ­| j        rt          d|› �¦  «        ‚ŒÇŒàd S )Nr   r   r)  zUnknown xref type: )Ú_pairsr9  r¾  rª  r˜   r-   )rW   r0  r+  r-  rÆ  rE   r¶  Ú	xref_typeÚnext_free_objectÚnext_generationÚbyte_offsetr­  Ú
objstr_numÚ	obstr_idxs                 rL   r/  z PdfReader._read_xref_subsectionsc  sd  € ð  Ÿ;š; yÑ1Ô1ð 	Jð 	J‰KˆE�4å˜U E¨D¡LÑ1Ô1ð Jð J�à%˜I a™LœL�	à ’>�>à'0 y°¡|¤|Ð$Ø&/ i°¡l¤l�O�OØ !’^�^à"+ )¨A¡,¤,�KØ!* ¨1¡¤�JØ!¨¬Ð2Ð2Ø02˜œ	 *Ñ-Ø&˜; s¨JÑ7Ô7ð AØ5@˜œ	 *Ô-¨cÑ2øØ !’^�^à!* ¨1¡¤�JØ ) 	¨!¡¤�IØ!"�JØ&˜; s¨JÑ7Ô7ð HØ1;¸YÐ0G˜Ô(¨Ñ-øØ”[ð JÝ&Ð'H¸YÐ'HÐ'HÑIÔIÐIðJð/Jð	Jð 	JrN   c              #   ór   K  — d}	 ||         ||dz            fV — |dz  }|dz   t          |¦  «        k    rd S Œ3)Nr   Tr   r)  )rÖ   )rW   rp  r<  s      rL   r7  zPdfReader._pairs…  sU   è è € Øˆð	Ø˜”(˜E ! a¡%œLÐ(Ð(Ð(Ð(Ø�‰FˆAØ�A‘�#˜e™*œ*Ò$Ð$Ø�ð		rN   r   Úlimit_offsetc                 óú  — t          dd¬¦  «         g }	 |                     ¦   «         dk    s|                     ¦   «         |k    rt          d¦  «        ‚|                     d¦  «        }|                     ¦   «         dk     rt          d	¦  «        ‚|                     d
d¦  «         |dv r“d}|dv rr|                     d¦  «        }|dv r|                     dd¦  «         d}|                     ¦   «         dk     rt          d	¦  «        ‚|                     d
d¦  «         |dv °r|                     |rdndd¦  «         n|                     |¦  «         �Œ?|                     ¦   «          d                     |¦  «        S )z.. deprecated:: 2.1.0Úread_next_end_linez4.0.0)Ú
removed_inTr   z!Could not read malformed PDF filer   r)  zEOL marker not foundéþÿÿÿ)ó   
ó   Fr^  rN   )r   r¶   r-   r¥   r·   rO  ÚreverseÚjoin)rW   r—   r?  Ú
line_partsr\  Úcrlfs         rL   rA  zPdfReader.read_next_end_line�  s–  € õ 	!Ð!5À'ÐJÑJÔJÐJØˆ
ð	%à�{Š{‰}Œ} Ò!Ð! V§[¢[¡]¤]°lÒ%BÐ%BÝ"Ð#FÑGÔGÐGØ—’˜A‘”ˆAØ�{Š{‰}Œ}˜qÒ Ð Ý"Ð#9Ñ:Ô:Ð:Ø�KŠK˜˜AÑÔÐØ�NÐ"Ð"Ø�Ø˜>Ð)Ð)ØŸš A™œ�AØ˜NÐ*Ð*ØŸš B¨Ñ*Ô*Ð*Ø#˜Ø—{’{‘}”} qÒ(Ð(Ý*Ð+AÑBÔBÐBØ—K’K  AÑ&Ô&Ð&ð ˜>Ð)Ð)ð —’ØÐ$�A�A 1 añô ð ð à×!Ò! !Ñ$Ô$Ð$ñ/	%ð0 	×ÒÑÔÐØ�xŠx˜
Ñ#Ô#Ð#rN   c                 óN   — t          dd¦  «         |                      ||¦  «        S )z.. deprecated:: 1.28.0ÚreadNextEndLiner`   )r   rA  )rW   r—   r?  s      rL   rK  zPdfReader.readNextEndLine®  s+   € õ 	#Ð#4°gÑ>Ô>Ð>Ø×&Ò& v¨|Ñ<Ô<Ð<rN   c                 ób   — | j         st          d¦  «        ‚| j                              |¦  «        S )a}  
        When using an encrypted / secured PDF file with the PDF Standard
        encryption handler, this function will allow the file to be decrypted.
        It checks the given password against the document's user password and
        owner password, and then stores the resulting decryption key if either
        password is correct.

        It does not matter which password was matched.  Both passwords provide
        the correct decryption key that will allow the document to be used with
        this library.

        Args:
            password: The password to match.

        Returns:
            A `PasswordType`.
        rž   )r§   r-   r®   )rW   r™   s     rL   ÚdecryptzPdfReader.decryptµ  s5   € ð$ Ôð 	5ÝÐ3Ñ4Ô4Ð4àÔ×&Ò& xÑ0Ô0Ð0rN   Úpermissions_codec                 óÊ   — i }|dz  dk    |d<   |dz  dk    |d<   |dz  dk    |d<   |dz  dk    |d	<   |d
z  dk    |d<   |dz  dk    |d<   |dz  dk    |d<   |dz  dk    |d<   |S )Nrÿ  r   ÚprintrH   Úmodifyr  Úcopyé    Úannotationsé   Úformsi   Úaccessabilityi   Úassemblei   Úprint_high_qualityr”   )rW   rN  Úpermissionss      rL   Údecode_permissionszPdfReader.decode_permissionsÌ  s³   € àˆØ/°:Ñ>À!ÒCˆ�GÑØ 0°JÑ ?À1Ò Dˆ�HÑØ.°*Ñ=ÀÒBˆ�FÑØ%5¸Ñ%DÈÒ%Iˆ�MÑ"Ø/°:Ñ>À!ÒCˆ�GÑØ'7¸;Ñ'GÈ1Ò'Lˆ�OÑ$Ø"2°kÑ"BÀaÒ"Gˆ�JÑà Ñ,°Ò1ð 	Ð(Ñ)ð ÐrN   c                 ó(   — t           j        | j        v S )zè
        Read-only boolean property showing whether this PDF file is encrypted.

        Note that this property, if true, will remain true even after the
        :meth:`decrypt()<pypdf.PdfReader.decrypt>` method is called.
        )rª   r­   r©   rV   s    rL   r¨   zPdfReader.is_encryptedÛ  s   € õ Œz˜Tœ\Ð)Ð)rN   c                 ó2   — t          ddd¦  «         | j        S )úV
        Use :py:attr:`is_encrypted` instead.

        .. deprecated:: 1.28.0
        ÚgetIsEncryptedr¨   r`   ©r   r¨   rV   s    rL   r_  zPdfReader.getIsEncryptedå  rÎ   rN   c                 ó2   — t          ddd¦  «         | j        S )r^  ÚisEncryptedr¨   r`   r`  rV   s    rL   rb  zPdfReader.isEncryptedî  rÑ   rN   c                 ó
  — d }i }t          t          | j        t          j                 ¦  «        }d|vs|d         sd S t          t
          |d         ¦  «        }d|v r§t          t          |d         ¦  «        }t          |¦  «        }|D ]z}|}t          |¦  «        }t          |t          ¦  «        rRt          t          t                   |                     ¦   «         ¦  «        }|rt          j        |j        ¦  «        }	|	||<   Œ{|S )Nú	/AcroFormz/XFA)r   r4   r©   rª   rÉ   r?   r0   ÚiterÚnextr[   r9   r   r5   rd   ÚzlibÚ
decompressÚ_data)
rW   rì   r\   rö   rø   r<  rù   Útagrú   Úess
             rL   ÚxfazPdfReader.xfaø  sð   € à%)ˆØ!#ˆÝÕ'¨¬µb´gÔ)>Ñ?Ô?ˆà˜gÐ%Ð%¨W°[Ô-AÐ%Ø�4å•J ¨Ô 4Ñ5Ô5ˆà�Tˆ>ˆ>Ý�+ t¨F¤|Ñ4Ô4ˆFÝ�V‘”ˆAØð )ð )�Ø�Ý˜‘G”G�Ý˜a¥Ñ0Ô0ð )Ý ¥Õ*=Ô!>ÀÇÂÁÄÑOÔO�EØð )Ý!œ_¨U¬[Ñ9Ô9˜Ø&(˜˜s™øØˆrN   r  c                 óv  — t          t          | j        t          j                 ¦  «        }d|vst          |d         t          ¦  «        sdS t          t          |t          d¦  «                 ¦  «        }d|vrdS t          ¦   «         }t          |¦  «        |t          d¦  «        <   |t          d¦  «                 |t          d¦  «        <   |                      dt          d„ | j
                             ¦   «         D ¦   «         ¦  «        dz   |¦  «         t          ¦   «         }|                     |j        ¦  «         ||t          d¦  «        <   t          t          |d         ¦  «        D ]O}|                     ¦   «         }d	|v rt!          d
|j        › d�t"          ¦  «         |j        |t          d	¦  «        <   ŒP|S )zý
        Add a top level form that groups all form fields below it.

        Args:
            name: text string of the "/T" Attribute of the created object

        Returns:
            The created object. ``None`` means no object was created.
        rd  Nrï   r  z/Kidsr   c                 ó$   — g | ]\  }}|d k    ¯|‘ŒS ©r   r”   )r&  Úgr<  s      rL   r(  z.PdfReader.add_form_topname.<locals>.<listcomp>*  s!   € ÐHÐHÐH‘v˜˜1ÀÀaÂÀ�ÀÀÀrN   r   r  zTop Level Form Field z have a non-expected parent)r   r4   r©   rª   rÉ   r[   r:   r>   rÊ  Úmaxr    rè  r0   rO  rX  rd   r   rŽ   )rW   r  rö   ÚacroformÚinterimÚarrÚorÀ   s           rL   Úadd_form_topnamezPdfReader.add_form_topname  sµ  € õ Õ'¨¬µb´gÔ)>Ñ?Ô?ˆà˜gÐ%Ð%­ZØ�KÔ Õ"2ñ.
ô .
Ð%ð �4ÝÕ(¨'µ*¸[Ñ2IÔ2IÔ*JÑKÔKˆØ˜HÐ$Ð$à�4å"Ñ$Ô$ˆÝ$4°TÑ$:Ô$:ˆ•
˜4Ñ Ô Ñ!Ø'/µ
¸9Ñ0EÔ0EÔ'Fˆ•
˜7Ñ#Ô#Ñ$Ø×"Ò"ØÝÐHÐH Ô!6×!;Ò!;Ñ!=Ô!=ÐHÑHÔHÑIÔIÈAÑMØñ	
ô 	
ð 	
õ
 ‰mŒmˆØ�
Š
�7Ô-Ñ.Ô.Ð.Ø*-ˆ•˜IÑ&Ô&Ñ'Ý•k 7¨7Ô#3Ñ4Ô4ð 	Dð 	DˆAØ—,’,‘.”.ˆCØ˜CÐÐÝØ_¨CÔ,BÐ_Ð_Ð_Ýñô ð ð *1Ô)CˆC•
˜9Ñ%Ô%Ñ&Ð&ØˆrN   c           
      óÜ  — t          t          | j        t          j                 ¦  «        }d|vst          |d         t          ¦  «        sdS t          t          |t          d¦  «                 ¦  «        }d|vrdS t          t          t          t          |t          d¦  «                 ¦  «        d                              ¦   «         ¦  «        }t          |¦  «        |t          d¦  «        <   |S )zû
        Rename top level form field that all form fields below it.

        Args:
            name: text string of the "/T" field of the created object

        Returns:
            The modified object. ``None`` means no object was modified.
        rd  Nrï   r   r  )
r   r4   r©   rª   rÉ   r[   r:   r0   rd   r>   )rW   r  rö   rr  rs  s        rL   Úrename_form_topnamezPdfReader.rename_form_topname:  sÔ   € õ Õ'¨¬µb´gÔ)>Ñ?Ô?ˆà˜gÐ%Ð%­ZØ�KÔ Õ"2ñ.
ô .
Ð%ð �4ÝÕ(¨'µ*¸[Ñ2IÔ2IÔ*JÑKÔKˆØ˜HÐ$Ð$Ø�4åÝÝ•˜h¥z°)Ñ'<Ô'<Ô=Ñ>Ô>¸qÔA×LÒLÑNÔNñ
ô 
ˆõ %5°TÑ$:Ô$:ˆ•
˜4Ñ Ô Ñ!ØˆrN   )FNrz  )Frr  ro  )urŽ   r�   r�   r‘   r   r   r   r.  r’   rÂ  rU   r“   r»   r   rR   rÁ   rÄ   rÇ   rC   rÊ   rÌ   rÐ   ra  r×   rÜ   rÞ   r   râ   rá   r   r   rè   ré   r?   rû   rý   r4   r  rô   ró   r  r1  r3  rë   rB  rA   rE  rG  rD  rT  r0   rW  r;   r9   rc  rg  ri  r3   rm  ro  r
   r<   r:  rN  r`  rˆ  r‹  rŽ  r‘  rB   r“  r–  r™  rÕ   r=   rµ  r¹  rd   rÐ  r   r   rÀ  rÖ  r½  rÚ  rÊ  rÞ  r¥   râ  rã  rä  r  ræ  r  r  r1   r5   r2   r  Ústaticmethodrå  r  r   r/  r	   r7  rA  rK  r   rM  r[  r¨   r_  rb  rl  rv  rx  r”   rN   rL   r–   r–     sª  € € € € € ðð ð* Ø,0ð	29ð 29à�k 4Ð'Ô(ð29ð ð29ð ˜˜c 5Ð(Ô)ð	29ð
 
ð29ð 29ð 29ð 29ðh ð ˜Cð  ð  ð  ñ „Xð ð ð˜(Ð#6Ô7ð ð ð ñ „Xðð& Ð*=Ô!>ð ð ð ð ð ð˜hÐ':Ô;ð ð ð ñ „Xðð ð.˜h ~Ô6ð .ð .ð .ñ „Xð.ð! ¨Ô 8ð !ð !ð !ð !ð ð!˜X nÔ5ð !ð !ð !ñ „Xð!ð- ð -ð -ð -ð -ð.%˜Sð %ð %ð %ð %ð ð%˜#ð %ð %ð %ñ „Xð%ð	* #ð 	*¨*ð 	*ð 	*ð 	*ð 	*ð1 Sð 1¨Zð 1ð 1ð 1ð 1ð  ð' 4¨¨S¨¤>ð 'ð 'ð 'ñ „Xð'ð ð. D¨¨c¨¤Nð .ð .ð .ñ „Xð.ð &*Ø+/Ø!%ð	0ð 0à�zÔ"ð0ð ˜˜c 3˜hœÔ(ð0ð ˜#”ð	0ð
 
�$�s˜C�x”.Ô	!ð0ð 0ð 0ð 0ðh &*Ø+/Ø!%ð	6ð 6à�zÔ"ð6ð ˜˜c 3˜hœÔ(ð6ð ˜#”ð	6ð
 
�$�s˜C�x”.Ô	!ð6ð 6ð 6ð 6ð+Ð0@ð +ÀSð +ð +ð +ð +ð#à�ZÐ!1Ð1Ô2ð#ð �S˜#�X”ð#ð ð	#ð
 ð#ð 
ð#ð #ð #ð #ð<CØ˜*Ð&6Ð6Ô7ðCØADðCØORðCà	ðCð Cð Cð Cð# Cð #°ð #Àsð #Ètð #ð #ð #ð #ðJ$ð $¸ð $ÈÈcÐSVÈhÌð $ð $ð $ð $ðL	+ 4¨¨S¨¤>ð 	+ð 	+ð 	+ð 	+ð )-Ø $ð4ð 4à�J Ð$Ô%ð4ð ˜”ð4ð 
ˆc�3ˆhŒð	4ð 4ð 4ð 4ðp )-Ø $ð:ð :à�J Ð$Ô%ð:ð ˜”ð:ð 
ˆc�3ˆhŒð	:ð :ð :ð :ð ð#˜ð #ð #ð #ñ „Xð#ð ð˜+ð ð ð ñ „Xðð QUð'ð 'ØÐ-Ô.ð'Ø@HÈÄð'à	ð'ð 'ð 'ð 'ðT QUð	0ð 	0ØÐ-Ô.ð	0Ø@HÈÄð	0à	ð	0ð 	0ð 	0ð 	0ð ð˜ +Ô.ð ð ð ñ „XððØ"'¨¨c°:¸~Ð(MÔ"Nðà	ðð ð ð ð6J Jð J°3ð Jð Jð Jð Jð* *ð *°ð *ð *ð *ð *ð
C°{ð 
CÀsð 
Cð 
Cð 
Cð 
Cð	=°Kð 	=ÀCð 	=ð 	=ð 	=ð 	=ðIàðIð ØØ�l N°D¸*ÐFVÐVÔWôô
ðIð 
ðIð Ið Ið IðBAÐ(8ð A¸XÀkÔ=Rð Að Að Að AðF ðA�t˜JÔ'ð Að Að Añ „XðAð ðP˜T #œYð Pð Pð Pñ „XðPð ð˜X cœ]ð ð ð ñ „Xðð6 ˜x¨œ}ð  ð  ð  ð  ð ð ˜H SœMð  ð  ð  ñ „Xð ð ð˜8 LÔ1ð ð ð ñ „Xðð2˜X lÔ3ð ð ð ð ð ð˜( <Ô0ð ð ð ñ „Xðð <@Ø,0Ø7;ð	,2ð ,2à�TÐ+¨ZÐ7Ô8ð,2ð ˜$˜s C˜xœ.Ô)ð,2ð % ^Ô4ð	,2ð
 
ð,2ð ,2ð ,2ð ,2ð\4Ø"0ð4à	ˆs�I˜sÐ"Ô	#ð4ð 4ð 4ð 4ðl;¨ð ;°#ð ;¸(À9Ô:Mð ;ð ;ð ;ð ;ð@Ø"'¨¨^Ð(;Ô"<ð@à	�)Ô	ð@ð @ð @ð @ðD	2Ø!/ð	2à	�)Ô	ð	2ð 	2ð 	2ð 	2ð+¨ð +¸¸cÀ3¸h¼ð +ð +ð +ð +ð8/ zð /°e¸CÀ¸H´oð /ð /ð /ð /ð>Øð>Ø&)ð>à	�)Ô	ð>ð >ð >ð >ð
AØðAØ&)ðAà	�)Ô	ðAð Að Að AðØðØ&)ðØ08¸Ô0Cðà	�)Ô	ðð ð ð ð	BØð	BØ&)ð	BØ08¸Ô0Cð	Bà	�)Ô	ð	Bð 	Bð 	Bð 	Bð$ ˜:ð $ ¨$ð $ ð $ ð $ ð $ ðL(¨
ð (°tð (ð (ð (ð (ð. zð .°dð .ð .ð .ð .ð¨*ð ¸ð ð ð ð ð2k°
ð k¸tð kð kð kð kðZ/KØ ð/KØ-5°c¬]ð/KØKNð/Kà	ð/Kð /Kð /Kð /Kðb ð °¸´ð ð ð ð ð2'NØ ð'NØ-0ð'Nà	�#Œð'Nð 'Nð 'Nð 'NðR&Ø ð&à	ˆ}Ð1Ð3FÐFÔ	Gð&ð &ð &ð &ðP ð ð ¸ð Àð ð ð ñ „\ðð8*¨*ð *¸ð *ð *ð *ð *ð& Jà˜”9ð Jð ˜S˜E 5¨¨e°C¸°H¬oÐ)=Ô#>Ð>Ô?ð Jð ˜s E¨#¨u°S¸#°X¬Ð*>Ô$?Ð@À$ÐFÔGð	 Jð
 
ð Jð  Jð  Jð  JðD˜D œIð ¨(°5¸¸c¸´?Ô*Cð ð ð ð ð 78ð$ð $Ø ð$Ø03ð$à	ð$ð $ð $ð $ðD 78ð=ð =Ø ð=Ø03ð=à	ð=ð =ð =ð =ð1  c¨5 jÔ 1ð 1°lð 1ð 1ð 1ð 1ð.°3ð ¸4ÀÀTÀ	¼?ð ð ð ð ð ð*˜dð *ð *ð *ñ „Xð*ð! ð !ð !ð !ð !ð ð!˜Tð !ð !ð !ñ „Xð!ð ð�X˜d 3¨ 8œnÔ-ð ð ð ñ „Xðð.( Sð (¨XÐ6FÔ-Gð (ð (ð (ð (ðT¨ð °Ð9IÔ0Jð ð ð ð ð ð rN   r–   c                   ó,   ‡ — e Zd Zdededdfˆ fd„Zˆ xZS )ÚPdfFileReaderr  ÚkwargsrF   Nc                 ó”   •— t          ddd¦  «         d|vrt          |¦  «        dk     rd|d<    t          ¦   «         j        |i |¤Ž d S )Nr{  r–   r`   r˜   r)  T)r   rÖ   ÚsuperrU   )rW   r  r|  Ú	__class__s      €rL   rU   zPdfFileReader.__init__W  sZ   ø€ Ý$ _°kÀ7ÑKÔKÐKØ˜6Ð!Ð!¥c¨$¡i¤i°!¢m mØ#ˆF�8ÑØ�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)rN   )rŽ   r�   r�   r   rU   Ú__classcell__)r  s   @rL   r{  r{  V  sR   ø€ € € € € ð*˜cð *¨Sð *°Tð *ð *ð *ð *ð *ð *ð *ð *ð *ð *rN   r{  )_rô  rÃ  rI   rg  r   Úior   Úpathlibr   Útypingr   r   r   r	   r
   r   r   r   r   r§   r   r   Ú_pager   r   Ú_page_labelsr   r‡  Ú_utilsr   r   r   r   r   r   r   r   r   r   r   r    Ú	constantsr!   r6  r"   rñ   r#   r$   rK  r%   rb   r&   r'   r(   rœ  r)   r  r*   rª   Úerrorsr+   r,   r-   r.   r/   Úgenericr0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   r  rA   rB   ÚxmprC   rÂ  ra  rM   rP   rR   r–   r{  r”   rN   rL   ú<module>r‹     sˆ  ðð< 
€	€	€	Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 2Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø +Ð +Ð +Ð +Ð +Ð +Ð +Ð +Ø >Ð >Ð >Ð >Ð >Ð >ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð /Ð .Ð .Ð .Ð .Ð .Ø .Ð .Ð .Ð .Ð .Ð .Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø !Ð !Ð !Ð !Ð !Ð !Ø :Ð :Ð :Ð :Ð :Ð :Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EØ +Ð +Ð +Ð +Ð +Ð +Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& -Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð ð%�eð % 3ð %¨5°°e¸CÀ¸H´oÐ1EÔ+Fð %ð %ð %ð %ð#�Eð # ð #¨¨s°E¸#¸s¸(´OÐ/CÔ)Dð #ð #ð #ð #ð
[%ð [%ð [%ð [%ð [%Ð*ñ [%ô [%ð [%ð|ð ð ð ð ñ ô ð ðD:*ð *ð *ð *ð *�Iñ *ô *ð *ð *ð *rN   