Ë
    vl�jê[  ã                   ó¸  — U d Z ddlZddlZddlZddlmZ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 ddlmZmZ erddlmZ ddlZddlZdZeej6                  eej:                  f   Zeeef   Z G d	„ d
«      Z dede!fd„Z"de#defd„Z$dede%defd„Z&	 	 d[de!ez  dededefd„Z'de%de%de%de%fd„Z(de%de%de%de!de!f
d„Z)d e%de%de%de%de!de!fd!„Z*e+e,e,f   Z-e+e,e,e,e,f   Z.e+e,e,e,e,e,e,f   Z/ee+e   e+ee,e,f   e+ee,e,e,e,f   e+ee,e,e,e,e,e,f   f   Z0d"Z1e/e2d#<   dede.fd$„Z3d%e/d&e/de/fd'„Z4d(e/d)e-de/fd*„Z5d(e/d)e-de-fd+„Z6d(e/d,e.de.fd-„Z7d(e/d)e-de-fd.„Z8d/e#de9fd0„Z: ed1«      Z;d2ee;   dee;   fd3„Z<d ee;ge9f   d2ee;   de+e=e;   e=e;   f   fd4„Z>d5e,d6e,d7e%de?fd8„Z@d9ee-   de.fd:„ZA	 d\d;ee;   d<ee;ge,f   d=e;dz  de;dz  fd>„ZBd?e%d;ee;   dee+e;d@f      fdA„ZCd]de!dBe%de%fdC„ZDdDj‹                  dE„ dFD «       «      ZFde!defdG„ZGd/edefdH„ZHdIe.defdJ„ZId(e/defdK„ZJdLdMdNdMde-fdO„ZK edPdM¬Q«      ZL G dR„ dSeeL   «      ZMg dT¢ZNg dU¢ZOdVe%defdW„ZPdVe%defdX„ZQdYe!de!fdZ„ZRy)^zMiscellaneous Routines.é    N)ÚCallableÚIterableÚIterator)Úescape)ÚTYPE_CHECKINGÚAnyÚBinaryIOÚGenericÚTextIOÚTypeVarÚUnionÚcast)ÚPDFTypeErrorÚPDFValueError)ÚLTComponentiÿÿÿc                   óL   — e Zd ZdZdedededdfd„Zdefd„Zd	e	d
e	de	ddfd„Z
y)Úopen_filenamezºContext manager that allows opening a filename
    (str or pathlib.PurePath type is supported) and closes it on exit,
    (just like `open`), but does nothing for file-like objects.
    ÚfilenameÚargsÚkwargsÚreturnNc                 ó@  — t        |t        j                  «      rt        |«      }t        |t        «      rt	        |g|¢­i |¤Ž| _        d| _        y t        |t        j                  «      rt        t        |«      | _        d| _        y t        dt        |«      › �«      ‚)NTFzUnsupported input type: )Ú
isinstanceÚpathlibÚPurePathÚstrÚopenÚfile_handlerÚclosingÚioÚIOBaser   ÚAnyIOr   Útype)Úselfr   r   r   s       úD/var/www/html/pp/venv/lib/python3.12/site-packages/pdfminer/utils.pyÚ__init__zopen_filename.__init__*   s   € Ü�h¤× 0Ñ 0Ô1Ü˜8“}ˆHÜ�h¤Ô$Ü'+¨HÐ'F°tÒ'F¸vÑ'FˆDÔØˆD�LÜ˜¤"§)¡)Ô,Ü $¤U¨HÓ 5ˆDÔØ ˆD�LäÐ!9¼$¸x».Ð9IÐJÓKÐKó    c                 ó   — | j                   S ©N)r   ©r$   s    r%   Ú	__enter__zopen_filename.__enter__6   s   € Ø× Ñ Ð r'   Úexc_typeÚexc_valÚexc_tbc                 óR   — | j                   r| j                  j                  «        y y r)   )r   r   Úclose)r$   r,   r-   r.   s       r%   Ú__exit__zopen_filename.__exit__9   s    € Ø�<Š<Ø×Ñ×#Ñ#Õ%ð r'   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
FileOrNamer   r&   r"   r+   Úobjectr1   © r'   r%   r   r   $   sZ   „ ñð

L ð 
L°Cð 
LÀ3ð 
LÈ4ó 
Lð!˜5ó !ð& ð &°&ð &À&ð &ÈTô &r'   r   Úin_strr   c                 ót   — t        | t        «      sJ t        t        | «      «      «       ‚| j                  «       S )z'Converts to bytes, encoding to unicode.)r   r   r#   Úencode)r9   s    r%   Úmake_compat_bytesr<   >   s,   € ä�fœcÔ"Ð5¤C¬¨V«Ó$5Ó5Ð"Ø�=‰=‹?Ðr'   Úoc                 óà   — t        | t        «      r:t        j                  | «      }|d   €t	        | «      S 	 | j                  |d   «      S t	        | «      S # t        $ r t	        | «      cY S w xY w)z>Converts everything to string, if bytes guessing the encoding.Úencoding)r   ÚbytesÚcharset_normalizerÚdetectr   ÚdecodeÚUnicodeDecodeError)r=   Úencs     r%   Úmake_compat_strrF   D   sl   € ä�!”UÔÜ ×'Ñ'¨Ó*ˆØˆz‰?Ð"Ü�q“6ˆMð	Ø—8‘8˜C 
™OÓ,Ð,ô �1‹vˆøô "ò 	Ü�q“6ŠMð	ús   ·A ÁA-Á,A-ÚsÚsizec                 ób   — |dk  r| d | S t        | «      |kD  r|dz
  dz  }| d | › d| | d  › �S | S )Né   é   é   z ... )Úlen)rG   rH   Úlengths      r%   Úshorten_strrO   R   sP   € Øˆa‚xØ��$ˆxˆÜ
