Ë
    S"“jY9  ã                   óT  — d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZ ddlmZ  G d„ dej                  «      Z ej                   e«      Zdd„Zd„ Zd	„ Zd
„ Zddœd„Zd„ Zdd„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z G d„ de «      Z! G d„ dejD                  «      Z#d„ Z$y)z6Various helpers not related to the Telegram API itselfé    N)ÚPath)Úsha1c                   ó   — e Zd ZdZdZdZy)Ú_EntityTyper   é   é   N)Ú__name__Ú
__module__Ú__qualname__ÚUSERÚCHATÚCHANNEL© ó    úQ/var/www/api.ozpay.ru/ozpay/venv/lib/python3.12/site-packages/telethon/helpers.pyr   r      s   „ Ø€DØ€DØ�Gr   r   c                 óX   — t         j                  t        j                  d«      | d¬«      S )zEGenerates a random long integer (8 bytes), which is optionally signedé   Úlittle)ÚsignedÚ	byteorder)ÚintÚ
from_bytesÚosÚurandom©r   s    r   Úgenerate_random_longr      s   € ä�>‰>œ"Ÿ*™* Q›-°À(ˆ>ÓKÐKr   c                 óv   — t         j                  j                  | «      }|rt        j                  |d¬«       yy)z(Ensures that the parent directory existsT)Úexist_okN)r   ÚpathÚdirnameÚmakedirs)Ú	file_pathÚparents     r   Úensure_parent_dir_existsr$       s*   € ä�W‰W�_‰_˜YÓ'€FÙÜ
�‰�F TÖ*ð r   c                 ó2   — dj                  d„ | D «       «      S )NÚ c           
   3   óÄ   K  — | ]X  }d t        |«      cxk  rdk  r>n n;dj                  d„ t        j                  d|j	                  d«      «      D «       «      n|–— ŒZ y­w)i   iÿÿ r&   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Úchr)Ú.0Úys     r   ú	<genexpr>z*add_surrogate.<locals>.<genexpr>.<genexpr>+   s   è ø€ ÒK˜1”�A—ÑKùó   ‚z<HHzutf-16leN)ÚordÚjoinÚstructÚunpackÚencode©r+   Úxs     r   r-   z add_surrogate.<locals>.<genexpr>(   sU   è ø€ ò ð 78ˆG”s˜1“vÔ) Õ)ð 	�‰ÑK¤§¡¨e°Q·X±X¸jÓ5IÓ JÔKÔKØ01ó	2ñùs   ‚AA )r0   ©Útexts    r   Úadd_surrogater8   '   s#   € Ø�7‰7ñ ð <@ô	ó ð r   c                 óD   — | j                  dd«      j                  d«      S )Nzutf-16Úsurrogatepass)r3   Údecoder6   s    r   Údel_surrogater<   0   s   € Ø�;‰;�x Ó1×8Ñ8¸ÓBÐBr   )Úlengthc                ó¨   — |€t        | «      }d|cxk  xr t        | «      k  nc xr+ d| |dz
     cxk  xr dk  nc xr d| |   cxk  xr dk  S c S )zS
    `True` if ``index`` is within a surrogate (before and after it, not at!).
    r   u   í €u   í¯¿u   í¿¿)Úlen)r7   Úindexr=   s      r   Úwithin_surrogaterA   4   sd   € ð €~Ü�T“ˆð �Ö!œ˜D›	Ô!ò 0Ø˜˜U Q™Y™Ö3¨8Ô3ò0à˜˜U™Ö/ xÑ/ðñ 0ðr   c                 óŠ  — |s| j                  «       S t        | «      }| j                  «       } |t        | «      z
  }| j                  «       } t        | «      }t	        t        t        |«      «      «      D ]Ì  }||   }|j                  dk(  r||= Œ|j                  |j                  z   |kD  rN|j                  |k\  r|xj                  |z  c_        n-|j                  |j                  z   |z
  |_        d|_        n||= Œ‰|j                  |j                  z   |k  rŒ¦|j                  |k\  r||= Œ¹||j                  z
  |_        ŒÎ | S )zý
    Strips whitespace from the given surrogated text modifying the provided
    entities, also removing any empty (0-length) entities.

    This assumes that the length of entities is greater or equal to 0, and
    that no entity is out of bounds.
    r   )Ústripr?   ÚlstripÚrstripÚreversedÚranger=   Úoffset)r7   ÚentitiesÚlen_oriÚleft_offsetÚ	len_finalÚiÚes          r   Ú
