+
    œ°³j™c  ã                   ó¶  € R t ^ RIt^ RIHt ^ RIHt ^ RIt^ RIHt ^ RI	Hu H
t ^RIHt ^RIHt ^RIHt ^RIHt ^RIHtHtHtHt ^R	IHt ^R
IHt ] ! R R]4      4       t] ! R R]4      4       t] ! R R]4      4       t  ! R R]PB                  4      t" ! R R]PB                  4      t# ! R R]PB                  4      t$ ! R R]PB                  4      t% ! R R]PB                  4      t& ! R R]PB                  4      t' ! R R]PB                  4      t( ! R R ]PB                  4      t)] ! R! R"]4      4       t*]! R#R$7       ! R% R&]*4      4       t+R&R".t,R# )'zTransformers Xcodec model.N)Ú	dataclass)Ú	lru_cache)Úinitialization)Úconv1d_output_length)ÚPreTrainedAudioTokenizerBase)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tuple)Ú	AutoModel©ÚXcodecConfigc                   ó8   a € ] tR t^&t o RtRtRtV 3R ltRtV t	R# )ÚXcodecOutputaW  
Args:
    audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`, *optional*):
        Discrete code indices computed using `model.encode`.
    audio_values (`torch.FloatTensor` of shape `(batch_size, channels, num_samples)`, *optional*)
        Decoded audio values obtained using the decoder part of Xcodec.
Nc                óv   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   # )é   NÚaudio_codesÚaudio_values)ÚtorchÚ
LongTensorÚFloatTensor)ÚformatÚ__classdict__s   "€Úk/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/xcodec/modeling_xcodec.pyÚ__annotate__ÚXcodecOutput.__annotate__&   s5   ø‡ ‚ ñ ×!Ñ! DÕ(Ñ/ñ ñ ×#Ñ# dÕ*Ñ1ò ó    © )
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r   Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   &   s   ø‡ € ñð ,0€KØ-1€L÷ ƒ r   r   c                   ó4   a € ] tR t^4t o RtRtV 3R ltRtV tR# )ÚXcodecEncoderOutputz­
Args:
    audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`, *optional*):
        Discrete code indices computed using `model.encode`.
Nc                óH   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   # )r   Nr   )r   r   )r   r   s   "€r   r   Ú XcodecEncoderOutput.__annotate__4   s   ø‡ ‚ ñ ×!Ñ! DÕ(Ñ/ò r   r   )	r   r    r!   r"   r#   r   r$   r%   r&   r'   s   @r   r)   r)   4   s   ø‡ € ñð ,0€K÷ ƒ r   r)   c                   ó4   a € ] tR t^?t o RtRtV 3R ltRtV tR# )ÚXcodecDecoderOutputz³
Args:
    audio_values (`torch.FloatTensor`  of shape `(batch_size, channels, num_samples)`, *optional*):
        Decoded audio values obtained using the decoder part of Xcodec.
Nc                óH   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   # )r   Nr   ©r   r   )r   r   s   "€r   r   Ú XcodecDecoderOutput.__annotate__?   s   ø‡ ‚ ñ ×#Ñ# dÕ*Ñ1ò r   r   )	r   r    r!   r"   r#   r   r$   r%   r&   r'   s   @r   r-   r-   ?   s   ø‡ € ñð .2€L÷ ƒ r   r-   c                   óT   a a€ ] tR t^Jt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚXcodecResidualUnitzFResidual block for SemanticEncoder and SemanticDecoder used in Xcodec.c                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# )r   ÚconfigÚin_channelsÚout_channelsÚdilation©r   Úint)r   r   s   "€r   r   ÚXcodecResidualUnit.__annotate__M   s0   ø€ ÷ oñ o™|ð o¹#ð oÉSð oÑ\_ñ or   c                ó0  <€ \         SV `  4        \        P                  ! 4       V n        VP
                  ^,
          ^,          V,          p\        P                  ! VVVP
                  ^VV^RR7      V n        \        P                  ! W3^RR7      V n        R# )é   F)ÚstrideÚpaddingr7   ÚgroupsÚbias)r5   r6   Úkernel_sizer@   N)	ÚsuperÚ__init__ÚnnÚELUÚ