ˆ1ƒv�‚}Ø˜‘(˜q‘ˆØ�G�V�*�˜U 1 f W X ; -Ð0Ð0àˆr'   Úbytesorstringr?   Ú	erractionc                 óœ   — t        | t        «      r| S t        | t        «      sJ t        t        | «      «      «       ‚| j	                  ||«      S )z^When Py2 str.encode is called, it often means bytes.encode in Py3.

    This does either.
    )r   r   r@   r#   rC   )rP   r?   rQ   s      r%   Úcompatible_encode_methodrS   \   sF   € ô �-¤Ô%ØÐÜ�m¤UÔ+ÐE¬S´°mÓ1DÓ-EÓEÐ+Ø×Ñ ¨)Ó4Ð4r'   ÚleftÚaboveÚ
upper_leftc                 ó�   — | |z   |z
  }t        || z
  «      }t        ||z
  «      }t        ||z
  «      }||k  r||k  r| S ||k  r|S |S r)   )Úabs)rT   rU   rV   ÚpÚpaÚpbÚpcs          r%   Úpaeth_predictorr]   k   s`   € ð 	ˆu‰�zÑ!€Aä	ˆQ�‰X‹€BÜ	ˆQ�‰Y‹€BÜ	ˆQ�‰^Ó	€Bð 
ˆR‚x�B˜"’HØˆØ	ˆrŠØˆàÐr'   ÚcolorsÚcolumnsÚbitspercomponentÚdatac                 ó8  — |dk7  rd|› �}t        |«      ‚| |dz  z  }||z  }g }t        dt        |«      |«      D ]S  }g }	t        |«      D ]0  }
|||
z      }|
|k\  r||	|
|z
     z  }|dz  }|	j                  |«       Œ2 |j	                  |	«       ŒU t        |«      S )zŸReverse the effect of the TIFF predictor 2

    Documentation:
    https://www.itu.int/itudoc/itu-t/com16/tiff-fx/docs/tiff6.pdf
    (Section 14, page 64)
    é   ú Unsupported `bitspercomponent': r   é   )r   ÚrangerM   ÚappendÚextendr@   )r^   r_   r`   ra   Ú	error_msgÚbppÚnbytesÚbufÚ
scanline_iÚrawÚiÚ	new_values               r%   Úapply_tiff_predictorrq   }   sÍ   € ð ˜1ÒØ6Ð7GÐ6HÐIˆ	Ü˜IÓ&Ð&Ø
Ð$¨Ñ)Ñ
*€CØ�s‰]€FØ€CÜ˜Aœs 4›y¨&Ó1ò ˆ
ØˆÜ�v“ò 	"ˆAØ˜Z¨!™^Ñ,ˆIØ�CŠxØ˜S  S¡™\Ñ)�	Ø˜SÑ �	Ø�J‰J�yÕ!ð	"ð 	�
‰
�3�ðô �‹:Ðr'   Úpredc                 ó  — |dvrd|› �}t        |«      ‚||z  |z  dz  }||z  dz  }g }t        d|z  «      }	t        dt        |«      |dz   «      D �]«  }
||
   }||
