+
    kHàj—X  ã                  ój  € R t ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RI	t	^ RI
Ht ^ RIHtHtHtHtHt ^ RIHtHt ^ RIHt ^ RIHtHtHt ]P6                  ! R4      tR	tR
tRtRt R t!R t"R!t#R"t$]$t%R#t&^dt'R0t(R$t)R%t*R]!RR3R]"RR3R]#RR3/t+RRRR/R R llt,R R lt-R R lt. ! R R4      t/R# )&zŠWeCom media mixin: inbound attachment caching; outbound chunked ``aibot_upload_media_*`` upload then
native send (image/video/voice/file).)ÚannotationsN)ÚPath)ÚAnyÚDictÚListÚOptionalÚTuple)ÚunquoteÚurlparse)Út)Ú
SendResultÚcache_document_from_bytes_asyncÚcache_image_from_bytes_asynczplugins.platforms.wecom.adapterÚaibot_send_msgÚaibot_upload_media_initÚaibot_upload_media_chunkÚaibot_upload_media_finishú	audio/amrÚimageÚvideoÚvoicezplatform.wecom.media.kind_imageÚ10MBzplatform.wecom.media.kind_videozplatform.wecom.media.kind_voiceÚ2MBÚrejectÚ	downgradec               ó(   € V ^8„  d   QhRRRRRRRR/# )é   Ú
final_typeÚstrr   úOptional[str]r   Úreturnúdict[str, Any]© )Úformats   "ÚB/home/ubuntu/.hermes/hermes-agent/plugins/platforms/wecom/media.pyÚ__annotate__r%   .   s/   € ÷ añ a˜cð a¨mð aÈ}ð aÐhvñ aó    c          
     ó"   € R V RVRJRVRVRJRV/# )r   ÚrejectedNÚreject_reasonÚ
downgradedÚdowngrade_noter"   )r   r   r   s   &$$r$   Ú_size_verdictr,   .   sC   € Ø˜* j°&ÀÐ2DÀoÐW]Ð_kÐmvð  Cð  nCð  EUð  W`ð  að  ar&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú	containerr!   Úkeyr   r    r"   )r#   s   "r$   r%   r%   2   s&   € ÷ Nñ N˜ð N¨Sð N°^ñ Nr&   c                ór   € \        V P                  V4      \        4      '       d   V P                  V4      # / # ©N)Ú
isinstanceÚgetÚdict)r.   r/   s   &&r$   Ú_dict_atr5   2   s+   € Ü!+¨I¯M©M¸#Ó,>Ä×!EÒ!Eˆ9�=‰=˜ÓÐMÈ2ÐMr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Ú
media_typer   Úmedia_idr    r!   r"   )r#   s   "r$   r%   r%   6   s&   € ÷ Gñ G˜Cð G¨3ð G°>ñ Gr&   c                ó   € R W RV//# )Úmsgtyper8   r"   )r7   r8   s   &&r$   Ú_media_bodyr;   6   s   € Ø�z°
¸HÐ/EÐFÐFr&   c                  óø  € ] tR t^:tRtR R ltR R ltR R lt]R R	 l4       t	]R
 R l4       t
]R:R R ll4       t]R R l4       t]R R l4       t]R R l4       tR R lt]R R l4       t]R R l4       t]R R l4       t]R;R R ll4       t]R R  l4       tR;R! R" lltR;R# R$ lltR% R& ltR' R( ltR) R* ltR;R+ R, lltR<R- R. lltR<R/ R0 lltR=R1 R2 lltR<R3 R4 lltR=R5 R6 lltR=R7 R8 llt R9t!R# )>ÚWeComMediaMixinz]Media helpers mixed into WeComAdapter (uses its transport, req_id cache and stream registry).c               ó    € V ^8„  d   QhRRRR/# )r   Úbodyr!   r    ztuple[list[str], list[str]]r"   )r#   s   "r$   r%   ÚWeComMediaMixin.__annotate__=   s   € ÷ >ñ >¨ð >Ð<Wñ >r&   c              ƒ  	ól  a"  € . o\        VP                  R 4      ;'       g    R4      P                  4       pR V3R llpVR8X  d§   \        VR4      p\	        VP                  R4      \
        4      '       d   VP                  R4      M.  F]  p\	        V\        4      '       g   K  \        VP                  R 4      ;'       g    R4      P                  4       R8X  g   KT  V! RV4       K_  	  MmV! RV4       VR8X  d
   V! RV4       VR8X  dN   \	        VP                  R4      \        4      '       d)   V! RVR,          4      ;'       g    V! RVR,          4       \        VR	4      p\        VP                  R 4      ;'       g    R4      P                  4       pVR9   d	   V! Wv4       S UU	u. uF  w  r‰V P                  W‰4      G R
j  x€L
 NK   	  up	p U