activationÚunit_kernel_sizeÚConv1dÚconv1Úconv2)Úselfr4   r5   r6   r7   r>   Ú	__class__s   &&&&& €r   rC   ÚXcodecResidualUnit.__init__M   s{   ø€ Ü‰ÑÔÜŸ&š&›(ˆŒØ×+Ñ+¨aÕ/°AÕ5¸ÕAˆÜ—Y’YØØØ×#Ñ#ØØØØØô	
ˆŒ
ô —Y’Y¨<Ð`aÐhmÔnˆŽ
r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# ©r   Úhidden_stateÚreturn©r   ÚTensor)r   r   s   "€r   r   r:   ]   s#   ø€ ÷ ,ñ ,¡E§L¡Lð ,±U·\±\ñ ,r   c                óš   € V P                  V4      pV P                  V4      pV P                  V4      pV P                  V4      pW,           # ©N©rF   rI   rJ   )rK   rP   Úoutput_tensors   && r   ÚforwardÚXcodecResidualUnit.forward]   sC   € ØŸ™¨Ó5ˆØŸ
™
 =Ó1ˆØŸ™¨Ó6ˆØŸ
™
 =Ó1ˆØÕ+Ð+r   rV   )
r   r    r!   r"   r#   rC   rX   r%   r&   Ú__classcell__©rL   r   s   @@r   r2   r2   J   s#   ù‡ € ÙP÷oó o÷ ,÷ ,ð ,r   r2   c                   óP   a a€ ] tR t^et oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚXcodecSemanticEncoderBlockc                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# ©r   r4   r5   r6   r=   r8   )r   r   s   "€r   r   Ú'XcodecSemanticEncoderBlock.__annotate__f   s0   ø€ ÷ 	xñ 	x™|ð 	x¹#ð 	xÉSð 	xÑZ]ñ 	xr   c                ó.  <€ \         SV `  4        \        P                  ! VP                   Uu. uF  p\        WW%4      NK  	  up4      V n        V^8X  d   ^M^V,          pV^,
          ^,          p\        P                  ! W#WdVRR7      V n        R# u upi )r<   T©rA   r=   r>   r@   N)	rB   rC   rD   Ú
ModuleListÚblock_dilationsr2   Ú	res_unitsrH   Úconv)	rK   r4   r5   r6   r=   r7   Úkernelr>   rL   s	   &&&&&   €r   rC   Ú#XcodecSemanticEncoderBlock.__init__f   s€   ø€ Ü‰ÑÔÜŸšØ\b×\rÒ\rÓsÑ\rÐPXÔ °[ÖKÑ\rÑsó
ˆŒð
  ”k‘¨¨F­
ˆØ˜A•: !Õ#ˆÜ—I’I˜kÀVÐdkÐrvÔwˆŽ	ùò ts   ®Bc                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rO   rR   )r   r   s   "€r   r   r`   q   ó#   ø€ ÷ ñ ¡E§L¡Lð ±U·\±\ñ r   c                ó^   € V P                    F  pV! V4      pK  	  V P                  V4      pV# rU   )re   rf   ©rK   rP   Úunits   && r   rX   Ú"XcodecSemanticEncoderBlock.forwardq   s.   € Ø—N”NˆDÙ Ó-ŠLñ #à—y‘y Ó.ˆØÐr   ©rf   re   ©	r   r    r!   r"   rC   rX   r%   r&   rZ   r[   s   @@r   r]   r]   e   s    ù‡ € ÷	xó 	x÷÷ ð r   r]   c                   óD   a a€ ] tR t^xt oV 3R ltV3R lR ltRtVtV ;t# )ÚSemanticEncoderc           	     óH  <€ \         SV `  4        \        VP                  4      \        VP                  4      8w  d   \        R 4      h\        P                  ! VP                  VP                  VP                  ^VP                  ^,          RR7      V n
        VP                  p. p\        VP                  4       FH  w  rE\        VP                  VP                  V,          ,          4      pV\        WWe4      .,          pTpKJ  	  \        P                  ! V4      V n        R# )z:Number of strides must match the number of channel_ratios.F©r@   N)rB   rC   ÚlenÚstridesÚchannel_ratiosÚ
ValueErrorrD   rH   Úsemantic_hidden_sizerA   rf   Ú	enumerater9   r]   rc   Úconv_blocks)rK   r4   r5   r{   Úir=   r6   rL   s   &&     €r   rC   ÚSemanticEncoder.__init__y   sê   ø€ Ü‰ÑÔÜˆv�~‰~Ó¤# f×&;Ñ&;Ó"<Ô<ÜÐYÓZÐZÜ—I’IØ×'Ñ'Ø×'Ñ'Ø×ÑØØ×Ñ !Õ#Øô
ˆŒ	ð ×1Ñ1ˆØˆÜ" 6§>¡>Ö2‰IˆAÜ˜v×:Ñ:¸V×=RÑ=RÐSTÕ=UÕUÓVˆLØÔ6°vÈLÓaÐbÕbˆKØ&ŠKñ 3ô
 Ÿ=š=¨Ó5ˆÖr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rO   rR   )r   r   s   "€r   r   ÚSemanticEncoder.__annotate__�   rj   r   c                ó^   € V P                  V4      pV P                   F  pV! V4      pK  	  V# rU   ©rf   r{   ©rK   rP   Úblocks   && r   rX   ÚSemanticEncoder.forward�   s0   € Ø—y‘y Ó.ˆØ×%Ô%ˆEÙ  Ó.ŠLñ &àÐr   r�   rp   r[   s   @@r   rr   rr   x   s   ù‡ € õ6÷,÷ ð r   rr   c                   óP   a a€ ] tR t^–t oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚSemanticDecoderBlockc                ó2   <€ V ^8„  d   QhRS[ RS[RS[RS[/# r_   r8   )r   r   s   "€r   r   Ú!SemanticDecoderBlock.__annotate__—   s*   ø€ ÷ 
ñ 
™|ð 
¹#ð 
ÉSð 
ÑZ]ñ 
r   c                ó’  <€ \         S	V `  4        V^8X  d#   \        P                  ! VV^^^RR7      V n        MJ^V,          pV^,           ^,          pV^,          ^8X  d   ^M^ p\        P
                  ! W#WTWgRR7      V n        \        P                  ! VP                   Uu. uF  p\        WW84      NK  	  up4      V n	        R# u upi )r<   Trb   Frt   N)
rB   rC   rD   rH   rf   ÚConvTranspose1drc   rd   r2   re   )
rK   r4   r5   r6   r=   rA   r>   Úoutput_paddingr7   rL   s
   &&&&&    €r   rC   ÚSemanticDecoderBlock.__init__—   sµ   ø€ Ü‰ÑÔØ�QŒ;ÜŸ	š	ØØØØØØôˆD�Ið ˜f�*ˆKØ •z aÕ'ˆGØ"(¨1¥*°¤/™Q°qˆNÜ×*Ò*Ø¨;ÀÐ^côˆDŒIô ŸšØ^d×^tÒ^tÓuÑ^tÐRZÔ °lÖMÑ^tÑuó
ˆŽùÚus   Â!Cc                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rO   rR   )r   r   s   "€r   r   rˆ   ®   rj   r   c                ó^   € V P                  V4      pV P                   F  pV! V4      pK  	  V# rU   ro   rl   s   && r   rX   ÚSemanticDecoderBlock.forward®   s.   € Ø—y‘y Ó.ˆØ—N”NˆDÙ Ó-ŠLñ #àÐr   ro   rp   r[   s   @@r   r†   r†   –   s   ù‡ € ÷
ó 
÷.÷ ð r   r†   c                   óD   a a€ ] tR t^µt oV 3R ltV3R lR ltRtVtV ;t# )ÚSemanticDecoderc           	     ób  <€ \         SV `  4        \        P                  ! VP                  \        VP                  VP                  ^ ,          ,          4      VP                  ^VP                  ^,          RR7      V n        . p\        VP                  4       F¨  w  r4\        VP                  VP                  V,          ,          4      pV\        VP                  4      ^,
          8  d6   \        VP                  VP                  V^,           ,          ,          4      pMVP                  pV\        WWd4      .,          pKª  	  \        P                  ! V4      V n        \        P                  ! VP                  VP                  VP                  ^VP                  ^,          RR7      V n        R# )é    F)r5   r6   rA   r=   r>   r@   )r=   r>   r@   N)rB   rC   rD   rH   ry   r9   rw   rA   rI   rz   rv   ru   r†   rc   r{   rJ   )rK   r4   r{   r|   r=   r5   r6   rL   s   &&     €r   rC   ÚSemanticDecoder.__init__¶   sQ  ø€ Ü‰ÑÔÜ—Y’YØ×3Ñ3Ü˜V×8Ñ8¸6×;PÑ;PÐQRÕ;SÕSÓTØ×*Ñ*ØØ×&Ñ&¨!Õ+Øô