strip_textrO   B   s-  € ñ Ø�z‰z‹|Ðä�$‹i€GØ�;‰;‹=€DØœC ›IÑ%€KØ�;‰;‹=€DÜ�D“	€Iä”eœC ›MÓ*Ó+ò 1,ˆØ�Q‰KˆØ�8‰8�qŠ=Ø˜�Øà�8‰8�a—h‘hÑ Ò,Ø�x‰x˜;Ò&ð —’˜KÑ'–ð Ÿ8™8 a§h¡hÑ.°Ñ<�”Ø�•ð ˜�Øà�8‰8�a—h‘hÑ )Ò+ð Ø�8‰8�yÒ ð ˜‘ð ! 1§8¡8Ñ+ˆA�Hðc1,ðl €Kr   c              #   óV   K  — |r| �
| dk  s| dz  } d}|| k7  r|dz  }|–— || k7  rŒyy­w)z¿
    Generates an integer sequence starting from 1. If `retries` is
    not a zero or a positive integer value, the sequence will be
    infinite, otherwise it will end at `retries + 1`.
    Nr   r   r   )ÚretriesÚforce_retryÚattempts      r   Úretry_rangerT   Œ   sC   è ø€ ñ ˜G˜O¨w¸ª{Ø�1‰ˆà€GØ
�WÒ
Ø�1‰ˆØŠð �WÕ
ùs   ‚$)§)c              ƒ   óP   K  — t        j                  | «      r
| ƒ d {  –—† S | S 7 Œ­wr)   )ÚinspectÚisawaitable)Úvalues    r   Ú_maybe_awaitrY   Ÿ   s&   è ø€ Ü×Ñ˜5Ô!Ø�{Ðàˆð ús   ‚&�$ž&c           	   ‹   óŠ  K  — |j                  «       D ]#  \  }}|sŒ	|j                  «        	 |ƒ d{  –—†  Œ% y7 Œ# t        j                  $ r Y Œ>t        $ r Y ŒHt
        $ r6}|j                  dk7  r| j                  d|t        |«      |«       Y d}~Œ�d}~wt        $ r  | j                  d|t        |«      |«       Y Œ¬w xY w­w)zL
    Helper to cancel one or more tasks gracefully, logging exceptions.
    N)z"yield from wasn't used with futurez4Unhandled exception from %s after cancelling %s (%s))
ÚitemsÚcancelÚasyncioÚCancelledErrorÚRuntimeErrorÚAssertionErrorÚargsÚ	exceptionÚtypeÚ	Exception)ÚlogÚtasksÚnameÚtaskrN   s        r   Ú_cancelri   ¦   sÀ   è ø€ ð —k‘k“mò =‰
ˆˆdÙØà�‰Œð	=Ø�J‰Jñ=ð ùÜ×%Ñ%ò 	ÙÜò 	ñ Üò 	Að �v‰vÐ@Ò@Ø—‘ð (Ø)-¬t°D«z¸4ôAÿøäò 	=Ø�M‰Mð $Ø%)¬4°«:°tö=ð	=üs[   ‚*C­<²:³<·Cº<¼C ÁCÁC ÁCÁC Á#,BÂCÂ)C Â=CÂ?C Ã Cc                 óÔ   — t        | d«      r| j                  }n| j                  j                  }|j                  «       rt	        d«      ‚|j                  | j                  «       «      S )za
    Helps to cut boilerplate on async context
    managers that offer synchronous variants.
    Úloopz[You must use "async with" if the event loop is running (i.e. you are inside an "async def"))Úhasattrrk   Ú_clientÚ
is_runningr_   Úrun_until_completeÚ
__aenter__)Úselfrk   s     r   Ú_sync_enterrr   Ë   s\   € ô
 ˆt�VÔØ�y‰y‰à�|‰|× Ñ ˆà‡�ÔÜð>ó
ð 	
ð
 ×"Ñ" 4§?¡?Ó#4Ó5Ð5r   c                 óœ   — t        | d«      r| j                  }n| j                  j                  }|j                   | j                  |Ž «      S )Nrk   )rl   rk   rm   ro   Ú	__aexit__)rq   ra   rk   s      r   Ú