dz   |
dz   |z    }g }|dk(  rt        |«      }�nn|dk(  rIt	        |«      D ]9  \  }}||z
  dk  rdnt        |||z
     «      }||z   dz  }|j                  |«       Œ; �n |dk(  r0t        ||	d	¬
«      D ]  \  }}||z   dz  }|j                  |«       Œ  në|dk(  r\t	        |«      D ]M  \  }}||z
  dk  rdnt        |||z
     «      }t        |	|   «      }|||z   dz  z   dz  }|j                  |«       ŒO nŠ|dk(  rwt	        |«      D ]h  \  }}||z
  dk  rd}d}n"t        |||z
     «      }t        |	||z
     «      }t        |	|   «      }t        |||«      }||z   dz  }|j                  |«       Œj nt        d|› �«      ‚|j                  |«       |}	�Œ® t        |«      S )zxReverse the effect of the PNG predictor

    Documentation: http://www.libpng.org/pub/png/spec/1.2/PNG-Filters.html
    )rc   é   rd   rc   ó    r   rt   éÿ   rL   F)Ústricté   é   zUnsupported predictor value: )r   Úlistrf   rM   Ú	enumerateÚintrg   Úzipr]   rh   r@   )rr   r^   r_   r`   ra   Úmsgrk   rj   rl   Ú
line_aboverm   Úfilter_typeÚline_encodedrn   ÚjÚsub_xÚ	raw_x_bppÚraw_xÚup_xÚprior_xÚ	average_xÚpaeth_xÚprior_x_bppÚpaeths                           r%   Úapply_png_predictorrŒ   ™   s“  € ð ˜vÑ%Ø0Ð1AÐ0BÐCˆÜ˜CÓ Ð à�gÑÐ 0Ñ0°AÑ5€FØ
Ð#Ñ
# qÑ
(€CØ
€CÜ�g Ñ'Ó(€JÜ˜Aœs 4›y¨&°1©*Ó5ó Hˆ
Ø˜:Ñ&ˆØ˜J¨™N¨Z¸!©^¸fÑ-DÐEˆØˆà˜!Òä�|Ó$ŠCà˜AÒô & lÓ3ò "‘��5Ø!" S¡¨1¢™A´#°c¸!¸c¹'±lÓ2C�	Ø Ñ*¨cÑ1�Ø—
‘
˜5Õ!ò"ð
 ˜AÒô "% \°:ÀeÔ!Lò "‘��gØ ™¨3Ñ.�Ø—
‘
˜5Õ!ñ"ð ˜AÒô !*¨,Ó 7ò "‘��9Ø!" S¡¨1¢™A´#°c¸!¸c¹'±lÓ2C�	Ü˜j¨™mÓ,�Ø" i°'Ñ&9¸aÑ%?Ñ?À3ÑF�Ø—
‘
˜5Õ!ñ	"ð ˜AÒô (¨Ó5ò 
"‘
��7Ø�s‘7˜Q’;Ø !�IØ"#‘Kä # C¨¨C©¡LÓ 1�IÜ"% j°°S±Ñ&9Ó":�KÜ˜j¨™mÓ,�Ü'¨	°7¸KÓH�Ø  5™¨CÑ/�Ø—
‘
˜5Õ!ñ
"ô  Ð"?À¸}Ð MÓNÐNà�
‰
�3ŒØŠ
ðQHôR �‹:Ðr'   )rt   r   r   rt   r   r   ÚMATRIX_IDENTITYc                 ó    — 	 | \  }}}}t        |«      t        |«      t        |«      t        |«      fS # t        $ r}t        d«      |‚d }~ww xY w)NzCould not parse rectangle)ÚfloatÚ
ValueErrorr   )r=   Úx0Úy0Úx1Úy1Úerrs         r%   Ú
parse_rectr–     sU   € ðBØÑˆˆR��RÜ�R‹yœ% ›)¤U¨2£Y´°b³	Ð9Ð9øÜò BÜÐ7Ó8¸cÐAûðBús   ‚03 ³	A¼AÁAÚm1Úm0c                 ó°   — | \  }}}}}}|\  }}	}
}}}	 ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |	|z  ||z  z   ||z  |
|z  z   |z   |	|z  ||z  z   |z   fS r)   r8   )r—   r˜   Úa1Úb1Úc1Úd1Úe1Úf1Úa0Úb0Úc0Úd0Úe0Úf0s                 r%   Úmult_matrixr¦     s�   € Ø!Ñ€RˆˆR��R˜Ø!Ñ€RˆˆR��R˜Ø5à
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'ÑØ
ˆR‰�"�r‘'Ñ˜BÑØ
ˆR‰�"�r‘'Ñ˜BÑðð r'   ÚmÚvc                 ó^   — | \  }}}}}}|\  }}	||||||z  |	|z  z   |z   ||z  |	|z  z   |z   fS )zùTranslates a matrix by (x, y) inside the projection.

    The matrix is changed so that its origin is at the specified point in its own
    coordinate system. Note that this is different from translating it within the
    original coordinate system.r8   ©
r§   r¨   ÚaÚbÚcÚdÚeÚfÚxÚys
             r%   Útranslate_matrixr³     sT   € ð Ñ€Qˆˆ1ˆa��AØ�F€QˆØˆa��A�q˜1‘u˜q 1™u‘} qÑ(¨!¨a©%°!°a±%©-¸!Ñ*;Ð;Ð;r'   c                 óV   — | \  }}}}}}|\  }}	||z  ||	z  z   |z   ||z  ||	z  z   |z   fS )zApplies a matrix to a point.r8   rª   s
             r%   Úapply_matrix_ptrµ   '  sJ   € àÑ€Qˆˆ1ˆa��AØ�F€QˆØˆq‰5�1�q‘5‰=˜1Ñ˜a !™e a¨!¡e™m¨aÑ/Ð/Ð/r'   Úrectc           	      ó  — |\  }}}}||f}||f}||f}||f}	t        | |«      \  }
}t        | |«      \  }}t        | |«      \  }}t        | |	«      \  }}t        |
|||«      t        ||||«      t        |
|||«      t        ||||«      fS )aŸ  Applies a matrix to a rectangle.

    Note that the result is not a rotated rectangle, but a rectangle with the same
    orientation that tightly fits the outside of the rotated content.

    :param m: The rotation matrix.
    :param rect: The rectangle coordinates (x0, y0, x1, y1), where x0 < x1 and y0 < y1.
    :returns a rectangle with the same orientation, but that would fit the rotated
        content.
    )rµ   ÚminÚmax)r§   r¶   r‘   r’   r“   r”   Úleft_bottomÚright_bottomÚ	right_topÚleft_topÚleft1Úbottom1Úright1Úbottom2Úright2Útop1Úleft2Útop2s                     r%   Úapply_matrix_rectrÆ   .  s¼   € ð Ñ€RˆˆR�Ø�r�(€KØ˜�8€LØ�R�€IØ�Bˆx€Hä& q¨+Ó6Ñ€UˆGÜ'¨¨<Ó8Ñ€VˆWÜ$ Q¨	Ó2�N€VˆTÜ# A xÓ0�M€UˆDô 	ˆE�5˜& &Ó)ÜˆG�W˜d DÓ)ÜˆE�5˜& &Ó)ÜˆG�W˜d DÓ)ð	ð r'   c                 óJ   — | \  }}}}}}|\  }}	||z  ||	z  z   ||z  ||	z  z   fS )zCEquivalent to apply_matrix_pt(M, (p,q)) - apply_matrix_pt(M, (0,0))r8   )
r§   r¨   r«   r¬   r­   r®   Ú_eÚ_frY   Úqs
             r%   Úapply_matrix_normrË   L  s@   € àÑ€Qˆˆ1ˆa��RØ�F€QˆØˆq‰5�1�q‘5‰=˜!˜a™% ! a¡%™-Ð'Ð'r'   r±   c                 ó.   — t        | t        t        f«      S r)   )r   r|   r�   ©r±   s    r%   ÚisnumberrÎ   V  s   € Ü�aœ#œu˜Ó&Ð&r'   Ú_TÚobjsc              #   ób   K  — t        «       }| D ]  }||v rŒ|j                  |«       |–— Œ y­w)zEliminates duplicated elements.N)ÚsetÚadd)rÐ   ÚdoneÚobjs      r%   ÚuniqrÖ   ]  s6   è ø€ ä‹5€DØò ˆØ�$‰;ØØ�‰�ŒØ‹	ñ	ùs   ‚-/c                 óv   — g }g }|D ]-  } | |«      r|j                  |«       Œ|j                  |«       Œ/ ||fS )z9Split a list into two classes according to the predicate.)rg   )rr   rÐ   Útr°   rÕ   s        r%   ÚfsplitrÙ   g  sC   € à
€AØ
€AØò ˆÙ�Œ9Ø�H‰H�S�Mà�H‰H�S�Mð	ð
 ˆaˆ4€Kr'   Úv0Úv1r®   c                 óP   — t        t        | «      |z  t        ||z   «      |z  «      S )zReturns a discrete range.)rf   r|   )rÚ   rÛ   r®   s      r%   ÚdrangerÝ   s  s$   € ä”�R“˜A‘œs 2¨¡6›{¨aÑ/Ó0Ð0r'   Úptsc                 óÀ   — t         t         t          t          f}|\  }}}}| D ]5  \  }}t        ||«      }t        ||«      }t        ||«      }t        ||«      }Œ7 ||||fS )z7Compute a minimal rectangle that covers all the points.)ÚINFr¸   r¹   )rÞ   Úlimitr‘   r’   r“   r”   r±   r²   s           r%   Ú	get_boundrâ   x  sq   € äœœc˜T¤C 4Ð(€EØÑ€RˆˆR�Øò ‰ˆˆ1Ü��Q‹ZˆÜ��Q‹ZˆÜ��Q‹ZˆÜ��Q‹Z‰ð	ð
 ˆr�2�rˆ>Ðr'   ÚseqÚfuncÚmaxobjc                 ó@   — d}| D ]  } ||«      }|�||k  sŒ||}}Œ |S )z;Picks the object obj where func(obj) has the highest value.Nr8   )rã   rä   rå   ÚmaxscorerÕ   Úscores         r%   Úpickré   „  s>   € ð €HØò .ˆÙ�S“	ˆØÐ˜x¨%Ó/Ø"'¨�v‰Xð.ð €Mr'   Ún.c              #   ó|   K  — g }|D ]1  }|j                  |«       t        |«      | k(  sŒ#t        |«      –— g }Œ3 y­w)z$Groups every n elements of the list.N)rg   rM   Útuple)rê   rã   Úrr±   s       r%   Úchoplistrî   ’  s>   è ø€ à
€AØò ˆØ	�‰�ŒÜˆq‹6�Q‹;Ü˜“(ŠNØ‰Añ	ùs   ‚'<ª<Údefaultc                 óP   — t        | «      }|s|S t        j                  | dd¬«      S )z7Unpacks variable-length unsigned integers (big endian).ÚbigF)Ú	byteorderÚsigned)rM   r|   Ú
from_bytes)rG   rï   rN   s      r%   Únunpackrõ   œ  s(   € ä�‹V€FÙØˆä�~‰~˜a¨5¸ˆ~Ó?Ð?r'   Ú c              #   ó2   K  — | ]  }t        |«      –— Œ y ­wr)   )Úchr)Ú.0r±   s     r%   ú	<genexpr>rú   ¥  s   è ø€ ò Dà	ô ˆ‡FñDùs   ‚(   r   rt   rL   rx   ry   rK   é   rJ   rc   é	   é
   é   é   é   é   é   é   é   é   é   é   é   é   r	  iØ  iÇ  iÆ  iÙ  iÝ  iÛ  iÚ  iÜ  é    é!   é"   é#   é$   é%   é&   é'   é(   é)   é*   é+   é,   é-   é.   é/   é0   é1   é2   é3   é4   é5   é6   é7   é8   é9   é:   é;   é<   é=   é>   é?   é@   éA   éB   éC   éD   éE   éF   éG   éH   éI   éJ   éK   éL   éM   éN   éO   éP   éQ   éR   éS   éT   éU   éV   éW   éX   éY   éZ   é[   é\   é]   é^   é_   é`   éa   éb   éc   éd   ée   éf   ég   éh   éi   éj   ék   él   ém   én   éo   ép   éq   ér   és   ét   éu   év   éw   éx   éy   éz   é{   é|   é}   é~   r   i"   i    i!   i&   i   i   i’  iD   i9   i:   i"  i0   i   i   i   i   i   i   i"!  iû  iû  iA  iR  i`  ix  i}  i1  iB  iS  ia  i~  r   i¬   é¡   é¢   é£   é¤   é¥   é¦   é§   é¨   é©   éª   é«   é¬   r   é®   é¯   é°   é±   é²   é³   é´   éµ   é¶   é·   é¸   é¹   éº   é»   é¼   é½   é¾   é¿   éÀ   éÁ   éÂ   éÃ   éÄ   éÅ   éÆ   éÇ   éÈ   éÉ   éÊ   éË   éÌ   éÍ   éÎ   éÏ   éÐ   éÑ   éÒ   éÓ   éÔ   éÕ   éÖ   é×   éØ   éÙ   éÚ   éÛ   éÜ   éÝ   éÞ   éß   éà   éá   éâ   éã   éä   éå   éæ   éç   éè   éé   éê   éë   éì   éí   éî   éï   éð   éñ   éò   éó   éô   éõ   éö   é÷   éø   éù   éú   éû   éü   éý   éþ   rv   c                 ót   — | j                  d«      rt        | dd dd«      S dj                  d„ | D «       «      S )z+Decodes a PDFDocEncoding string to Unicode.s   þÿrL   Nzutf-16beÚignorerö   c              3   ó.   K  — | ]  }t         |   –— Œ y ­wr)   )ÚPDFDocEncoding)rù   r­   s     r%   rú   zdecode_text.<locals>.<genexpr>±  s   è ø€ Ò4¨Q”~ aÕ(Ñ4ùs   ‚)Ú