ˆŒ
ð ˆÜ" 6§>¡>Ö2‰IˆAÜ˜f×9Ñ9¸F×<QÑ<QÐRSÕ<TÕTÓUˆKà”C˜×-Ñ-Ó.°Õ2Ô3Ü" 6×#>Ñ#>À×AVÑAVÐWXÐ[\ÕW\ÕA]Õ#]Ó^‘à%×:Ñ:�àÔ0°ÀlÓ[Ð\Õ\ŠKñ 3ô Ÿ=š=¨Ó5ˆÔÜ—Y’YØ×'Ñ'Ø×'Ñ'Ø×ÑØØ×&Ñ&¨!Õ+Øô
ˆŽ
r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# rO   rR   )r   r   s   "€r   r   ÚSemanticDecoder.__annotate__Õ   s#   ø€ ÷ ñ ¡E§L¡Lð ±U·\±\ñ r   c                ó€   € V P                  V4      pV P                   F  pV! V4      pK  	  V P                  V4      pV# rU   )rI   r{   rJ   r‚   s   && r   rX   ÚSemanticDecoder.forwardÕ   s>   € Ø—z‘z ,Ó/ˆØ×%Ô%ˆEÙ  Ó.ŠLñ &à—z‘z ,Ó/ˆØÐr   )rI   rJ   r{   rp   r[   s   @@r   r‘   r‘   µ   s   ù‡ € õ
÷>÷ ð r   r‘   c                   óH   a a€ ] tR t^Ýt oRtV 3R ltR tR tR tRt	Vt
V ;t# )ÚXcodecEuclideanCodebookz!Codebook with Euclidean distance.c                óö  <€ \         SV `  4        \        P                  ! VP                  VP
                  4      pVP                  V n        \        P                  ! \        P                  ! R .4      4      V n	        \        P                  ! \        P                  ! VP                  4      4      V n
        \        P                  ! V4      V n        \        P                  ! VP                  4       4      V n        R# )TN)rB   rC   r   ÚzerosÚcodebook_sizeÚcodebook_dimrD   ÚBufferrS   ÚinitedÚcluster_sizeÚembedÚcloneÚ	embed_avg)rK   r4   r¢   rL   s   && €r   rC   Ú XcodecEuclideanCodebook.__init__à   s™   ø€ Ü‰ÑÔÜ—’˜F×0Ñ0°&×2EÑ2EÓFˆØ#×1Ñ1ˆÔÜ—i’i¤§¢¨d¨VÓ 4Ó5ˆŒÜŸIšI¤e§k¢k°&×2FÑ2FÓ&GÓHˆÔÜ—Y’Y˜uÓ%ˆŒ
ÜŸš 5§;¡;£=Ó1ˆŽr   c                ó4  € V P                   P                  4       pVP                  ^4      P                  ^RR7      pV^V,          V,          ,
          VP                  ^4      P                  ^ RR7      ,           ) pVP	                  RR7      P
                  pV# )r   T)Úkeepdim©Údiméÿÿÿÿ)r¢   ÚtÚpowÚsumÚmaxÚindices)rK   Úhidden_statesr¢   Úscaled_statesÚdistÚ	embed_inds   &&    r   ÚquantizeÚ XcodecEuclideanCodebook.quantizeê   s‚   € Ø—
‘
—‘“ˆØ%×)Ñ)¨!Ó,×0Ñ0°¸DÐ0ÓAˆØ  ]Õ!2°UÕ!:Õ:¸U¿Y¹YÀq»\×=MÑ=MÈaÐY]Ð=MÓ=^Õ^Ð_ˆØ—H‘H �HÓ$×,Ñ,ˆ	ØÐr   c                óš   € VP                   pVP                  RVR,          34      pV P                  V4      pVP                  ! VRR !  pV# )r<   Nrª   )ÚshapeÚreshaper´   Úview)rK   r°   r·   r³   s   &&  r   ÚencodeÚXcodecEuclideanCodebook.encodeñ   sM   € Ø×#Ñ#ˆØ%×-Ñ-¨r°5¸µ9¨oÓ>ˆØ—M‘M -Ó0ˆ	Ø—N’N E¨#¨2 JÑ/ˆ	ØÐr   c                óŽ   € \         P                  ! VP                  V P                  P                  4      V P                  4      pV# rU   )ÚFÚ	embeddingÚtor¢   Údevice)rK   r³   Ú	quantizeds   && r   ÚdecodeÚXcodecEuclideanCodebook.decodeø   s/   € Ü—K’K 	§¡¨T¯Z©Z×->Ñ->Ó ?ÀÇÁÓLˆ	ØÐr   )r¡   r�   r¢   r¤   r    )r   r    r!   r"   r#   rC   r´   rº   rÂ   r%   r&   rZ   r[   s   @@r   rš   rš   Ý   s!   ù‡ € Ù+õ2òò÷ò r   rš   c                   óN   a a€ ] tR t^ýt oRtV3R lV 3R lltR tR tRtVt	V ;t
# )ÚXcodecVectorQuantizationzQ
Vector quantization implementation. Currently supports only euclidean distance.
c                ó    <€ V ^8„  d   QhRS[ /# ©r   r4   r   )r   r   s   "€r   r   Ú%XcodecVectorQuantization.__annotate__  s   ø€ ÷ 8ñ 8™|ñ 8r   c                óD   <€ \         SV `  4        \        V4      V n        R # rU   )rB   rC   rš   Úcodebook)rK   r4   rL   s   &&€r   rC   Ú!XcodecVectorQuantization.__init__  s   ø€ Ü‰ÑÔÜ/°Ó7ˆŽr   c                ób   € VP                  ^ ^^4      pV P                  P                  V4      pV# ©r“   )ÚpermuterÊ   rº   )rK   r°   Úembed_ins   && r   rº   ÚXcodecVectorQuantization.encode  s/   € Ø%×-Ñ-¨a°°AÓ6ˆØ—=‘=×'Ñ'¨Ó6ˆØˆr   c                ób   € V P                   P                  V4      pVP                  ^ ^^4      pV# rÍ   )rÊ   rÂ   rÎ   )rK   r³   r´   s   && r   rÂ   ÚXcodecVectorQuantization.decode  s/   € Ø—=‘=×'Ñ'¨	Ó2ˆØ×#Ñ# A q¨!Ó,ˆØˆr   )rÊ   )r   r    r!   r"   r#   rC   rº   rÂ   r%   r&   rZ   r[   s   @@r   rÅ   rÅ   ý   s#   ù‡ € ñ÷8ó 8ò
÷ò r   rÅ   c                   ó†   a a€ ] tR tRt oRtV3R lV 3R lltR tRV3R lR lltRV3R lR	 lltV3R
 lR lt	Rt