_sync_exitru   Þ   s@   € Üˆt�VÔØ�y‰y‰à�|‰|× Ñ ˆà×"Ñ" > 4§>¡>°4Ð#8Ó9Ð9r   c                 ó¤  — 	 | j                   dvrt        dj                  | «      «      ‚	 | j                  j
                  }d|v rt        j                  S d|v rt        j                  S d|v rt        j                  S d|v rt        j                  S t        dj                  | «      «      ‚# t        $ r t        dj                  | «      «      ‚w xY w)N)i‡VÔl   ¶9 l   F?ÓL iýò@iwy¡-l   ”]^ i¹aFl   —&4) z {} does not have any entity typez2{} is not a TLObject, cannot determine entity typeÚUserÚChatÚChannelÚSelf)
ÚSUBCLASS_OF_IDÚ	TypeErrorÚformatÚAttributeErrorÚ	__class__r	   r   r   r   r   )Úentityrg   s     r   Ú_entity_typer�   ç   sÝ   € ð]Ø× Ñ ð 	)
ñ 	
ô Ð>×EÑEÀfÓMÓNÐNð	
ð ×Ñ×$Ñ$€DØ��~Ü×ÑÐØ	�4‰Ü×ÑÐØ	�dÑ	Ü×"Ñ"Ð"Ø	�4‰Ü×ÑÐô Ð6×=Ñ=¸fÓEÓ
FÐFøô ò ]ÜÐL×SÑSÐTZÓ[Ó\Ð\ð]ús   ‚(B+ Â+$Cc                 ó.  — | j                  ddd¬«      } |j                  ddd¬«      }t        || z   «      j                  «       }t        | |z   «      j                  «       }t        ||z   «      j                  «       }||dd z   }|dd |z   |dd	 z   }||fS )
z7Generates the key data corresponding to the given nonceé   r   Tr   é    Né   é   é   )Úto_bytesr   Údigest)Úserver_nonceÚ	new_nonceÚhash1Úhash2Úhash3ÚkeyÚivs          r   Úgenerate_key_data_from_noncer‘     s¬   € à×(Ñ(¨¨X¸dÐ(ÓC€LØ×"Ñ" 2 x¸Ð"Ó=€IÜ�˜\Ñ)Ó*×1Ñ1Ó3€EÜ� 	Ñ)Ó*×1Ñ1Ó3€EÜ�˜YÑ&Ó'×.Ñ.Ó0€Eà
�%˜˜�*Ñ
€CØ	ˆr�"ˆ˜Ñ	 	¨"¨1 Ñ	-€BØ�ˆ7€Nr   c                   ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )Ú	TotalListaµ  
    A list with an extra `total` property, which may not match its `len`
    since the total represents the total amount of items *available*
    somewhere else, not the items *in this list*.

    Examples:

        .. code-block:: python

            # Telethon returns these lists in some cases (for example,
            # only when a chunk is returned, but the "total" count
            # is available).
            result = await client.get_messages(chat, limit=10)

            print(result.total)  # large number
            print(len(result))  # 10
            print(result[0])  # latest message

            for x in result:  # show the 10 messages
                print(x.text)

    c                 ó2   •— t        ‰| �  |i |¤Ž d| _        y )Nr   )ÚsuperÚ__init__Útotal)rq   ra   Úkwargsr   s      €r   r–   zTotalList.__init__8  s   ø€ Ü‰Ñ˜$Ð) &Ò)Øˆ�
r   c                 óf   — dj                  dj                  d„ | D «       «      | j                  «      S )Nú[{}, total={}]ú, c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr)   )Ústrr4   s     r   r-   z$TotalList.__str__.<locals>.<genexpr>>  s   è ø€ Ò+ ”c˜!—fÑ+ùr.   ©r}   r0   r—   ©rq   s    r   Ú__str__zTotalList.__str__<  s-   € Ø×&Ñ&Ø�I‰IÑ+ dÔ+Ó+¨T¯Z©Zó9ð 	9r   c                 óf   — dj                  dj                  d„ | D «       «      | j                  «      S )Nrš   r›   c              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr)   )Úreprr4   s     r   r-   z%TotalList.__repr__.<locals>.<genexpr>B  s   è ø€ Ò, !”d˜1—gÑ,ùr.   rž   rŸ   s    r   Ú__repr__zTotalList.__repr__@  s-   € Ø×&Ñ&Ø�I‰IÑ, tÔ,Ó,¨d¯j©jó:ð 	:r   )r	   r
   r   Ú__doc__r–   r    r¤   Ú__classcell__)r   s   @r   r“   r“   !  s   ø„ ñô,ò9ö:r   r“   c                   ó¨   — e Zd ZdZddœd„Zd„ Zd„ Zed„ «       Zed„ «       Z	d	„ Z