startswithr   Újoin)rG   s    r%   Údecode_textrÌ  ¬  s8   € à‡|�|�KÔ Ü�1�Q�R�5˜* hÓ/Ð/à�w‰wÑ4°!Ô4Ó4Ð4r'   c                 ó:   — t        | t        «      ryt        | «      S )z"Encodes a string for SGML/XML/HTMLrö   )r   r@   r   rÍ   s    r%   rE   rE   ´  s   € ä�!”UÔØÜ�!‹9Ðr'   Úbboxc                 ó2   — | \  }}}}|d›d|d›d|d›d|d›�S )Nz.3fú,r8   )rÎ  r‘   r’   r“   r”   s        r%   Úbbox2strrÑ  »  s5   € ØÑ€RˆˆR�Ø�ˆX�Q�r˜#�h˜a  3˜x q¨¨C¨Ð1Ð1r'   c                 óJ   — | \  }}}}}}d|d›d|d›d|d›d|d›d|d›d|d›d�S )Nú[z.2frÐ  z, (z)]r8   )r§   r«   r¬   r­   r®   r¯   r°   s          r%   Ú
matrix2strrÔ  À  sM   € ØÑ€Qˆˆ1ˆa��AØˆq�ˆg�Q�q˜�g˜Q˜q ˜g Q q¨ g¨S°°3°°q¸¸3¸¸rÐBÐBr'   Úobj1r   Úobj2c                 ó¾  — t        | j                  |j                  «      t        | j                  |j                  «      }}t        | j                  |j                  «      t        | j
                  |j
                  «      }}||z
  ||z
  }}|| j                  z
  |j                  z
  || j                  z
  |j                  z
  }	}|dk  r|	dk  rz| j                  | j                  z   dz  | j                  | j
                  z   dz  }}