VtV ;t# )Ú XcodecResidualVectorQuantizationi  zn
Residual vector quantization implementation. Follows Algorithm 1 in https://huggingface.co/papers/2107.03312
c                ó    <€ V ^8„  d   QhRS[ /# rÇ   r   )r   r   s   "€r   r   Ú-XcodecResidualVectorQuantization.__annotate__  s   ø€ ÷ 4ñ 4™|ñ 4r   c                ó"  <€ \         SV `  4        \        P                  ! \	        VP
                  4       Uu. uF  p\        V4      NK  	  up4      V n        VP                  V n        VP                  V n	        VP
                  V n        R # u upi rU   )
rB   rC   rD   rc   ÚrangeÚnum_quantizersrÅ   Ú
quantizersÚ
frame_rater�   )rK   r4   Ú_rL   s   && €r   rC   Ú)XcodecResidualVectorQuantization.__init__  sq   ø€ Ü‰ÑÔÜŸ-š-ÔSXÐY_×YnÑYnÔSoÓ(pÑSoÈaÔ)AÀ&Ö)IÑSoÑ(pÓqˆŒØ ×+Ñ+ˆŒØ#×1Ñ1ˆÔØ$×3Ñ3ˆÖùò )qs   ·Bc                ór   € \         P                  ! V P                  4      V P                  ,          R,          # )zReturn bandwidth per quantizer.iè  )ÚmathÚlog2r�   rÛ   )rK   s   &r   Úget_bandwidth_per_quantizerÚ<XcodecResidualVectorQuantization.get_bandwidth_per_quantizer  s%   € ä�yŠy˜×+Ñ+Ó,¨t¯©Õ>ÀÕEÐEr   c                ó    <€ V ^8„  d   QhRS[ /# )r   rQ   )r9   )r   r   s   "€r   r   rÖ   #  s   ø€ ÷ ñ Á#ñ r   c           	     ó²   € V P                  4       pV P                  pVe7   VR8”  d0   \        \        ^\        P
                  ! W,          4      4      4      pV# )z:Return num_quantizers based on specified target bandwidth.ç        )rá   rÙ   r9   r®   rß   Úfloor)rK   Ú	bandwidthÚbw_per_qrÙ   s   &&  r   Ú get_num_quantizers_for_bandwidthÚAXcodecResidualVectorQuantization.get_num_quantizers_for_bandwidth#  sJ   € à×3Ñ3Ó5ˆØ×,Ñ,ˆØÒ  Y°¤_Ü ¤ Q¬¯
ª
°9Õ3GÓ(HÓ!IÓJˆNØÐr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   Ú
embeddingsrQ   rR   )r   r   s   "€r   r   rÖ   +  s#   ø€ ÷ ñ ¡§¡ð Á%Ç,Á,ñ r   c                óþ   € V P                  V4      pTp. pV P                  RV  F>  pVP                  V4      pVP                  V4      pWH,
          pVP	                  V4       K@  	  \
        P                  ! V4      p	V	# )z÷
Encode the input tensor into discrete indices using RVQ, with the number of quantizers selected based on the given bandwidth.
Each quantizer /codebook residually quantizes the input and returns the nearest indices in terms of Euclidean distance.
N)ré   rÚ   rº   rÂ   Úappendr   Ústack)
rK   rì   rç   rÙ   ÚresidualÚall_indicesÚ	quantizerr¯   rÁ   Úout_indicess
   &&&       r   rº   Ú'XcodecResidualVectorQuantization.encode+  s   € ð
 ×>Ñ>¸yÓIˆØˆØˆØŸ™¨¨.Ó9ˆIØ×&Ñ& xÓ0ˆGØ!×(Ñ(¨Ó1ˆIØÕ+ˆHØ×Ñ˜wÖ'ñ	 :ô
 —k’k +Ó.ˆØÐr   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   ÚcodesrQ   rR   )r   r   s   "€r   r   rÖ   ;  s#   ø€ ÷ ñ ™EŸL™Lð ©U¯\©\ñ r   c                óþ   € \         P                  ! RRVP                  R7      p\        V4       FJ  w  r4V P                  V,          pVP                  V4      pW&P                  VP                  4      ,           pKL  	  V# )z9Decode the given codes to their quantized representation.rå   )rÀ   r   )r   ÚfullrÀ   rz   rÚ   rÂ   r¿   )rK   rö   Úquantized_outr|   r¯   rò   rÁ   s   &&     r   rÂ   Ú'XcodecResidualVectorQuantization.decode;  sd   € äŸ
š
 2 s°5·<±<Ô@ˆÜ# EÖ*‰JˆAØŸ™¨Õ*ˆIØ!×(Ñ(¨Ó1ˆIØ)¯L©L¸¿¹Ó,FÕFŠMñ +ð Ðr   )r�   rÛ   rÙ   rÚ   rU   )r   r    r!   r"   r#   rC   rá   ré   rº   rÂ   r%   r&   rZ   r[   s   @@r   rÔ   rÔ     s=   ù‡ € ñ÷4ó 4òF÷ò ÷ò ÷ ÷ ð r   rÔ   c                   óŽ   a € ] tR tRt o Rt]tRtRtRt	R.t
]P                  ! 4       R 4       tR tR	 t]R
 4       tRR ltRtV tR# )ÚXcodecPreTrainedModeliE  zz