u. uF  qª'       g   K  V
NK  	  pp
V U
u. uF  qª^ ,          NK  	  up
V U
u. uF  qª^,          NK  	  up
3#  LTu up	pi u up
i u up
i u up
i 5i)r:   Ú c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úkindr   r.   r!   r    Úboolr"   )r#   s   "r$   r%   Ú4WeComMediaMixin._extract_media.<locals>.__annotate__A   s!   € ÷ 	ñ 	�sð 	 ~ð 	¸$ñ 	r&   c                óˆ   <€ \        VP                  V 4      \        4      pV'       d   SP                  WV ,          34       V# r1   )r2   r3   r4   Úappend)rD   r.   ÚfoundÚrefss   && €r$   Ú_refÚ,WeComMediaMixin._extract_media.<locals>._refA   s3   ø€ Ü˜yŸ}™}¨TÓ2´DÓ9ˆEßØ—‘˜T¨T¥?Ð3Ô4ØˆLr&   ÚmixedÚmsg_itemr   ÚfileÚappmsgÚquoteN)r   rO   )r   r3   Úlowerr5   r2   Úlistr4   Ú_cache_media)Úselfr?   r:   rK   rM   ÚitemrQ   Ú
quote_typerD   ÚrefÚcÚcachedrJ   s   &&          @r$   Ú_extract_mediaÚWeComMediaMixin._extract_media=   sÝ  øé € Ø13ˆÜ�d—h‘h˜yÓ)×/Ð/¨RÓ0×6Ñ6Ó8ˆ÷	ð 	ð �gÔÜ˜T 7Ó+ˆEÜ1;¸E¿I¹IÀjÓ<QÔSW×1XÒ1X˜Ÿ	™	 *Ô-Ð^`Ò`�Ü˜d¤D×)Ô)¬c°$·(±(¸9Ó2E×2KÐ2KÈÓ.L×.RÑ.RÓ.TÐX_Ö._Ù˜ $Ö'ò añ �˜$ÔØ˜&Ô Ù�V˜TÔ"Ø˜(Ô"¤z°$·(±(¸8Ó2DÄd×'KÒ'KÙ�V˜T (�^Ó,×MÐM±°W¸dÀ8½nÓ0MøÜ˜˜wÓ'ˆÜ˜Ÿ™ 9Ó-×3Ð3°Ó4×:Ñ:Ó<ˆ
ØÐ*Ô*Ù�Ô#ÙRVÔWÑRVÁYÀT D×$5Ñ$5°dÓ$@×@Ò@ÑRVÓWÓ]ÑW˜Ó[\—!�!ÑWˆÐ]Ù$Ó%™f˜�!—�™fÑ%±fÓ'=±f°¨!¯¨±fÑ'=Ð=Ð=ñ AùÓWùÒ]ùÚ%ùÒ'=ùss   ƒBH4Â'H4ÃH4Ã A)H4Å
9H4Æ)H4Æ-HÇHÇ	HÇH4Ç	H%Ç%H%Ç+H4Ç1H*ÈH4ÈH/ÈH4ÈHÈH4c               ó$   € V ^8„  d   QhRRRRRR/# )r   rD   r   Úmediar!   r    úOptional[tuple[str, str]]r"   )r#   s   "r$   r%   r@   Y   s'   € ÷ nñ n sð n°>ð nÐF_ñ nr&   c              ƒ  ó’  "  € VP                  R4      '       d©    V P                  VR,          4      p\        TP                  R4      ;'       g    TP                  R4      ;'       g    R4      pT P                  YT P                  T4      RT\        P                  ! T4      ^ ,          ;'       g    RR4      G Rj  x€L
 # \        VP                  R	4      ;'       g    R4      P                  4       pV'       g   R# \        \        VP                  R
4      ;'       g    R4      P                  4       4      p RpV P                  V\        R7      G Rj  x€L
 w  r9RpV'       d   V P                  W74      MTp\        T	P                  R4      ;'       g    R4      P!                  R^4      ^ ,          P                  4       ;'       g    Rp
T P#                  YjT P                  T4      R7      pT
P%                  R4      '       d   T
MRpT P                  YY¼T P'                  YiP                  R4      T
4      T
RT 24      G Rj  x€L
 #   \         d-   p\        P	                  RT P
                  Y4        Rp?R# Rp?ii ; i ELÆ EL0  \         d/   p\        P	                  RT P
                  XYT4        Rp?R# Rp?ii ; i L€5i)zNCache an inbound image/file reference (inline base64 or URL) to local storage.Úbase64z)[%s] Failed to decode %s base64 media: %sNÚfilenameÚnameÚ
wecom_filerB   úapplication/octet-streamÚurlÚaeskeyÚdownload©Ú	max_bytesÚdecryptz [%s] Failed to %s %s from %s: %súcontent-typeÚ;©Úfallbackúimage/úcontent-dispositionz from )r3   Ú_decode_base64Ú	ExceptionÚloggerÚdebugrc   r   Ú_store_mediaÚ_detect_image_extÚ	mimetypesÚ
guess_typeÚstripr	   Ú_download_remote_bytesÚABSOLUTE_MAX_BYTESÚ_decrypt_file_bytesÚsplitÚ_guess_extensionÚ
startswithÚ_guess_filename)rU   rD   r^   ÚrawÚexcrb   rf   Úaes_keyÚstepÚheadersÚcontent_typeÚextÚ
image_mimes   &&&          r$   rT   ÚWeComMediaMixin._cache_mediaY   s£  é € à�9‰9�X×ÒðØ×)Ñ)¨%°­/Ó:�ô ˜5Ÿ9™9 ZÓ0×UÐU°E·I±I¸fÓ4E×UÐUÈÓVˆHØ×*Ñ*¨4°d×6LÑ6LÈSÓ6QÐSUÐW_Ôaj×auÒauÐv~Óað  ABõ  bC÷  bað  bað  Gað  ceó  f÷  fð  fÜ�%—)‘)˜EÓ"×(Ð( bÓ)×/Ñ/Ó1ˆßÙäœ#˜eŸi™i¨Ó1×7Ð7°RÓ8×>Ñ>Ó@ÓAˆð	ØˆDØ!%×!<Ñ!<¸SÔL^Ð!<Ó!_×_‰LˆCØˆDß<C�$×*Ñ*¨3Ô8ÈˆCô ˜7Ÿ;™; ~Ó6×<Ð<¸"Ó=×CÑCÀCÈÓKÈAÕN×TÑTÓV×tÐtÐZtˆØ×#Ñ# CÀ×@VÑ@VÐWZÓ@[Ð#Ó\ˆð &2×%<Ñ%<¸X×%FÒ%F‘\ÈBˆ
Ø×&Ñ& t°#À4×CWÑCWÐX[×]hÑ]hÐi~Ó]ð  BNó  DOð  Q]ð  agð  hkð  glð  _mó  n÷  nð  	nøô/ ô Ü—‘ÐHÈ$Ï)É)ÐUYÔ_Ýûðúò fò `øô ô 	Ü�L‰LÐ;¸T¿Y¹YÈÈdÐY\Ô]Ýûð	úñ nùs³   ‚K›I	 ³KÁKÁ)AKÂ2KÂ=JÂ> KÃKÃ<#KÄ KÄ:J	 ÅJÅ#J	 Å:KÆ2KÇ
A:KÉKÉKÉ	J É!I;É5KÉ;J Ê KÊJ	 Ê	KÊ#J=Ê7KÊ=KËKc               ó   € V ^8„  d   QhRR/# )r   r    r_   r"   )r#   s   "r$   r%   r@   w   s   € ÷ ñ Ð\uñ r&   c              ƒ  ó   "  € VR8w  d   \        W%4      G Rj  x€L
 V3#  \        W#4      G Rj  x€L
 T;'       g    V P                  VRR7      3#  L7 L#  \         d-   p\        P                  RT P                  Yx4        Rp?R# Rp?ii ; i5i)zRCache bytes as an image (``kind == "image"``) or a document; returns (path, mime).r   Nz