|j                  |j                  z   dz  |j                  |j
                  z   dz  }}|
|z
  ||z
  fS t        d|«      t        d|	«      fS )a�  A distance function between two TextBoxes.

    Consider the bounding rectangle for obj1 and obj2.
    Return vector between 2 boxes boundaries if they don't overlap, otherwise
    returns vector between boxes centers

             +------+..........+ (x1, y1)
             | obj1 |          :
             +------+www+------+
             :          | obj2 |
    (x0, y0) +..........+------+
    r   rL   )r¸   r‘   r’   r¹   r“   r”   ÚwidthÚheight)rÕ  rÖ  r‘   r’   r“   r”   ÚowÚohÚiwÚihÚxc1Úyc1Úxc2Úyc2s                 r%   ÚvecBetweenBoxesrâ  Å  s   € ô �D—G‘G˜TŸW™WÓ%¤s¨4¯7©7°D·G±GÓ'<ˆ€RÜ�D—G‘G˜TŸW™WÓ%¤s¨4¯7©7°D·G±GÓ'<ˆ€RØ�R‘˜˜b™ˆ€RØ�T—Z‘Z‘ $§*¡*Ñ,¨b°4·;±;Ñ.>ÀÇÁÑ.Lˆ€RØ	ˆA‚v�"�q’&à—w‘w §¡Ñ(¨AÑ-°·±¸$¿'¹'Ñ0AÀQÑ/FˆcˆØ—w‘w §¡Ñ(¨AÑ-°·±¸$¿'¹'Ñ0AÀQÑ/FˆcˆØ�S‰y˜# ™)Ð#Ð#ä�1�b‹zœ3˜q "›:Ð%Ð%r'   ÚLTComponentT)Úboundc                   óÂ   — e Zd ZdZddededdfd„Zdefd„Zde	e
   fd„Zdefd	„Zd