An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
models.
ÚxcodecÚinput_valuesÚaudiorÔ   c                óˆ  € \        V\        P                  4      '       dj   \        P                  ! VP
                  RV P                  P                  R7       VP                  e#   \        P                  ! VP                  4       R# R# \        V\        P                  \        P                  34      '       dC   \        P                  ! VP                  4       \        P                  ! VP
                  4       R# \        V\        P                  4      '       d    \        P                  ! VP
                  4       VP                  ep   \        P                   ! VP"                  VP$                  VP&                  ^ ,          ,          ,          4      p\        P(                  ! VP                  V) VR7       R# R# VP*                  P,                  R8X  d#   \        P                  ! VP.                  4       R# \        V\        P0                  4      '       d   VP3                  4        R# \        V\        P4                  4      '       d&   \        P                  ! VP
                  RRR7       R# \        V\6        4      '       Ed   VP8                  P;                  4        Fh  p\        V\        P                  4      '       g   K%  \        P<                  ! VP
                  RR7       \        P>                  ! VP                  ^ 4       Kj  	  VP@                  P;                  4        Fh  p\        V\        P                  4      '       g   K%  \        P<                  ! VP
                  RR7       \        P>                  ! VP                  ^ 4       Kj  	  R# \        V\B        4      '       d™   \        PD                  ! VPF                  \H        PJ                  ! R.4      4       \        P                  ! VPL                  4       \        P                  ! VPN                  4       \        P                  ! VPP                  4       R# R# )	zInitialize the weightsrå   )ÚmeanÚstdN)ÚaÚbÚSnake1dg{®Gáz”?)r  T))Ú
isinstancerD   ÚLinearÚinitÚnormal_Úweightr4   Úinitializer_ranger@   Úzeros_Ú	LayerNormÚ	GroupNormÚones_rH   Úkaiming_normal_rß   Úsqrtr?   r5   rA   Úuniform_rL   r   ÚalpharŠ   Úreset_parametersÚ	EmbeddingÚXcodecModelÚacoustic_encoderÚmodulesÚtrunc_normal_Ú	constant_Úacoustic_decoderrš   Úcopy_r    r   rS   r¡   r¢   r¤   )rK   ÚmoduleÚkÚ	submodules   &&  r   Ú_init_weightsÚ#XcodecPreTrainedModel._init_weightsR  s‡  € ô �fœbŸi™i×(Ò(Ü�LŠL˜Ÿ™¨S°d·k±k×6SÑ6SÕTØ�{‰{Ò&Ü—’˜FŸK™KÖ(ñ 'ä˜¤§¡¬r¯|©|Ð <×=Ò=Ü�KŠK˜Ÿ™Ô$Ü�JŠJ�v—}‘}Ö%Ü˜¤§	¡	×*Ò*Ü× Ò  §¡Ô/Ø�{‰{Ò&Ü—I’I˜fŸm™m¨v×/AÑ/AÀF×DVÑDVÐWXÕDYÕ/YÕZÓ[�Ü—’˜fŸk™k¨a¨R°1×5ñ 'ð ×Ñ×&Ñ&¨)Ô3Ü�JŠJ�v—|‘|Ö$Ü˜¤× 2Ñ 2×3Ò3Ø×#Ñ#Ö%Ü˜¤§¡×-Ò-Ü�LŠL˜Ÿ™¨S°d×;Ü˜¤×,Ó,ð $×4Ñ4×<Ñ<Ö>�	Ü˜i¬¯©×3Ô3Ü×&Ò& y×'7Ñ'7¸TÕBÜ—N’N 9§>¡>°1Ö5ñ ?ð $×4Ñ4×<Ñ<Ö>�	Ü˜i¬¯©×3Ô3Ü×&Ò& y×'7Ñ'7¸TÕBÜ—N’N 9§>¡>°1Ö5ó ?ô ˜Ô 7×8Ò8Ü�JŠJ�v—}‘}¤e§l¢l°D°6Ó&:Ô;Ü�KŠK˜×+Ñ+Ô,Ü�KŠK˜Ÿ™Ô%Ü�KŠK˜×(Ñ(Ö)ñ	 9r   c                óJ  € \         P                  P                  P                  P                  pV! V P
                  P                  4       V! V P
                  P                  4       V P
                  P                   Fc  pV! VP                  4       VP                  VP                  VP                  3 F'  pV! VP                  4       V! VP                  4       K)  	  Ke  	  V! V P                  P                  RR7       V! V P                  P                  RR7       V P                  P                   Fi  pV! VP                  RR7       VP                  VP                  VP                  3 F+  pV! VP                  RR7       V! VP                  RR7       K-  	  Kk  	  R# )znApply weight norm in the acoustic encoder and decoder because the original checkpoint has weight norm applied.r
  ©ÚnameN)r   rD   ÚutilsÚparametrizationsÚweight_normr  rI   rJ   rƒ   Ú	res_unit1Ú	res_unit2Ú	res_unit3r  Úconv_t1)rK   r'  rƒ   Úres_units   &   r   Úapply_weight_normÚ'XcodecPreTrainedModel.apply_weight_normx  s'  € ä—h‘h—n‘n×5Ñ5×AÑAˆá�D×)Ñ)×/Ñ/Ô0Ù�D×)Ñ)×/Ñ/Ô0à×*Ñ*×0Ô0ˆEÙ˜Ÿ™Ô$Ø"Ÿ_™_¨e¯o©o¸u¿¹ÓO�Ù˜HŸN™NÔ+Ù˜HŸN™NÖ+ó Pñ 1ñ 	�D×)Ñ)×/Ñ/°hÕ?Ù�D×)Ñ)×/Ñ/°hÕ?à×*Ñ*×0Ô0ˆEÙ˜Ÿ™¨HÕ5Ø"Ÿ_™_¨e¯o©o¸u¿¹ÓO�Ù˜HŸN™N°Õ:Ù˜HŸN™N°×:ó Pó 1r   c                ó²  € V P                   V P                  3 F£  pVP                  4        FŒ  p \        P                  P
                  P                  VRR7       \        VR4      '       g   KC  RVP                  9   g   KV  \        P                  P
                  P                  P                  VRRR7       KŽ  	  K¥  	  R#   \        \        3 d     Lzi ; i)z=Remove the weight norm from the acoustic encoder and decoder.r
  r#  r&  T)Úleave_parametrizedN)r  r  r  r   rD   r%  Úremove_weight_normrx   ÚAttributeErrorÚhasattrr&  ÚparametrizeÚremove_parametrizations)rK   r  Úms   &  r   r1  Ú(XcodecPreTrainedModel.remove_weight_normŽ  s©   € à×,Ñ,¨d×.CÑ.CÓDˆFØ—^‘^Ö%�ðÜ—H‘H—N‘N×5Ñ5°a¸hÐ5ÔGô ˜1Ð0×1Ô1°hÀ!×BTÑBTÖ6TÜ—H‘H—N‘N×.Ñ.×FÑFÀqÈ(ÐgkÐFÖló &ó Eøô #¤NÐ3ô Ùðús   °+CÃCÃCc                ó8   a€ R V3R llo\        S! V4      4      # )z1