d
„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zy)Ú_FileStreama:  
    Proxy around things that represent a file and need to be used as streams
    which may or not need to be closed.

    This will handle `pathlib.Path`, `str` paths, in-memory `bytes`, and
    anything IO-like (including `aiofiles`).

    It also provides access to the name and file size (also necessary).
    N)Ú	file_sizec                óœ   — t        |t        «      rt        |j                  «       «      }|| _        d | _        || _        d | _        d | _        y r)   )	Ú
isinstancer   r�   ÚabsoluteÚ_fileÚ_nameÚ_sizeÚ_streamÚ_close_stream)rq   Úfiler©   s      r   r–   z_FileStream.__init__O  s@   € Ü�dœDÔ!Ü�t—}‘}“Ó'ˆDàˆŒ
ØˆŒ
ØˆŒ
ØˆŒØ!ˆÕr   c              ƒ   ó   K  — t        | j                  t        «      r€t        j                  j                  | j                  «      | _        t        j                  j                  | j                  «      | _        t        | j                  d«      | _
        d| _        | S t        | j                  t        «      rGt        | j                  «      | _        t        j                  | j                  «      | _
        d| _        | S t!        t#        | j                  dd «      «      st%        d«      ‚t#        | j                  dd «      | _        | j                  | _
        d| _        | j                  �€”t!        t#        | j                  dd «      «      r,t'        | j                  j)                  «       «      ƒ d {  –—† }nd}|rÓt'        | j                  j+                  «       «      ƒ d {  –—† }t'        | j                  j-                  dt        j.                  «      «      ƒ d {  –—†  t'        | j                  j+                  «       «      ƒ d {  –—† | _        t'        | j                  j-                  |t        j0                  «      «      ƒ d {  –—†  | S t2        j5                  d	«       t'        | j                  j7                  «       «      ƒ d {  –—† }t        |«      | _        t        j                  |«      | _
        d| _        | S 7 �ŒP7 �Œ#7 Œê7 ŒÁ7 Œƒ7 ŒC­w)
NÚrbTÚreadz,file description should have a `read` methodrg   FÚseekabler   zRCould not determine file size beforehand so the entire file will be read in-memory)r«   r­   r�   r   r   Úbasenamer®   Úgetsizer¯   Úopenr°   r±   Úbytesr?   ÚioÚBytesIOÚcallableÚgetattrr|   rY   r¶   ÚtellÚseekÚSEEK_ENDÚSEEK_SETÚ_logÚwarningrµ   )rq   r¶   ÚposÚdatas       r   rp   z_FileStream.__aenter__Y  s  è ø€ Ü�d—j‘j¤#Ô&ÜŸ™×)Ñ)¨$¯*©*Ó5ˆDŒJÜŸ™Ÿ™¨¯©Ó4ˆDŒJÜ §
¡
¨DÓ1ˆDŒLØ!%ˆDÔØˆKä�d—j‘j¤%Ô(Ü˜TŸZ™Z›ˆDŒJÜŸ:™: d§j¡jÓ1ˆDŒLØ!%ˆDÔØˆKäœ §
¡
¨F°DÓ9Ô:ÜÐJÓKÐKä˜TŸZ™Z¨°Ó6ˆŒ
Ø—z‘zˆŒØ"ˆÔà�:‰:ÑÜœ §
¡
¨J¸Ó=Ô>Ü!-¨d¯j©j×.AÑ.AÓ.CÓ!D×D‘à �áÜ(¨¯©¯©Ó):Ó;×;�Ü" 4§:¡:§?¡?°1´b·k±kÓ#BÓC×CÐCÜ#/°·
±
·±Ó0AÓ#B×B�”
Ü" 4§:¡:§?¡?°3¼¿¹Ó#DÓE×EÐEð ˆô —‘ð2ô3ô *¨$¯*©*¯/©/Ó*;Ó<×<�Ü  ›Y�”
Ü!Ÿz™z¨$Ó/�”Ø%)�Ô"àˆð' Eùð
 <ùØCøØBøØEøð =úsm   ‚F.LÆ0L Æ1/LÇ LÇ!:LÈLÈ*LÉLÉ?LÊL