edefd„Zdede	e   fd„Zdee
   ddfd„Zd
e
ddfd„Zd
e
ddfd„Zdede	e
   fd„Zy)ÚPlanezäA set-like data structure for objects placed on a plane.

    Can efficiently find objects in a certain rectangular area.
    It maintains two parallel lists of objects, each of
    which is sorted by its x or y coordinate.
    rÎ  Úgridsizer   Nc                 ó‚   — g | _         t        «       | _        i | _        || _        |\  | _        | _        | _        | _        y r)   )	Ú_seqrÒ   Ú_objsÚ_gridrç  r‘   r’   r“   r”   )r$   rÎ  rç  s      r%   r&   zPlane.__init__ê  s6   € Ø(*ˆŒ	Ü(+«ˆŒ
Ø68ˆŒ
Ø ˆŒØ/3Ñ,ˆŒ�$”'˜4œ7 D¥Gr'   c                 ó    — dt        | «      ›d�S )Nz<Plane objs=ú>)rz   r*   s    r%   Ú__repr__zPlane.__repr__ñ  s   € Øœd 4›j˜^¨1Ð-Ð-r'   c                 ó.   ‡ — ˆ fd„‰ j                   D «       S )Nc              3   ó@   •K  — | ]  }|‰j                   v sŒ|–— Œ y ­wr)   ©rê  )rù   rÕ   r$   s     €r%   rú   z!Plane.__iter__.<locals>.<genexpr>õ  s   øè ø€ Ò>˜¨C°4·:±:Ò,=”Ñ>ùs   ƒ—)ré  r*   s   `r%   Ú__iter__zPlane.__iter__ô  s   ø€ Û>˜tŸy™yÔ>Ð>r'   c                 ó,   — t        | j                  «      S r)   )rM   rê  r*   s    r%   Ú__len__zPlane.__len__÷  s   € Ü�4—:‘:‹Ðr'   rÕ   c                 ó   — || j                   v S r)   rñ  )r$   rÕ   s     r%   Ú__contains__zPlane.__contains__ú  s   € Ø�d—j‘jÐ Ð r'   c              #   óÀ  K  — |\  }}}}|| j                   k  s-| j                  |k  s|| j                  k  s| j                  |k  ry t	        | j                   |«      }t	        | j                  |«      }t        | j                  |«      }t        | j                  |«      }t        ||| j                  «      D ]$  }t        ||| j                  «      D ]  }||f–— Œ
 Œ& y ­wr)   )r‘   r“   r’   r”   r¹   r¸   rÝ   rç  )r$   rÎ  r‘   r’   r“   r”   Úgrid_yÚgrid_xs           r%   Ú	_getrangezPlane._getrangeý  sÃ   è ø€ ØÑˆˆR��RØ�—‘Š=˜DŸG™G ršM¨R°4·7±7ª]¸d¿g¹gÈºmØÜ�—‘˜"ÓˆÜ�—‘˜"ÓˆÜ�—‘˜"ÓˆÜ�—‘˜"ÓˆÜ˜R  T§]¡]Ó3ò 	'ˆFÜ   R¨¯©Ó7ò '�Ø˜vÐ&Ó&ñ'ñ	'ùs   ‚CCrÐ   c                 ó4   — |D ]  }| j                  |«       Œ y r)   )rÓ   )r$   rÐ   rÕ   s      r%   rh   zPlane.extend	  s   € Øò 	ˆCØ�H‰H�S�Mñ	r'   c                 ót  — | j                  |j                  |j                  |j                  |j                  f«      D ]B  }|| j
                  vrg }|| j
                  |<   n| j
                  |   }|j                  |«       ŒD | j                  j                  |«       | j                  j                  |«       y)zPlace an object.N)