image/jpegrn   z#[%s] Rejected non-image bytes%s: %s)r   r   Ú_mime_for_extÚ
ValueErrorrt   Úwarningrc   )	rU   rD   r‚   rˆ   r‰   rb   Údoc_mimeÚoriginrƒ   s	   &&&&&&&& r$   rv   ÚWeComMediaMixin._store_mediaw   s�   é € à�7Œ?Ü8¸ÓG×GÈÐQÐQð	Ü5°cÓ?×?À×A}ÐA}Èt×OaÑOaÐbeÐp|ÐOaÓO}Ð}Ð}ñ Há?øÜô 	Ü�N‰NÐ@À$Ç)Á)ÈVÔYÝûð	üsM   ‚B˜A™B A ®A¯A »A ÁBÁA ÁBÁ!BÂ BÂBÂBc               ó    € V ^8„  d   QhRRRR/# )r   Údatar   r    Úbytesr"   )r#   s   "r$   r%   r@   ‚   s   € ÷ @ñ @˜Sð @ Uñ @r&   c                	óx   € \         P                  ! V P                  R ^4      R,          P                  4       4      # )Ú,éÿÿÿÿ)ra   Ú	b64decoder~   rz   )r”   s   &r$   rr   ÚWeComMediaMixin._decode_base64�   s,   € ä×Ò §
¡
¨3°Ó 2°2Õ 6× <Ñ <Ó >Ó?Ð?r&   c               ó    € V ^8„  d   QhRRRR/# )r   r”   r•   r    r   r"   )r#   s   "r$   r%   r@   †   s   € ÷ Zñ Z ð Z¨#ñ Zr&   c                	óŠ   a € S P                  R 4      '       d   S R,          R8X  d   RMRp\        V 3R l\         4       V4      # )s   RIFF:é   é   Ns   WEBPz.webpú.jpgc              3  ó^   <"  € T F"  w  rSP                  V4      '       g   K  Vx € K$  	  R # 5ir1   ©r€   )Ú.0Úmagicrˆ   r”   s   &  €r$   Ú	<genexpr>Ú4WeComMediaMixin._detect_image_ext.<locals>.<genexpr>ˆ   s    øé € ÐR©<™Z˜U¸4¿?¹?È5×;Q—S’S«<ùó   ƒ-£
-)r€   ÚnextÚ_IMAGE_MAGIC)r”   Úwebps   f r$   rw   Ú!WeComMediaMixin._detect_image_ext…   s8   ø€ àŸ/™/¨'×2Ò2°t¸DµzÀWÔ7L‰wÐRXˆÜÔR­<ÓRÐTXÓYÐYr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   rˆ   r   ro   r    r"   )r#   s   "r$   r%   r@   ‹   s!   € ÷ >ñ >˜3ð >¨#ð >Èsñ >r&   c                	ó^   € \         P                  P                  V P                  4       V4      # r1   )rx   Ú	types_mapr3   rR   )rˆ   ro   s   &&r$   r�   ÚWeComMediaMixin._mime_for_extŠ   s!   € ä×"Ñ"×&Ñ& s§y¡y£{°HÓ=Ð=r&   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rf   r   r‡   ro   r    r"   )r#   s   "r$   r%   r@   �   s.   € ÷ Bñ B˜cð B°ð BÀð BÈñ Br&   c                	óÌ   € V'       d   \         P                  ! V4      MR pVR8X  d   R pT;'       g3    \        \        V 4      P                  4      P
                  ;'       g    T# )Nú.bin)rx   Úguess_extensionr   r
   ÚpathÚsuffix)rf   r‡   ro   rˆ   s   &&& r$   r   Ú WeComMediaMixin._guess_extensionŽ   sP   € ÷ :FŒi×'Ò'¨Ô5È4ˆØ�&Œ=ØˆCØ×AÐA”dœ8 C›=×-Ñ-Ó.×5Ñ5×AÐA¸ÐAr&   c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   rf   r   Úcontent_dispositionr   r‡   r    r"   )r#   s   "r$   r%   r@   ˜   s0   € ÷ eñ e˜Sð e°}ð eÐTWð eÐ\_ñ er&   c                	ó4  € \         P                  ! R T;'       g    R4      pV'       d   VP                  ^4      # \        \	        V 4      P
                  4      P                  ;'       g    RpRV9   d   V# T \        P                  ! V4      ;'       g    R 2# )zfilename="?([^";]+)"?rB   ÚdocumentÚ.r±   )	ÚreÚsearchÚgroupr   r
   r³   rc   rx   r²   )rf   r·   r‡   Úmatchrc   s   &&&  r$   r�   ÚWeComMediaMixin._guess_filename—   s~   € ä—	’	Ð2Ð4G×4MÐ4MÈ2ÓNˆßØ—;‘;˜q“>Ð!Ü”H˜S“M×&Ñ&Ó'×,Ñ,×:Ð:°
ˆØ˜d”{ˆtÐd¨4¨&´×1JÒ1JÈ<Ó1X×1bÐ1bÐ\bÐ0cÐ(dÐdr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úencrypted_datar•   r„   r   r    r"   )r#   s   "r$   r%   r@       s!   € ÷ $ñ $¨Eð $¸Cð $ÀEñ $r&   c                	óV  a	€ V '       g   \        R 4      hV'       g   \        R4      h\        P                  ! VR^\        V4      ^,          ,
          ^,          ,          ,           4      p\        V4      ^ 8w  d   \        R\        V4       24      h ^ RIHpHpHp T! TP                  T4      TP                  TR,          4      4      P                  4       pTP                  T 4      TP                  4       ,           pTR,          o	S	^8  g   S	^ 8”  g   S	\        T4      8”  d   \        RS	 24      h\        ;QJ d#    T	3R	 lTS	) R  4       F  '       g   K   R
M	  RM! T	3R	 lTS	) R  4       4      '       d   \        R4      hTRS	)  #   \         d   p\        R4      ThRp?ii ; i)zencrypted_data is emptyzaes_key is requiredÚ=z5Invalid WeCom AES key length: expected 32 bytes, got )ÚCipherÚ
algorithmsÚmodesz3cryptography is required for WeCom media decryptionN:Né   NzInvalid PKCS#7 padding value: c              3  ó,   <"  € T F	  qS8g  x € K  	  R # 5ir1   r"   )r¢   ÚbyteÚpad_lens   & €r$   r¤   Ú6WeComMediaMixin._decrypt_file_bytes.<locals>.<genexpr>±   s   øé € Ð@Ñ+? 4�wŽÓ+?ùs   ƒTFz.Invalid PKCS#7 padding: padding bytes mismatchr˜   )rŽ   ra   r™   ÚlenÚ&cryptography.hazmat.primitives.ciphersrÄ   rÅ   rÆ   ÚImportErrorÚRuntimeErrorÚAESÚCBCÚ	decryptorÚupdateÚfinalizeÚany)
rÁ   r„   r/   rÄ   rÅ   rÆ   rƒ   rÒ   Ú	decryptedrÊ   s
   &&       @r$   r}   Ú#WeComMediaMixin._decrypt_file_bytesŸ   sp  ø€ çÜÐ6Ó7Ð7ßÜÐ2Ó3Ð3Ü×Ò˜w¨°´S¸³\ÀAÕ5EÕ1EÈÕ0JÕ)KÕKÓLˆÜˆs‹8�rŒ>ÜÐTÔUXÐY\ÓU]ÐT^Ð_Ó`Ð`ð	_ßXÑXñ ˜:Ÿ>™>¨#Ó.°·	±	¸#¸c½(Ó0CÓD×NÑNÓPˆ	Ø×$Ñ$ ^Ó4°y×7IÑ7IÓ7KÕKˆ	Ø˜B•-ˆØ�QŒ;˜' Bœ,¨'´C¸	³NÔ*BÜÐ=¸g¸YÐGÓHÐHß‹3Ô@¨9°g°X°YÑ+?Ó@�3�3Š3Ô@¨9°g°X°YÑ+?Ó@×@Ò@ÜÐMÓNÐNØ˜˜7˜(Ð#Ð#øô ô 	_ÜÐTÓUÐ[^Ð^ûð	_ús   Â