Recursively iterate to fetch all Conv1d layers.
c                ó8   € V ^8„  d   QhR\         P                  /# )r   r  ©rD   ÚModule)r   s   "r   r   Ú>XcodecPreTrainedModel._get_conv1d_layers.<locals>.__annotate__Ÿ  s   € ÷ 
	ñ 
	´·	±	ñ 
	r   c                 óÊ   <€ . p\        V \        P                  4      '       d   VP                  V 4       V P	                  4        F  pVP                  S! V4      4       K  	  V# rU   )r  rD   rH   rî   ÚchildrenÚextend)r  Úparams_listÚchildÚget_conv1d_layers_recursives   &  €r   rB  ÚMXcodecPreTrainedModel._get_conv1d_layers.<locals>.get_conv1d_layers_recursiveŸ  sV   ø€ ØˆKä˜&¤"§)¡)×,Ò,Ø×"Ñ" 6Ô*ð  Ÿ™Ö*�Ø×"Ñ"Ñ#>¸uÓ#EÖFñ +ð Ðr   )Útuple)rK   r  rB  s   &&@r   Ú_get_conv1d_layersÚ(XcodecPreTrainedModel._get_conv1d_layers™  s    ø€ ÷
	ð 
	ô Ñ0°Ó8Ó9Ð9r   Nc                ó\   € Vf   T pV P                  V4      pV F  p\        WA4      pK  	  V# )z_
For a given module, compute the output length that would be obtained after all Conv1d layers.
)rE  r   )rK   Úinput_lengthr  Úconv1d_layersÚlayers   &&&  r   Ú_get_conv1d_output_lengthsÚ0XcodecPreTrainedModel._get_conv1d_output_lengths­  s:   € ð Š>ØˆFà×/Ñ/°Ó7ˆã"ˆEÜ/°ÓDŠLñ #ð Ðr   r   rU   )r   r    r!   r"   r#   r   Úconfig_classÚbase_model_prefixÚmain_input_nameÚinput_modalitiesÚ_no_split_modulesr   Úno_gradr   r-  r1  r   rE  rK  r%   r&   r'   s   @r   rü   rü   E  sm   ø‡ € ñð
  €LØ ÐØ$€OØÐØ;Ð<Ðà
‡]‚]ƒ_ñ#*ó ð#*òJ;ò,	mð ñ:ó ð:÷&ò r   rü   z$The Xcodec neural audio codec model.)Úcustom_introc                   óÊ   a a€ ] tR tRt oV 3R lt]V3R lR l4       tV3R lR lt]RV3R lR ll4       t	]RV3R	 lR
 ll4       t
]]RV3R lR ll4       4       tRtVtV ;t# )r  i¼  c                óJ  <€ \         SV `  V4       Wn        VP                  ^,          V n        \
        P                  ! VP                  4      pVP                  V n	        VP                  V n        V P                  V P                  4       \        V4      V n        \        V4      V n        \
        P                  ! VP"                  4      P%                  4       V n        \(        P*                  ! VP,                  VP,                  4      V n        \(        P*                  ! VP,                  VP"                  P,                  4      V n        \(        P*                  ! VP,                  VP                  P,                  4      V n        \5        V4      V n        V P9                  4        R# )r   N)rB   rC   r4   Ú
hop_lengthÚpadr   Úfrom_configÚacoustic_model_configÚencoderr  Údecoderr  Ú_adjust_dac_decoderrr   Úencoder_semanticr‘   Údecoder_semanticÚsemantic_model_configÚevalÚsemantic_modelrD   r  Úhidden_sizeÚfcÚfc1Úfc2rÔ   rò   Ú	post_init)rK   r4   Úacoustic_modelrL   s   && €r   rC   ÚXcodecModel.__init__¾  s'  ø€ Ü‰Ñ˜Ô ØŒØ×$Ñ$¨Õ)ˆŒÜ"×.Ò.¨v×/KÑ/KÓLˆØ .× 6Ñ 6ˆÔØ .× 6Ñ 6ˆÔØ× Ñ  ×!6Ñ!6Ô7Ü /°Ó 7ˆÔÜ /°Ó 7ˆÔÜ'×3Ò3°F×4PÑ4PÓQ×VÑVÓXˆÔÜ—)’)˜F×.Ñ.°×0BÑ0BÓCˆŒÜ—9’9˜V×/Ñ/°×1MÑ1M×1YÑ1YÓZˆŒÜ—9’9˜V×/Ñ/°×1MÑ1M×1YÑ1YÓZˆŒÜ9¸&ÓAˆŒð 	�‰Ör   c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r   r[  r:  )r   r   s   "€r   r   ÚXcodecModel.__annotate__Ò  s   ø€ ÷ )ñ )¡R§Y¡Yñ )r   c                óÈ  € V P                  4        Fs  p\        V\        P                  4      '       g   K%  \        VP                  \
        4      '       d   VP                  ^ ,          MVP                  pV^,          3Vn        Ku  	  \        V R4      '       dI   \        V P                  \        P                  4      '       d   \        P                  ! 4       V n        R# R# R# )zÌ