rú  r‘   r’   r“   r”   rë  rg   ré  rê  rÓ   )r$   rÕ   Úkrí   s       r%   rÓ   z	Plane.add  s�   € à—‘ §¡¨¯©°·±¸¿¹Ð @ÓAò 	ˆAØ˜Ÿ
™
Ñ"Ø(*�Ø !�—
‘
˜1’à—J‘J˜q‘M�Ø�H‰H�S�Mð	ð 	�	‰	×Ñ˜ÔØ�
‰
�‰�sÕr'   c                 ó`  — | j                  |j                  |j                  |j                  |j                  f«      D ]G  }t        j                  t        t        «      5  | j                  |   j                  |«       ddd«       ŒI | j                  j                  |«       y# 1 sw Y   ŒoxY w)zDisplace an object.N)rú  r‘   r’   r“   r”   Ú
contextlibÚsuppressÚKeyErrorr�   rë  Úremoverê  )r$   rÕ   rý  s      r%   r  zPlane.remove  s‡   € à—‘ §¡¨¯©°·±¸¿¹Ð @ÓAò 	*ˆAÜ×$Ñ$¤X¬zÓ:ñ *Ø—
‘
˜1‘×$Ñ$ SÔ)÷*ð *ð	*ð 	�
‰
×Ñ˜#Õ÷*ð *ús   ÁB$Â$B-	c              #   óN  K  — |\  }}}}t        «       }| j                  |«      D ]|  }|| j                  vrŒ| j                  |   D ]Y  }||v rŒ|j                  |«       |j                  |k  s-||j
                  k  s|j                  |k  s||j                  k  rŒV|–— Œ[ Œ~ y­w)z)Finds objects that are in a certain area.N)rÒ   rú  rë  rÓ   r“   r‘   r”   r’   )	r$   rÎ  r‘   r’   r“   r”   rÔ   rý  rÕ   s	            r%   Úfindz
Plane.find   sŸ   è ø€ àÑˆˆR��RÜ‹uˆØ—‘ Ó%ò 		ˆAØ˜Ÿ
™
Ñ"ØØ—z‘z !‘}ò �Ø˜$‘;ØØ—‘˜”Ø—6‘6˜R’< 2¨¯©¢<°3·6±6¸R²<À2ÈÏÉÂ<ØØ“	ññ		ùs   ‚B#B%)r  )r2   r3   r4   r5   ÚRectr|   r&   r   rî  r   rã  rò  rô  r7   Úboolrö  ÚPointrú  r   rh   rÓ   r  r  r8   r'   r%   ræ  ræ  â  sÊ   „ ññ4˜Tð 4¨Sð 4¸$ó 4ð.˜#ó .ð?˜( <Ñ0ó ?ð˜ó ð! ð !¨4ó !ð
'˜dð 
' x°¡ó 
'ð˜8 LÑ1ð °dó ð
�|ð 
¨ó 
ð˜,ð ¨4ó ð˜ð  (¨<Ñ"8ô r'   ræ  )ro   r±   r­   r§   )r¨   Úlr®   Úvaluec                 óú  — d| cxk  rdk  sJ ‚ J ‚g }d}| dk7  rÒt        | d«      \  } }|dk(  r6|j                  dt        |   «       |j                  dt        |dz      «       n}|dk(  r3|j                  dt        |   «       |j                  dt        |   «       nE|dk\  }|r|j                  dt        |   «       |dz  }|j                  |rdndt        |   |z  «       |dz  }| dk7  rŒÒdj	                  |«      S )	z,Format a number as lowercase Roman numerals.r   i   rý   rü   rt   ry   rK   rö   )ÚdivmodÚinsertÚ
ROMAN_ONESÚROMAN_FIVESrË  )r	  ÚresultÚindexÚ	remainderÚ	over_fives        r%   Úformat_int_romanr  4  s  € àˆuÔ�tÒÐÑÐÐØ€FØ€Eà
�1Š*Ü! %¨Ó,ÑˆˆyØ˜Š>Ø�M‰M˜!œZ¨Ñ.Ô/Ø�M‰M˜!œZ¨°©	Ñ2Õ3Ø˜!Š^Ø�M‰M˜!œZ¨Ñ.Ô/Ø�M‰M˜!œ[¨Ñ/Õ0à! Q™ˆIÙØ—‘˜a¤¨UÑ!3Ô4Ø˜Q‘�	Ø�M‰M™y™!¨a´¸EÑ1BÀYÑ1NÔOØ�‰
ˆð �1‹*ð  �7‰7�6‹?Ðr'   c                 ó  — | dkD  sJ ‚g }| dk7  rQt        | dz
  t        t        j                  «      «      \  } }|j	                  t        j                  |   «       | dk7  rŒQ|j                  «        dj                  |«      S )z5Format a number as lowercase letters a-z, aa-zz, etc.r   rt   rö   )r  rM   ÚstringÚascii_lowercaserg   ÚreverserË  )r	  r  r  s      r%   Úformat_int_alphar  M  st   € à�1Š9Ðˆ9Ø€Fà