F ÆF(ÆF#Æ#F(c               ó$   € V ^8„  d   QhRRRRRR/# )r   rf   r   rj   Úintr    ztuple[bytes, dict[str, str]]r"   )r#   s   "r$   r%   r@   µ   s"   € ÷ &ñ &°ð &Àð &ÐHdñ &r&   c           
   ƒ  	óò  "  € ^ RI Hp ^ RIHpHp ^ RIHp V! V4      '       g   \        RVR,           24      hVP                  '       g   \        R4      hV P                  ;'       g    V! RRR	V./R
7      p VP                  RVRRRR/R7      ;_uu_4       GRj  x€L
 pVP                  4        VP                  P                  4        U	U
u/ uF  w  ršV	P                  4       V
bK  	  pp	p
VP!                  R4      pV'       dB   VP#                  4       '       d,   \%        V4      V8”  d   \        R\%        V4       RV R24      h\'        4       pVP)                  4         Rj  x€L
  pVP+                  V4       \-        V4      V8”  g   K-  \        R\-        V4       RV R24      h ELu up
p	i  LLDM\/        T4      T3uuRRR4      GRj  x€L 
  YpP                  Jd   TP1                  4       G Rj  x€L 
  # #   + GRj  x€L 
 '       g   i     M; i YpP                  Jd   TP1                  4       G Rj  x€L 
  R# R#   YpP                  Jd   TP1                  4       G Rj  x€L 
  i i ; i5i)é    )Ússrf_redirect_guard)Úcreate_ssrf_safe_async_clientÚis_safe_url)Úadapterz&Blocked unsafe URL (SSRF protection): :NéP   Nz*httpx is required for WeCom media downloadg      >@TÚresponse)ÚtimeoutÚfollow_redirectsÚevent_hooksÚGETz