DAC implemented in Xcodec is slightly different from the HF version.
DAC in Xcodec adjusts the output padding in every ConvTranspose1d in the decoder and removes
the final `nn.Tanh` activation function.
ÚtanhN)r  r  rD   rŠ   r=   rD  r‹   r3  rl  ÚTanhÚIdentity)r[  r  r=   s   &  r   r\  ÚXcodecModel._adjust_dac_decoderÑ  s–   € ð —o‘oÖ'ˆFÜ˜&¤"×"4Ñ"4×5Ô5Ü-7¸¿¹Äu×-MÒ-M˜Ÿ™ qÖ)ÐSY×S`ÑS`�Ø)/°!­¨�Ö%ñ (ô �7˜F×#Ò#¬
°7·<±<ÄÇÁ×(IÒ(IÜŸ;š;›=ˆGŽLñ )JÑ#r   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r   rþ   rQ   r/   )r   r   s   "€r   r   rj  ß  s'   ø€ ÷ #ñ #±u×7HÑ7Hð #ÉU×M^ÑM^ñ #r   c                óp  € VR,          p\         P                  ! WP                  V P                  34      p\        P                  ! 4       ;_uu_ 4        V P	                  VRR7      pVP
                  pRRR4       \        P                  ! X^R7      pVP                  ^R7      #   + '       g   i     L:; i)ºNNNT)Úoutput_hidden_statesNr¨   )rr  r“   rr  )r½   rW  r   rR  ra  r°   rï   r  )rK   rþ   Úoutputsr°   Ústackeds   &&   r   Ú_extract_semantic_featuresÚ&XcodecModel._extract_semantic_featuresß  s‚   € Ø# GÕ,ˆÜ—u’u˜\¯H©H°d·h±hÐ+?Ó@ˆÜ�]Š]�_�_Ø×)Ñ)¨,ÈTÐ)ÓRˆGØ#×1Ñ1ˆM÷ ô —+’+˜m°Ô3ˆØ�|‰| ˆ|Ó"Ð"÷ �_ús   Á B%Â%B5	c          	      ó†   <€ V ^8„  d   QhRS[ P                  RS[R,          RS[R,          RS[ P                  S[,          /# )r   rþ   rç   NÚreturn_dictrQ   )r   rS   ÚfloatÚboolr)   )r   r   s   "€r   r   rj  ê  sI   ø€ ÷ 10ñ 10á—l‘lð10ñ ˜4•<ð10ñ ˜D•[ð	10ñ
 
�‰Ñ+Õ	+ñ10r   c                ó:  € Ve   TMV P                   P                  pVP                  ^,          pV^8w  d   \        RV 24      hVf   V P                   P                  R,          pM@W P                   P                  9  d'   \        RV RV P                   P                   R24      hV P                  V4      P                  4       pV P                  VP                  ^^4      4      pV P                  VP                  ^,          V P                  4      VP                  ^,          8w  d=   V P                  \        P                  ! WP                  V P                  34      4      pMV P                  V4      p\        P                  ! VP                  VP                   4      V.^R7      pV P#                  VP                  ^^4      4      P                  ^^4      pV P$                  P'                  W‚4      p	V	P                  ^ ^4      p	V'       g   V	# \)        V	4      # )a  
input_values (`torch.FloatTensor` of shape `(batch_size, channels, num_samples)`):
    Float values of the input audio waveform.
bandwidth (`float`, *optional*):
    The target bandwidth in (kbps) supports only values in `config.target_bandwidths`.
    Defaults to the highest available bandwidth `4.0` kbps.
return_dict (`bool`, *optional*):
    Whether or not to return a [`~utils.ModelOutput`].

Returns:
    `torch.LongTensor` of shape `(batch_size, num_quantizers, codes_length)` containing the discrete encoded audio codes.
zAudio must be mono, but got z)This model doesn't support the bandwidth z. Select one of Ú.r¨   rª   )r4   ry  r·   rx   Útarget_bandwidthsrv  Údetachr]  Ú	transposerK  r  r½   rW  r   Úcatr¿   rÀ   rc  rò   rº   r)   )
rK   rþ   rç   ry  ÚchannelsÚe_semantic_inputÚ
e_semanticÚ
e_acousticrì   r   s
   &&&&      r   rº   ÚXcodecModel.encodeé  sÉ  € ð& &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà×%Ñ% aÕ(ˆØ�qŒ=ÜÐ;¸H¸:ÐFÓGÐGàÒØŸ™×5Ñ5°bÕ9‰IØŸk™k×;Ñ;Ô;ÜØ;¸I¸;ÐFVÐW[×WbÑWb×WtÑWtÐVuÐuvÐwóð ð  ×:Ñ:¸<ÓH×OÑOÓQÐØ×*Ñ*Ð+;×+EÑ+EÀaÈÓ+KÓLˆ
ð ×*Ñ*¨<×+=Ñ+=¸aÕ+@À$×BWÑBWÓXÐ\f×\lÑ\lÐmnÕ\oÔoØ×.Ñ.¬q¯uªu°\ÇHÁHÈdÏhÉhÐCWÓ/XÓY‰Jà×.Ñ.¨|Ó<ˆJä—Y’Y 
§¡¨j×.?Ñ.?Ó @À*ÐMÐSTÔUˆ
Ø—W‘W˜Z×1Ñ1°!°QÓ7Ó8×BÑBÀ1ÀaÓHˆ
Ø—n‘n×+Ñ+¨JÓBˆØ!×+Ñ+¨A¨qÓ1ˆçØÐä" ;Ó/Ð/r   c                ór   <€ V ^8„  d   QhRS[ P                  RS[R,          RS[ P                  S[,          /# )r   r   ry  NrQ   )r   rS   r{  r-   )r   r   s   "€r   r   rj    s;   ø€ ÷ 1ñ 1á—\‘\ð1ñ ˜D•[ð1ñ 
�‰Ñ+Õ	+ñ	1r   c                óB  € Ve   TMV P                   P                  pVP                  ^ ^4      pV P                  P	                  V4      pV P                  VP                  ^^4      4      P                  ^^4      pV P                  V4      pV'       g   V# \        V4      # )al  
audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`):
    Discrete code indices computed using `model.encode`.
return_dict (`bool`, *optional*):
    Whether or not to return a [`~utils.ModelOutput`]

Returns:
    Decoded audio values of shape `(batch_size, channels, num_samples)` obtained using the decoder part of
    Xcodec.
)r4   ry  r€  rò   rÂ   re  r  r-   )rK   r   ry  rÁ   Úquantized_acousticr   s   &&&   r   rÂ   ÚXcodecModel.decode  sŽ   € ð  &1Ò%<‘kÀ$Ç+Á+×BYÑBYˆà!×+Ñ+¨A¨qÓ1ˆØ—N‘N×)Ñ)¨+Ó6ˆ	Ø!ŸX™X i×&9Ñ&9¸!¸QÓ&?Ó@×JÑJÈ1ÈaÓPÐØ×,Ñ,Ð-?Ó@ˆçØÐä" <Ó0Ð0r   c                óÚ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[R,          RS[S[,          RS[S[ P                  S[ P                  3,          S[,          /# )r   rþ   r   Nrç   ÚkwargsrQ   )r   rS   rz  r   r	   rD  r   )r   r   s   "€r   r   rj  ;  sr   ø€ ÷ 2Pñ 2Pá—l‘lð2Pñ —\‘\ DÕ(ð2Pñ ˜4•<ð	2Pñ
 Ñ+Õ,ð2Pñ 
‰u�|‰|™UŸ\™\Ð)Õ	*©\Õ	9ñ2Pr   c                ó¸   € VP                   R,          pVf   V P                  WRR7      pV P                  VRR7      ^ ,          RRV13,          p\        W&R7      # )aK  
input_values (`torch.FloatTensor` of shape `(batch_size, channels, num_samples)`):
    The raw float values of the input audio waveform.
audio_codes (`torch.LongTensor`  of shape `(batch_size, num_quantizers, codes_length)`:
    Discrete code indices computed using `model.encode`.
bandwidth (`float`, *optional*):
    Target bandwidth in kbps. Must be one of `config.target_bandwidths`. Defaults to the highest available bandwidth.
bandwidth (`float`, *optional*):
    Target bandwidth in kbps. Must be one of `config.target_bandwidths`. Defaults to the highest available bandwidth.

Returns:
    `XcodecOutput` or tuple `(audio_codes, audio_values)`:
    - `audio_codes` of shape `(batch_size, num_quantizers, codes_length)`: the quantized discrete codes.
    - `audio_values` of shape `(batch_size, channels, num_samples)`: the reconstructed audio waveform given the codes.

Example:

```python
>>> from datasets import load_dataset
>>> from transformers import AutoFeatureExtractor, XcodecModel

>>> model_id = "hf-audio/xcodec-hubert-librispeech"
>>> model = XcodecModel.from_pretrained(model_id)
>>> feature_extractor = AutoFeatureExtractor.from_pretrained(model_id)

>>> dataset = load_dataset("hf-internal-testing/librispeech_asr_dummy", "clean", split="validation")
>>> dataset = dataset.cast_column("audio", Audio(sampling_rate=feature_extractor.sampling_rate))
>>> audio_sample = dataset[0]['audio']['array']

>>> inputs = feature_extractor(raw_audio=audio_sample, return_tensors="pt")

>>> outputs = model(**inputs)
>>> audio_codes = outputs.audio_codes
>>> audio_values = outputs.audio_values
```
NF)ry  T.)r   r   rª   )r·   rº   rÂ   r   )rK   rþ   r   rç   rŒ  Úlengthr   s   &&&&,  r   rX   ÚXcodecModel.forward9  s\   € ðZ ×#Ñ# BÕ'ˆàÒØŸ+™+ lÈ5˜+ÓQˆKà—{‘{ ;¸D�{ÓAÀ!ÕDÀSÈ'È6È'À\ÕRˆä¨ÔOÐOr   )r  r  r4   r^  r]  rc  rd  re  rW  rò   ra  )NNrU   )r   r    r!   r"   rC   Ústaticmethodr\  rv  r
   rº   rÂ   r   rX   r%   r&   rZ   r[   s   @@r   r  r  ¼  s…   ù‡ € õð& ÷)ó ð)÷#ð #ð ÷10ñ 10ó ð10ðf ÷1ñ 1ó ð1ð6 Ø÷2Pñ 2Pó ó ÷2Pð 2Pr   r  )-r#   rß   Údataclassesr   Ú	functoolsr   r   Útorch.nnrD   Útorch.nn.functionalÚ
functionalr½   Ú r   r  Úaudio_utilsr   Úmodeling_utilsr   Úprocessing_utilsr   r%  r   r	   r
   r   Úautor   Úconfiguration_xcodecr   r   r)   r-   r;  r2   r]   rr   r†   r‘   rš   rÅ   rÔ   rü   r  Ú__all__r   r   r   Ú<module>r�     sh  ðñ !ã Ý !Ý ã Ý ß Ð å &Ý /Ý :Ý &÷ó õ Ý .ð ô
2�;ó 
2ó ð
2ð ô0˜+ó 0ó ð0ð ô2˜+ó 2ó ð2ô,˜Ÿ™ô ,ô6 §¡ô ô&�b—i‘iô ô<˜2Ÿ9™9ô ô>%�b—i‘iô %ôP˜bŸi™iô ô@˜rŸy™yô ô,/ r§y¡yô /ðd ôsÐ8ó só ðsñl ÐGÔHôpPÐ'ó pPó IðpPðf Ð1Ð
2‚r   