�1Š*Ü! %¨!¡)¬S´×1GÑ1GÓ-HÓIÑˆˆyØ�‰”f×,Ñ,¨YÑ7Ô8ð �1‹*ð ‡N�NÔØ�7‰7�6‹?Ðr'   Úpaddedc                 óœ   ‡— t        | «      dk(  r| S | d   Š‰dkD  r| S ‰t        | «      kD  r| S t        ˆfd„| ‰ d D «       «      r| d‰  S | S )a1  Remove block padding as described in PDF 1.7 section 7.6.2:

    > For an original message length of M, the pad shall consist of 16 -
    (M mod 16) bytes whose value shall also be 16 - (M mod 16).
    > Note that the pad is present when M is evenly divisible by 16;
    it contains 16 bytes of 0x10.
    r   éÿÿÿÿr  c              3   ó(   •K  — | ]	  }|‰k(  –— Œ y ­wr)   r8   )rù   r±   Úpaddings     €r%   rú   zunpad_aes.<locals>.<genexpr>l  s   øè ø€ Ò
3˜Aˆ1��<Ñ
3ùs   ƒN)rM   Úall)r  r  s    @r%   Ú	unpad_aesr  Z  sg   ø€ ô ˆ6ƒ{�aÒØˆà�R‰j€GØ�‚|Øˆà”�V“ÒØˆä
Ó
3 ¨¨¨	Ð!2Ô
3Ô3Ø�i˜�xÐ Ð Ø€Mr'   )zutf-8rÇ  r)   )r   )Sr5   r    r   r  Úcollections.abcr   r   r   Úhtmlr   Útypingr   r   r	   r
   r   r   r   r   Úpdfminer.pdfexceptionsr   r   Úpdfminer.layoutr   rÿ  rA   rà   r   r   r!   r6   r"   r   r@   r<   r7   rF   r|   rO   rS   r]   rq   rŒ   rì   r�   r  r  ÚMatrixÚPathSegmentr�   Ú__annotations__r–   r¦   r³   rµ   rÆ   rË   r  rÎ   rÏ   rÖ   rz   rÙ   rf   rÝ   râ   ré   rî   rõ   rË  rÉ  rÌ  rE   rÑ  rÔ  râ  rã  ræ  r  r  r  r  r  r8   r'   r%   ú<module>r(     sÙ  ðÚ ã 	Û Û ß 8Ñ 8Ý ÷	÷ 	ó 	÷ ?áÝ+ã ã ð €à�7×#Ñ# S¨"¯)©)Ð3Ñ4€
Øˆf�hÐÑ€÷&ñ &ð4˜cð  eó ð�vð  #ó ð�3ð ˜cð  có ð Øñ5Ø˜3‘;ð5àð5ð ð5ð 	ó	5ð˜#ð  cð °sð ¸só ð$ØðØðØ14ðØ<Aðà
óð8\Ø
ð\àð\ð ð\ð ð	\ð
 ð\ð ó\ð~ 	ˆe�UˆlÑ€ØˆU�E˜5 %Ð'Ñ(€Ø	ˆu�e˜U E¨5°%Ð7Ñ	8€ØØ	ˆ#�JØ	ˆ#ˆu�eÐ
ÑØ	ˆ#ˆu�e˜U EÐ
)Ñ*Ø	ˆ#ˆu�e˜U E¨5°%Ð
7Ñ8ð:ñ€ð -€�Ó ,ðB�#ð B˜$ó Bð�Fð  ð ¨6ó ð<˜ð < 5ð <¨Vó <ð0�vð 0 %ð 0¨Eó 0ð˜ð  tð °ó ð<(˜ð ( Eð (¨eó (ð'�ð '˜4ó 'ñ ˆTƒ]€ðˆx˜‰|ð  ¨¡ó ð	�˜2˜$ ˜*Ñ%ð 	¨X°b©\ð 	¸eÀDÈÁHÈdÐSUÉhÐDVÑ>Wó 	ð1ˆuð 1˜%ð 1 Cð 1¨Eó 1ð
	�8˜E‘?ð 	 tó 	ð ñØ	�"‰ðà
�B�4˜�;Ñ
ðð �‰Iðð ˆ$�Yó	ð�ð ˜( 2™,ð ¨8°E¸"¸c¸'±NÑ+Có ñ@ˆuð @˜sð @¨3ó @ð —‘ñ DðAôDó D€ðN5�5ð 5˜Só 5ðˆ3ð �3ó ð2�4ð 2˜Có 2ð
C�&ð C˜Só Cð
&˜-ð &¨}ð &Àó &ñ4 �~¨]Ô;€ôKˆG�LÑ!ô Kò\ "€
Ú€ð˜Cð  Có ð2
˜Cð 
 Có 
ð�eð  ô r'   