User-AgentzHermesAgent/1.0ÚAcceptz*/*)r†   Nzcontent-lengthz"Remote media exceeds WeCom limit: z	 bytes > z bytesz4Remote media exceeds WeCom limit while downloading: )Úgateway.platforms.baserÜ   Útools.url_safetyrÝ   rÞ   Úplugins.platforms.wecomrß   rŽ   ÚHTTPX_AVAILABLErÏ   Ú_http_clientÚstreamÚraise_for_statusr†   ÚitemsrR   r3   ÚisdigitrÙ   Ú	bytearrayÚaiter_bytesÚextendrÌ   r•   Úaclose)rU   rf   rj   rÜ   rÝ   rÞ   Ú_adapter_modÚclientrá   r/   Úvaluer†   Úcontent_lengthr”   Úchunks   &&&            r$   r{   Ú&WeComMediaMixin._download_remote_bytesµ   sU  é € Ý>ßOÝCÙ˜3×ÒÜÐEÀcÈ#ÅhÀZÐPÓQÐQØ×+×+Ð+ÜÐKÓLÐLØ×"Ñ"÷  Zð  ZÑ&CÈDÐcgð  wAð  DWð  CXð  vYô  'Zˆð	&Ø—}‘} U¨C¸,ÐHYÐ[cÐejÐ9k�}×l×lÔlÐpxØ×)Ñ)Ô+Ø@H×@PÑ@P×@VÑ@VÔ@XÔYÑ@X±*°#˜3Ÿ9™9›;¨Ò-Ñ@X�ÑYØ!(§¡Ð-=Ó!>�ß! n×&<Ñ&<×&>Ò&>Ä3À~ÓCVÐYbÔCbÜ$Ð'IÌ#ÈnÓJ]ÐI^Ð^gÐhqÐgrÐrxÐ%yÓzÐzÜ “{�Ø#+×#7Ñ#7Ô#9÷ Gð G˜%Ø—K‘K Ô&Ü˜4“y 9Ö,Ü(Ð+_Ô`cÐdhÓ`iÐ_jÐjsÐt}Ðs~ð  Eð  *Fó  Gð  Gò mùãYñ
GÐ#9ô ˜T“{ GÐ+÷ m×lÒlð ×.Ñ.Ó.Ø—m‘m“o×%Ò%ð /÷ m×l×lÐlúÐlð ×.Ñ.Ó.Ø—m‘m“o×%Ó%ñ /øˆv×.Ñ.Ó.Ø—m‘m“o×%Ò%ð /üsß   ‚A	I7ÁI7Á*I7Á:$I	 ÂF+ÂI	 Â".H ÃF.
Ã,1H ÄAH Å#F6Å'F4
Å(F6Å+ H ÆH Æ+I	 Æ.H Æ4F6Æ6H ÇI	 ÇGÇI	 Ç"I7Ç8G;Ç9I7È H	ÈH	È
H	ÈH	ÈI	 È"I7È?IÉ 	I7É	#I4É,I/É-I4É4I7c               ó    € V ^8„  d   QhRRRR/# )r   rb   r   r    r"   )r#   s   "r$   r%   r@   Ð   s   € ÷ Mñ M 3ð M¨3ñ Mr&   c                	ó¤   € \         P                  ! V 4      ^ ,          ;'       g-    \        V 4      P                  P	                  4       R8X  d   R# R# )rÛ   z.amrr   re   )rx   ry   r   r´   rR   )rb   s   &r$   Ú_guess_mime_typeÚ WeComMediaMixin._guess_mime_typeÏ   sQ   € ä×#Ò# HÓ-¨aÕ0÷  Mð  MÄDÈÃN×DYÑDY×D_ÑD_ÓDaÐekÔDk°[ð  	Mð  rLð  	Mr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r‡   r   rb   r    r"   )r#   s   "r$   r%   r@   Ô   s&   € ÷ Yñ Y¨cð Y¸Sð YÀSñ Yr&   c                	óÞ   € \        T ;'       g    R 4      P                  R^4      ^ ,          P                  4       P                  4       pV'       d
   VR9  d   V# \        P                  V4      # )rB   rm   >   ú
text/plainre   )r   r~   rz   rR   r=   rü   )r‡   rb   Ú
normalizeds   && r$   Ú_normalize_content_typeÚ'WeComMediaMixin._normalize_content_typeÓ   sp   € ä˜×+Ð+¨Ó,×2Ñ2°3¸Ó:¸1Õ=×CÑCÓE×KÑKÓMˆ
ß'¨JÐ>hÔ,hˆzð  	YÔn}÷  oOñ  oOð  PXó  oYð  	Yr&   c               ó    € V ^8„  d   QhRRRR/# )r   r‡   r   r    r"   )r#   s   "r$   r%   r@   Ù   s   € ÷ Zñ Z¨sð Z°sñ Zr&   c                	ó¬   a€ \        T ;'       g    R 4      P                  4       P                  4       oSR8X  d   R# \        V3R l\         4       R4      # )rB   zapplication/oggr   c              3  ó^   <"  € T F"  w  rSP                  V4      '       g   K  Vx € K$  	  R # 5ir1   r¡   )r¢   ÚprefixrD   Ú	mime_types   &  €r$   r¤   Ú;WeComMediaMixin._detect_wecom_media_type.<locals>.<genexpr>Û   s:   øé € ð  DQÑ]oÉ\ÈVÐs|÷  tHñ  tHð  IO÷  tPÇDÂDÓ]oùr¦   rO   )r   rz   rR   r§   Ú_MIME_PREFIX_KINDS)r‡   r  s   &@r$   Ú_detect_wecom_media_typeÚ(WeComMediaMixin._detect_wecom_media_typeØ   s^   ø€ ä˜×*Ð*¨Ó+×1Ñ1Ó3×9Ñ9Ó;ˆ	Ø#Ð'8Ô8ˆwð  	Z¼dô  DQÕ]oó  DQð  SYó  ?Zð  	Zr&   Nc               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Ú	file_sizerÙ   Údetected_typer   r‡   r   r    r!   r"   )r#   s   "r$   r%   r@   Þ   s*   € ÷ .ñ .¨3ð .¸sð .ÐR_ð .Ðkyñ .r&   c           
     	ó  € V R,          p\        T;'       g    R4      P                  4       p\        T;'       g    R4      P                  4       P                  4       pV \        8”  d   \	        V\        RVR R7      R7      # VR8X  d,   V'       d$   V\        9  d   \	        R\        RVR	7      R
7      # \        P                  VR4      w  rgpVe,   W8”  d&   \	        R\        R\        V4      VR VR7      R
7      # \	        V4      # )i   rO   rB   z#platform.wecom.media.file_too_largez.2f)Úsize_mb)r   r   z,platform.wecom.media.voice_format_downgraded)r‡   )r   z$platform.wecom.media.size_downgraded)Úlabelr  Úcapi   )NrB   rB   )	r   rR   rz   r|   r,   r   ÚVOICE_SUPPORTED_MIMESÚ_TYPE_LIMITSr3   )	r  r  r‡   Úfile_size_mbÚnormalized_typeÚnormalized_content_typerj   Ú	label_keyr  s	   &&&      r$   Ú_apply_file_size_limitsÚ'WeComMediaMixin._apply_file_size_limitsÝ   s  € à  KÕ0ˆÜ˜m×5Ð5¨vÓ6×<Ñ<Ó>ˆÜ"% l×&8Ð&8°bÓ"9×"?Ñ"?Ó"A×"GÑ"GÓ"IÐØÔ)Ô)Ü  ¼Ð;`ÐmyÐz}Ðl~ô  :Aô  Bð  BØ˜gÔ%×*AÐF]ÔezÔFzÜ  ´1Ð5cð  sJô  4Kô  Lð  LÜ$0×$4Ñ$4°_ÀnÓ$UÑ!ˆ	˜cØÒ  YÔ%:Ü  ´1Ð5[Ü;<¸Y»<ÐT`ÐadÐSeÐloô4qô rð rä˜_Ó-Ð-r&   c               ó    € V ^8„  d   QhRRRR/# )r   Úmedia_sourcer   r    rE   r"   )r#   s   "r$   r%   r@   í   s   € ÷ Mñ M cð M¨dñ Mr&   c                	óX   € \        \        T ;'       g    R 4      4      P                  R9   # )rB   >   ÚhttpÚhttps)r
   r   Úscheme)r  s   &r$   Ú_looks_like_urlÚWeComMediaMixin._looks_like_urlì   s&   € äœ˜L×.Ð.¨BÓ/Ó0×7Ñ7Ð;LÑLÐLr&   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  r   Ú	file_namer   r    ztuple[bytes, str, str]r"   )r#   s   "r$   r%   r@   ð   s'   € ÷ gñ g°sð gÀ}ð gÐ`vñ gr&   c              ƒ  	óÆ  "  € \        T;'       g    R 4      P                  4       pV'       g   \        R4      h\        P                  ! RV4      '       d   \        RV 24      h\        V4      pVP                  R
9   d�   V P                  V\        R7      G Rj  x€L
 w  rVT;'       g2    V P                  W6P                  R4      VP                  RR 4      4      pWPP                  VP                  RR 4      V4      V3# \        VP                  R8X  d   \        VP                  4      MT4      P                  4       pVP!                  4       '       d   TM)\        P"                  ! 4       V,          P%                  4       pVP'                  4       '       g   \)        R	V 24      hT;'       g    VP*                  pVP-                  4       V P                  R V4      V3#  ELD5i)rB   zmedia source is requiredz	<[^>\n]+>z:Media placeholder was not replaced with a real file path: ri   Nrq   rl   rO   zMedia file not found: >   r  r   )r   rz   rŽ   r»   Ú	fullmatchr
   r!  r{   r|   r�   r3   r  r   r	   r³   Ú
expanduserÚis_absoluteÚcwdÚresolveÚis_fileÚFileNotFoundErrorrc   Ú
read_bytes)	rU   r  r%  ÚsourceÚparsedr”   r†   Úresolved_nameÚ
local_paths	   &&&      r$   Ú_load_outbound_mediaÚ$WeComMediaMixin._load_outbound_mediað   s¥  é € Ü�\×'Ð' RÓ(×.Ñ.Ó0ˆßÜÐ7Ó8Ð8Ü�<Š<˜ f×-Ò-ÜÐYÐZ`ÐYaÐbÓcÐcÜ˜&Ó!ˆØ�=‰=Ð-Ô-Ø"&×"=Ñ"=¸fÔPbÐ"=Ó"c×c‰MˆDØ%÷  Kð  K¨×)=Ñ)=¸fÇkÁkÐRgÓFhÐjq×juÑjuð  wEð  GIó  kJó  *KˆMØ×5Ñ5°g·k±kÀ.ÐRTÓ6UÐWdÓeÐgtÐtÐtÜ°&·-±-À6Ô2Iœ' &§+¡+Ô.ÈvÓV×aÑaÓcˆ
Ø#-×#9Ñ#9×#;Ò#;‘ZÄ$Ç(Â(Ã*ÈzÕBY×AbÑAbÓAdˆ
Ø×!Ñ!×#Ò#Ü#Ð&<¸Z¸LÐ$IÓJÐJØ!×4Ð4 Z§_¡_ˆØ×$Ñ$Ó&¨×(DÑ(DÀRÈÓ(WÐYfÐfÐfò dùs7   ‚+G!®'G!ÁAG!ÂGÂG!Â*B*G!ÅAG!ÆG!Æ.1G!c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  r   r%  r   r    r!   r"   )r#   s   "r$   r%   r@     s'   € ÷ @ñ @¸#ð @È-ð @Ðcqñ @r&   c              ƒ  	ó´   "  € V P                  WR 7      G Rj  x€L
 w  r4pV P                  V4      pRVRVRVRV/V P                  \        V4      Wd4      C#  L=5i)©r%  Nr”   r‡   r%  r  )r3  r  r  rÌ   )rU   r  r%  r”   r‡   r1  r  s   &&&    r$   Ú_prepare_outbound_mediaÚ'WeComMediaMixin._prepare_outbound_media  s�   é € Ø26×2KÑ2KÈLÐ2KÓ2n×,nÑ)ˆ˜MØ×5Ñ5°lÓCˆØ˜˜n¨l¸KÈÐXgÐivð  @Ðz~÷  {Wñ  {Wô  X[ð  \`ó  Xað  cpó  {ð  @ð  	@ñ -oùs   ‚A˜A™>Ac               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úcmdr   r?   r!   Ú	operationr    r"   )r#   s   "r$   r%   r@     s*   € ÷ ñ ¨#ð °^ð ÐPSð ÐXfñ r&   c              ƒ  	óf   "  € T P                  V P                  W4      G R j  x€L
 ;qC4       V#  L5ir1   )Ú_raise_for_wecom_errorÚ_send_request)rU   r;  r?   r<  rá   s   &&&& r$   Ú_checked_requestÚ WeComMediaMixin._checked_request  s1   é € Ø×#Ñ#°d×6HÑ6HÈÓ6S×0SÐ$S HÔ_Øˆñ 1Tùs   ‚ 1¢/£1c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   r”   r•   r7   r   rb   r    r!   r"   )r#   s   "r$   r%   r@     s0   € ÷ Gñ G¨eð GÀð GÐPSð GÐXfñ Gr&   c              ƒ  	óx  "  € V'       g   \        R 4      h\        V4      \        V4      \        ,           ^,
          \        ,          rTV\        8”  d   \        RV R\         R24      hRVRVRVRVR\        P
                  ! V4      P                  4       /pV P                  \        VR	4      G R
j  x€L
 p\        \        VR4      P                  R4      ;'       g    R4      P                  4       pV'       g   \        RV 24      h\        \        ^ V\        4      4       F_  w  rš\         P"                  ! WV
\        ,            4      P%                  R4      pV P                  \&        RVRV	RV/RV	 24      G R
j  x€L
  Ka  	  V P                  \(        RV/R4      G R
j  x€L
 p\        VR4      p\        VP                  R4      ;'       g    R4      P                  4       pV'       g   \        RV 24      hR\        VP                  R4      ;'       g    T4      RVRVP                  R4      /#  EL‚ L¹ L–5i)zCannot upload empty mediazFile too large: z chunks exceeds maximum of z chunksÚtyperb   Ú
total_sizeÚtotal_chunksÚmd5zmedia upload initNr?   Ú	upload_idrB   z8media upload init failed: missing upload_id in response ÚasciiÚchunk_indexÚbase64_datazmedia upload chunk zmedia upload finishr8   z9media upload finish failed: missing media_id in response Ú
created_at)rŽ   rÌ   ÚUPLOAD_CHUNK_SIZEÚMAX_UPLOAD_CHUNKSÚhashlibrG  Ú	hexdigestr@  ÚAPP_CMD_UPLOAD_MEDIA_INITr   r5   r3   rz   rÏ   Ú	enumerateÚrangera   Ú	b64encodeÚdecodeÚAPP_CMD_UPLOAD_MEDIA_CHUNKÚAPP_CMD_UPLOAD_MEDIA_FINISH)rU   r”   r7   rb   rE  rF  Úinit_payloadÚinit_responserH  rJ  ÚstartÚ	chunk_b64Úfinish_responseÚfinish_bodyr8   s   &&&&           r$   Ú_upload_media_bytesÚ#WeComMediaMixin._upload_media_bytes  s{  é € ßÜÐ8Ó9Ð9Ü#& t£9¬s°4«yÔ;LÕ/LÈqÕ/PÔUfÕ.f�LØÔ+Ô+ÜÐ/°¨~Ð=XÔYjÐXkÐkrÐsÓtÐtØ 
¨J¸À,ÐPZÐ\jÐlxÐzô  BI÷  BMò  BMð  NRó  BS÷  B]ñ  B]ó  B_ð  `ˆØ"×3Ñ3Ô4MÈ|Ð]pÓq×qˆÜœ °Ó7×;Ñ;¸KÓH×NÐNÈBÓO×UÑUÓWˆ	ßÜÐ!YÐZgÐYhÐiÓjÐjÜ"+¬E°!°ZÔARÓ,SÖ"TÑˆKÜ×(Ò(¨°eÔ>OÕ6OÐ)PÓQ×XÑXÐY`ÓaˆIØ×'Ñ'Ô(BÀ[ÐR[Ð]jÐlwð  zGð  IRð  ESð  Wjð  kvð  jwð  Uxó  y÷  yò  yñ #Uð !%× 5Ñ 5Ô6QÐT_ÐajÐSkð  nCó  !D÷  DˆÜ˜°Ó7ˆÜ�{—‘ zÓ2×8Ð8°bÓ9×?Ñ?ÓAˆßÜÐ!ZÐ[jÐZkÐlÓmÐmØœ˜KŸO™O¨FÓ3×AÐA°zÓBÀJÐPXÐZfÐhs×hwÑhwð  yEó  iFð  Gð  	Gò rñ yñ DùsU   ‚B/H:Â1H3Â2*H:ÃH:Ã:BH:Å<H6Å=$H:Æ!H8Æ",H:ÇH:Ç,+H:ÈH:È6H:È8H:c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   Úchat_idr   r7   r8   r    r!   r"   )r#   s   "r$   r%   r@      s0   € ÷ Iñ I°ð IÀ#ð IÐQTð IÐYgñ Ir&   c              ƒ  	óf   "  € V P                  \        R V/\        W#4      CR4      G Rj  x€L
 #  L5i)Úchatidzsend media messageN)r@  ÚAPP_CMD_SENDr;   )rU   ra  r7   r8   s   &&&&r$   Ú_send_media_messageÚ#WeComMediaMixin._send_media_message   sA   é € Ø×*Ñ*¬<¸(ÀGÐ9qÌ{Ð[eÓOpÐ9qð  tHó  I÷  Ið  	Iñ  Iùs   ‚(1ª/«1c               ó(   € V ^8„  d   QhRRRRRRRR/# )r   ra  r   ÚcontentÚreply_tor   r    zOptional[SendResult]r"   )r#   s   "r$   r%   r@   #  s*   € ÷ ñ °Sð À3ð ÐR_ð Ðkñ r&   c              ƒ  	óÖ   "  € V'       g   R # V P                  WVR7      G R j  x€L
 pVP                  '       g,   \        P                  RV P                  VP
                  4       V#  LC5i)N©ra  rh  ri  z'[%s] Follow-up markdown send failed: %s)ÚsendÚsuccessrt   r�   rc   Úerror)rU   ra  rh  ri  Úresults   &&&& r$   Ú_send_followup_markdownÚ'WeComMediaMixin._send_followup_markdown#  sP   é € ßÙØ—y‘y¨ÈH�yÓU×UˆØ�~�~ˆ~Ü�N‰NÐDÀdÇiÁiÐQW×Q]ÑQ]Ô^Øˆñ Vùs   ‚!A)£A'¤A)º.A)c               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r   ra  r   r  Úcaptionr   r%  ri  r    r   r"   )r#   s   "r$   r%   r@   +  sJ   € ÷ 'Dñ 'D°ð 'DÀ3ð 'DÐQ^ð 'DÐrð 'Dð  S`ð 'Dð  lvñ 'Dr&   c              ƒ  	óì  "  € V'       g   \        R RR7      #  V P                  W$R7      G Rj  x€L
 pTR,          '       d^   T P                  RTR,           2T;'       g    R	4      pT'       d   T P                  YTR
7      G Rj  x€L
  \        R TR,          R7      # T P                  Y4      p	T P                  T4      '       g   YP                  9   d   Rp	 T P                  TR,          TR,          TR,          4      G Rj  x€L
 p
\
        P                  RT P                  T
P!                  R4      TR,          4       T	'       dF   T P#                  T	\%        TR,          T
R,          4      4      G Rj  x€L
 pT P'                  TR4       M(T P)                  YR,          T
R,          4      G Rj  x€L
 p\
        P                  RT P                  T	'       d   RMRT4       RT
RT/pTR,          '       d+   TR,          '       d   T P                  RTR,           24      MRpRT3RT;'       g    R33 Fo  w  rèT'       d   T P                  YTR
7      G Rj  x€L
 MRpT'       d   TP,                  MRYÎ&   T'       d   TP.                  '       g   TP                  MRYÎ R2&   Kq  	  \        RT P1                  T4      ;'       g'    \2        P4                  ! 4       P6                  R ,          TR!7      #  ELÆ  \         dX   p\        T\        4      '       g"   \
        P                  RT P                  Y'4       \        R \        T4      R7      u Rp?# Rp?ii ; i ELÖ ELZ ELë EL³  \*         d2    \
        P                  RT P                  T4       \        R RR7      u # \         dB   p\
        P                  RT P                  Y'4       \        R \        T4      R7      u Rp?# Rp?ii ; i EL˜5i)"Fzchat_id is required)rm  rn  r7  Nz,[%s] Failed to prepare outbound media %s: %sr(   u   âš ï¸� r)   rB   )ri  r”   r   r%  z/[%s] upload_media_bytes OK: media_id=%s type=%sr8   zsend reply media messagez[%s] %s OK: %sÚsend_reply_mediaÚsend_media_messagez)[%s] TIMEOUT in _send_media_source for %szTimeout sending media to WeComz [%s] Failed to send media %s: %sÚuploadr^   r*   r+   u   â„¹ï¸� rs  r   Ú_errorT:Nrž   N)rm  Ú
message_idÚraw_response)r   r8  rs   r2   r-  rt   rn  rc   r   Úwarning_textrp  Ú_cached_reply_req_idÚ_find_active_turn_for_chatÚ_stream_expired_chatsr^  Úinfor3   Ú_send_reply_requestr;   r>  re  ÚTimeoutErrorrz  rm  Ú_payload_req_idÚuuidÚuuid4Úhex)rU   ra  r  rs  r%  ri  Úpreparedrƒ   ÚtextÚreply_req_idÚupload_resultÚmedia_responser‚   r   r/   Úfollowups   &&&&&&          r$   Ú_send_media_sourceÚ"WeComMediaMixin._send_media_source+  s   é € ßÜ eÐ3HÔIÐIð	=Ø!×9Ñ9¸,Ð9Ó\×\ˆHð
 �J×ÔØ×$Ñ$ w¨x¸Õ/HÐ.IÐ%JÈGÏMÈMÐWYÓZˆDßØ×2Ñ2°7È8Ð2ÓT×TÐTÜ e°8¸OÕ3LÔMÐMØ×0Ñ0°ÓCˆà×*Ñ*¨7×3Ò3°w×B\ÑB\Ô7\ØˆLð	=Ø"&×":Ñ":¸8ÀFÕ;KÈXÐVbÕMcÐemÐnyÕezÓ"{×{ˆMÜ�K‰KÐIÈ4Ï9É9ÐVc×VgÑVgÐhrÓVsÐu}ð  Kõ  vLô  MßØ'+×'?Ñ'?ÀÌkÐZbÐcoÕZpÐrð  AKõ  sLó  OMó  (N÷  "N�Ø×+Ñ+¨NÐ<VÕWà'+×'?Ñ'?ÀÐR^ÕI_ÐanÐoyÕazÓ'{×!{�Ü�K‰KÐ(¨$¯)©)Ï<Ñ5GÐ]qð  tBô  Cð  (¨¸ÀÐPˆØQYÐZf×QgÔQgÐltð  vF÷  mGô  mG�D×%Ñ%¨°Ð9IÕ0JÐ/KÐ&LÔMð  MQˆ	Ø$ gÐ.°¸i×>OÐ>OÈ4Ð0PÓQ‰IˆCß_c˜T×9Ñ9¸'ÐRZÐ9Ó[×[Ð[ÐimˆHß08�x×,Ò,¸dˆC‰Hß4<ÀX×EU×EUÐEU (§.¢.Ð[_ˆC�%�v�Óñ Rô  $°4×3GÑ3GÈÓ3W×3pÐ3pÔ[_×[eÒ[eÓ[g×[kÑ[kÐloÕ[pð  @Cô  Dð  	DòG ]øÜô 	=Ü˜cÔ#4×5Ò5Ü—‘ÐKÈTÏYÉYÐXdÔjÜ e´3°s³8Ô<Õ<ûð	=úò Uò |ò "Nò "|øäô 	UÜ�L‰LÐDÀdÇiÁiÐQ]Ô^Ü eÐ3SÔTÒTÜô 	=Ü�L‰LÐ;¸T¿Y¹YÈÔZÜ e´3°s³8Ô<Õ<ûð	=úò \ùs  ‚O4™K7 ®K4¯K7 ³O4ÁO4Á!O4Á0O4ÂMÂAO4Ã+M( ÄMÄAM( Å
-M( Å7M"Å8:M( Æ2M%Æ3&M( Ç	M( Ç#O4Ç8O4È)O4È1(O4ÉO1ÉO4É()O4Ê4O4Ë-O4Ë4K7 Ë7MÌAMÍMÍO4ÍMÍO4ÍM( Í"M( Í%M( Í(9O.Î!O4Î#O.Î,O.Î-6O)Ï#O.Ï$O4Ï)O.Ï.O4c               ó0   € V ^8„  d   QhRRRRRRRRRRR	R
/# )r   ra  r   Ú	image_urlrs  r   ri  ÚmetadatazOptional[dict[str, Any]]r    r   r"   )r#   s   "r$   r%   r@   T  sI   € ÷ @ñ @¨ð @¸ð @Àmð @Ðfsð @ð  G_ð @ð  kuñ @r&   c              ƒ  	óH  "  € V P                  WW4R 7      G Rj  x€L
 pVP                  '       g   V P                  V4      '       g   V# \        P	                  RV P
                  W&P                  4       T P                  Y'       d   V RV 2MTVR7      G Rj  x€L
 #  L„ L5i)©ra  r  rs  ri  Nz3[%s] Falling back to text send for image URL %s: %sÚ
rk  )rŒ  rm  r"  rt   r�   rc   rn  rl  )rU   ra  r�  rs  ri  r�  ro  s   &&&&&& r$   Ú
send_imageÚWeComMediaMixin.send_imageT  sŽ   é € Ø×.Ñ.°wÐ`gÐ.Ó{×{ˆØ�>�>ˆ> ×!5Ñ!5°i×!@Ò!@ØˆMÜ�‰ÐLÈdÏiÉiÐYb×dpÑdpÔqØ—Y‘Y wÖU\¸7¸)À2ÀiÀ[Ñ8QÐbkÐv~�YÓ×Ðñ	 |ñ @ùs-   ‚B"™BšB"°B"ÁAB"ÂB ÂB"Â B"c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   ra  r   Ú
image_pathrs  r   ri  r    r   r"   )r#   s   "r$   r%   r@   [  s<   € ÷ {ñ {¨Sð {¸cð {ÈMð {Ðlyð {ð  PZñ {r&   c              ‹  	óD   "  € V P                  WW4R 7      G Rj  x€L
 #  L5i©r’  N©rŒ  )rU   ra  r—  rs  ri  Úkwargss   &&&&&,r$   Úsend_image_fileÚWeComMediaMixin.send_image_file[  ó"   é € Ø×,Ñ,°WÐ_fÐ,Óz×zÐzÑzùó   ‚ ™š c               ó0   € V ^8„  d   QhRRRRRRRRRRRR	/# )
r   ra  r   Ú	file_pathrs  r   r%  ri  r    r   r"   )r#   s   "r$   r%   r@   ^  sI   € ÷ Oñ O¨3ð O¸3ð OÈð OÐjwð Oð  KXð Oð  nxñ Or&   c              ‹  	óˆ   "  € \         P                  R V P                  W4       V P                  WW4VR7      G Rj  x€L
 #  L5i)z*[%s] send_document called: chat=%s file=%s)ra  r  rs  r%  ri  N)rt   r  rc   rŒ  )rU   ra  r¡  rs  r%  ri  r›  s   &&&&&&,r$   Úsend_documentÚWeComMediaMixin.send_document^  sJ   é € Ü�‰Ð@À$Ç)Á)ÈWÔ`Ø×,Ñ,°WÐ^eð  FNÐ,ó  O÷  Oð  	Oñ  Oùs   ‚9A»A ¼Ac          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   ra  r   Ú
audio_pathrs  r   ri  r    r   r"   )r#   s   "r$   r%   r@   b  ó<   € ÷ {ñ {¨ð {¸ð {À}ð {Ðgtð {ð  KUñ {r&   c              ‹  	óD   "  € V P                  WW4R 7      G Rj  x€L
 #  L5ir™  rš  )rU   ra  r¦  rs  ri  r›  s   &&&&&,r$   Ú
send_voiceÚWeComMediaMixin.send_voiceb  rž  rŸ  c          
     ó,   € V ^8„  d   QhRRRRRRRRRR/# )	r   ra  r   Ú
video_pathrs  r   ri  r    r   r"   )r#   s   "r$   r%   r@   e  r§  r&   c              ‹  	óD   "  € V P                  WW4R 7      G Rj  x€L
 #  L5ir™  rš  )rU   ra  r¬  rs  ri  r›  s   &&&&&,r$   Ú
send_videoÚWeComMediaMixin.send_videoe  rž  rŸ  r"   )re   r1   )NNN)NN)"Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r[   rT   rv   Ústaticmethodrr   rw   r�   r   r�   r}   r{   rü   r  r  r  r"  r3  r8  r@  r^  re  rp  rŒ  r”  rœ  r£  r©  r®  Ú__static_attributes__r"   r&   r$   r=   r=   :   sS  † Ùgõ>õ8nõ<ð ô@ó ð@ð ôZó ðZð ö>ó ð>ð ôBó ðBð ôeó ðeð ô$ó ð$õ*&ð4 ôMó ðMð ôYó ðYð ôZó ðZð ö.ó ð.ð ôMó ðM÷g÷$@õ
õGõ*I÷÷'D÷R@÷{÷O÷{÷{ó {r&   r=   i    i    i  @i   ))s   ‰PNG

z.png)s   ÿØÿrŸ   ))s   GIF87as   GIF89az.gif))rp   r   )zvideo/r   )zaudio/r   )0r´  Ú
__future__r   Úasynciora   rO  Úloggingrx   r»   rƒ  Úpathlibr   Útypingr   r   r   r   r   Úurllib.parser	   r
   Ú
agent.i18nr   rç   r   r   r   Ú	getLoggerrt   rd  rQ  rV  rW  ÚIMAGE_MAX_BYTESÚVIDEO_MAX_BYTESÚVOICE_MAX_BYTESÚFILE_MAX_BYTESr|   rM  rN  r  r¨   r
  r  r,   r5   r;   r=   r"   r&   r$   Ú<module>rÃ     sü   ðñ)õ #ã Û Û Û Û Û 	Û Ý ß 3Õ 3ß *å ß lÑ là	×	Ò	Ð<Ó	=€à€Ø5Ð Ø7Ð Ø9Ð à"€Ø"€Ø!€Ø!€Ø#Ð ØÐ ØÐ Ø$˜Ð àl€ØTÐ ð ˜/Ð+LÈfÐUØ˜/Ð+LÈfÐUØ˜/Ð+LÈeÐTðV€ð
a¸dð aÐ_c÷ aõNõG÷l{ó l{r&   