ÊALËLË	8LÌLÌLÌLÌ
LÌLc              ƒ   óš   K  — | j                   r9| j                  r,t        | j                  j                  «       «      ƒ d {  –—†  y y y 7 Œ­wr)   )r±   r°   rY   Úclose)rq   Úexc_typeÚexc_valÚexc_tbs       r   rt   z_FileStream.__aexit__…  s;   è ø€ Ø×Ò $§,¢,Ü˜tŸ|™|×1Ñ1Ó3Ó4×4Ñ4ð #/ÐØ4ús   ‚?AÁA	ÁAc                 ó   — | j                   S r)   )r¯   rŸ   s    r   r©   z_FileStream.file_size‰  ó   € à�z‰zÐr   c                 ó   — | j                   S r)   )r®   rŸ   s    r   rg   z_FileStream.name�  rÍ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   rµ   ©rq   ra   r˜   s      r   rµ   z_FileStream.read’  ó   € Ð,=¨D¯L©L×,=Ñ,=¸tÐ,NÀvÑ,NÐ%Nr   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚreadintorÐ   s      r   rÓ   z_FileStream.readinto“  ó   € Ð0E°·±×0EÑ0EÀtÐ0VÈvÑ0VÐ)Vr   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚwriterÐ   s      r   rÖ   z_FileStream.write”  ó   € Ð-?¨T¯\©\×-?Ñ-?ÀÐ-PÈÑ-PÐ&Pr   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚfilenorÐ   s      r   rÙ   z_FileStream.fileno•  ó   € Ð.A¨d¯l©l×.AÑ.AÀ4Ð.RÈ6Ñ.RÐ'Rr   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚflushrÐ   s      r   rÜ   z_FileStream.flush–  r×   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚisattyrÐ   s      r   rÞ   z_FileStream.isatty—  rÚ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚreadablerÐ   s      r   rà   z_FileStream.readable˜  rÔ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚreadlinerÐ   s      r   râ   z_FileStream.readline™  rÔ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   Ú	readlinesrÐ   s      r   rä   z_FileStream.readlinesš  s   € Ð1G°·±×1GÑ1GÈÐ1XÐQWÑ1XÐ*Xr   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   rÀ   rÐ   s      r   rÀ   z_FileStream.seek›  rÑ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   r¶   rÐ   s      r   r¶   z_FileStream.seekableœ  rÔ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   r¿   rÐ   s      r   r¿   z_FileStream.tell�  rÑ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚtruncaterÐ   s      r   ré   z_FileStream.truncatež  rÔ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   ÚwritablerÐ   s      r   rë   z_FileStream.writableŸ  rÔ   r   c                 ó:   —  | j                   j                  |i |¤ŽS r)   )r°   Ú
writelinesrÐ   s      r   rí   z_FileStream.writelines   s   € Ð2I°$·,±,×2IÑ2IÈ4Ð2ZÐSYÑ2ZÐ+Zr   c                  ó   — y r)   r   rÐ   s      r   rÈ   z_FileStream.close¦  s   € Ør   )r	   r
   r   r¥   r–   rp   rt   Úpropertyr©   rg   rµ   rÓ   rÖ   rÙ   rÜ   rÞ   rà   râ   rä   rÀ   r¶   r¿   ré   rë   rí   rÈ   r   r   r   r¨   r¨   E  sy   „ ñð +/ô "ò*òX5ð ñó ðð ñó ðò OÚVÚPÚRÚPÚRÚVÚVÚXÚNÚVÚNÚVÚVÚZór   r¨   c                  óì   — 	 t        j                  «       S # t        $ rT 	 t        j                  «       cY S # t        $ r0 t        j                  «       } t        j
                  | «       | cY cY S w xY ww xY wr)   )r]   Úget_running_loopr_   Úget_event_loopÚnew_event_loopÚset_event_loop)rk   s    r   rñ   rñ   «  si   € ðÜ×'Ñ'Ó)Ð)øÜò ð	Ü×)Ñ)Ó+Ò+øÜò 	Ü×)Ñ)Ó+ˆDÜ×"Ñ" 4Ô(ØŒKð	úðús)   ‚ –	A3 6³A3¶4A/Á*A3Á.A/Á/A3)T)%r¥   r]   r»   Úenumr   r1   rV   ÚloggingÚ	functoolsÚsysÚpathlibr   Úhashlibr   ÚEnumr   Ú	getLoggerr	   rÃ   r   r$   r8   r<   rA   rO   rT   rY   ri   rr   ru   r�   r‘   Úlistr“   ÚIOBaser¨   rñ   r   r   r   ú<module>rÿ      s¿   ðÙ <Û Û 	Û Û 	Û Û Û Û Û 
Ý Ý ô�$—)‘)ô ð €w×Ñ˜Ó"€óLò
+òòCð -1ô òGóTò&ò"=òJ6ò&:ò!GòP
ô$!:�ô !:ôHb�"—)‘)ô bóL	r   