Ë
    È:j™1  ã                   ób  — d dl Z d dlZd dlZd dlmZ d dlmZmZ d dlZd dl	Z
d dlZd dlmc mZ ddlmZmZmZ ddlmZ erddlmZ dej0                  d	efd
„Z ej6                  d¬«      de
j8                  fd„«       Z ej6                  dd¬«      de
j8                  fd„«       Zd.d„Zdej0                  de
j8                  fd„Z e G d„ d«      «       Z!dddœdddedee   dej0                  deded e"dee!   fd!„Z#d"ee!   d#e$d$e$fd%„Z%d&d'd(œd)ee&   dddedej0                  ded*e$d+e$d,e"fd-„Z'y)/é    N)Ú	dataclass)ÚTYPE_CHECKINGÚListé   )Ú
HOP_LENGTHÚSAMPLE_RATEÚTOKENS_PER_SECOND)Ú	Tokenizer)ÚWhisperÚxÚfilter_widthc                 óî  — |dz  }| j                   d   |k  r| S | j                  x}dk  r
| dddd…f   } |dkD  r|dz  dk(  sJ d«       ‚d}t        j                  | |dz  |dz  ddfd¬«      } | j                  r	 dd	lm}  || |«      }|€,| j                  d|d«      j                  «       d   d|dz  f   }|dk  r|d   }|S # t        t        j                  f$ r t        j                  d
«       Y Œjw xY w)zMApply a median filter of width `filter_width` along the last dimension of `x`é   éÿÿÿÿNr   r   z&`filter_width` should be an odd numberÚreflect)Úmode)Úmedian_filter_cudaz}Failed to launch Triton kernels, likely due to missing CUDA toolkit; falling back to a slower median kernel implementation....©r   r   )ÚshapeÚndimÚFÚpadÚis_cudaÚ
triton_opsr   ÚRuntimeErrorÚ
subprocessÚCalledProcessErrorÚwarningsÚwarnÚunfoldÚsort)r   r   Ú	pad_widthr   Úresultr   s         úc/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/whisper/timing.pyÚmedian_filterr%      s'  € à Ñ!€IØ‡w�wˆr�{�iÒàˆà—‘ˆˆ˜1Òàˆd�Dš!ˆmÑˆð 	�qÒ˜\¨AÑ-°Ò2ð0à/ó0Ø2ð €FÜ	�‰ˆa�, !Ñ# \°QÑ%6¸¸1Ð=ÀIÔN€AØ‡y‚yð	Ý6á'¨¨<Ó8ˆFð €~à—‘˜"˜l¨AÓ.×3Ñ3Ó5°aÑ8¸¸lÈaÑ>OÐ9OÑPˆàˆq‚yØ˜‘ˆà€Møô œj×;Ñ;Ð<ò 	Ü�M‰MðKöð	ús   Á:C Ã.C4Ã3C4T)ÚnopythonÚtracec                 ó¦  — | j                   d   dz
  }| j                   d   dz
  }d| dd d …f<   d| d d …df<   g }|dkD  s|dkD  re|j                  |dz
  |dz
  f«       | ||f   dk(  r|dz  }|dz  }n+| ||f   dk(  r|dz  }n| ||f   dk(  r|dz  }nt        d«      ‚|dkD  rŒ_|dkD  rŒet        j                  |«      }|d d d…d d …f   j
                  S )Nr   r   r   zUnexpected trace[i, j]r   )r   ÚappendÚ
ValueErrorÚnpÚarrayÚT)r'   ÚiÚjr#   s       r$   Ú	backtracer0   9   s  € à�‰�A‰˜Ñ€AØ�‰�A‰˜Ñ€AØ€Eˆ!ŠQˆ$�KØ€EŠ!ˆQˆ$�Kà€FØ
ˆaŠ%�1�q’5Ø�‰�q˜1‘u˜a !™e�nÔ%à��A�‰;˜!ÒØ�‰FˆAØ�‰F‰AØ�1�a�4‰[˜AÒØ�‰F‰AØ�1�a�4‰[˜AÒØ�‰F‰AäÐ5Ó6Ð6ð ˆa‹%�1�q“5ô �X‰X�fÓ€FØ‘$�B�$š�'‰?×ÑÐó    )r&   Úparallelc                 ó&  — | j                   \  }}t        j                  |dz   |dz   ft        j                  ¬«      t        j                  z  }t        j                  |dz   |dz   ft        j                  ¬«       }d|d<   t        d|dz   «      D ]u  }t        d|dz   «      D ]a  }||dz
  |dz
  f   }||dz
  |f   }|||dz
  f   }	||k  r
||	k  r|d}}
n||k  r
||	k  r|d}}
n|	d}}
| |dz
  |dz
  f   |
z   |||f<   ||||f<   Œc Œw t        |«      S )Nr   ©Údtyper   r   r   )r   r+   ÚonesÚfloat32ÚinfÚranger0   )r   ÚNÚMÚcostr'   r/   r.   Úc0Úc1Úc2ÚcÚts               r$   Údtw_cpurB   R   s?  € à�7‰7�D€A€qÜ�7‰7�A˜‘E˜1˜q™5�>¬¯©Ô4´r·v±vÑ=€DÜ�W‰W�a˜!‘e˜Q ™U�^¬2¯:©:Ô6Ð6€Eà€Dˆ�JÜ�1�a˜!‘e‹_ò ˆÜ�q˜!˜a™%“ò 	ˆAØ�a˜!‘e˜Q ™U�lÑ#ˆBØ�a˜!‘e˜Q�h‘ˆBØ�a˜˜Q™�h‘ˆBà�BŠw˜2 š7Ø˜1�1‘Ø�b’˜R "šWØ˜1�1‘à˜1�1�à˜1˜q™5 ! a¡%˜<™¨1Ñ,ˆD��A�‰JØˆE�!�Q�$ŠKñ	ðô  �UÓÐr1   c                 ó~  — ddl m} | j                  \  }}||k  s
J d|›�«       ‚t        j                  | d|dz   ft
        j                  ¬«      j                  «       d |||z   z   j                  |||z   «      }|j                  j                  «       }t        j                  ||z   dz   |dz   «      t
        j                  z  }d|d<   |j                  | j                  «      }t        j                  |t        j                   ¬«      } |d	   ||||j#                  d«      |j#                  d«      |j#                  d«      |||¬
«	       |j                  j                  «       d |dz   ||z   dz   z   j                  |dz   ||z   dz   «      d d …d |dz   …f   }t%        |j'                  «       j)                  «       «      S )Nr   )Ú
dtw_kernelz$M should be smaller than BLOCK_SIZE=r   )Úvaluer   r   r4   )r   )Ú
BLOCK_SIZEé   )r   rD   r   r   r   r+   r8   ÚflattenÚreshaper-   Ú
contiguousÚtorchr6   ÚtoÚdeviceÚ
zeros_likeÚint32Ústrider0   ÚcpuÚnumpy)r   rF   rD   r;   r:   Úx_skewr<   r'   s           r$   Údtw_cudarT   l   s™  € Ý&à�7‰7�D€A€qØˆzŠ>ÐDÐB°z°mÐDÓDˆ>ô 	
�‰ˆa�!�Q˜‘U�¤2§6¡6Ô*×2Ñ2Ó4°]°q¸AÀ¹E±{ÐC×KÑKÈAÈqÐSTÉuÓUð ð �X‰X× Ñ Ó"€FÜ�:‰:�a˜!‘e˜a‘i  Q¡Ó'¬"¯&©&Ñ0€DØ€Dˆ�JØ�7‰7�1—8‘8Ó€DÜ×Ñ˜T¬¯©Ô5€Eà€JˆtÑØØØØ�‰�aÓØ�‰�A‹Ø�‰�Q‹Ø	Ø	Øõ
ð �G‰G�O‰OÓÐ5  Q¡¨1¨q©5°1©9Ñ 5Ð6×>Ñ>¸qÀ1¹uÀaÈ!ÁeÈaÁiÓPÚ	ˆ7ˆQ�‰Uˆ7ˆ
ñ€Eô �U—Y‘Y“[×&Ñ&Ó(Ó)Ð)r1   Úreturnc                 ó  — | j                   r	 t        | «      S t        | j                  «       j                  «       j                  «       «      S # t        t        j                  f$ r t        j                  d«       Y Œew xY w)NzsFailed to launch Triton kernels, likely due to missing CUDA toolkit; falling back to a slower DTW implementation...)r   rT   r   r   r   r   r   rB   ÚdoublerQ   rR   )r   s    r$   ÚdtwrX   �   si   € Ø‡y‚yð	Ü˜A“;Ðô �1—8‘8“:—>‘>Ó#×)Ñ)Ó+Ó,Ð,øô œj×;Ñ;Ð<ò 	Ü�M‰MðAöð	ús   Ž
A Á.A?Á>A?c                   óF   — e Zd ZU eed<   ee   ed<   eed<   eed<   eed<   y)Ú
WordTimingÚwordÚtokensÚstartÚendÚprobabilityN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   ÚintÚfloat© r1   r$   rZ   rZ   š   s!   … à
ƒIØ�‰IÓØƒLØ	ƒJØÔr1   rZ   é   g      ð?)Úmedfilt_widthÚqk_scaleÚmodelr   Ú	tokenizerÚtext_tokensÚmelÚ
num_framesri   rj   c                ó  ‡'— t        |«      dk(  rg S t        j                  g |j                  ¢|j                  ‘|¢|j
                  ‘«      j                  | j                  «      }d g| j                  j                  z  Š't        | j                  j                  «      D ��	cg c]%  \  }}	|	j                  j                  |fˆ'fd„	«      ‘Œ' }
}}	ddlm} t        j"                  «       5   |«       5   | |j%                  d«      |j%                  d«      «      d   }|t        |j                  «      d …d |j
                  …f   }|j'                  d¬«      }|t)        j*                  t        |«      «      |f   }|j-                  «       }d d d «       d d d «       |
D ]  }|j/                  «        Œ t        j0                  | j2                  j5                  «       j6                  D ��cg c]  \  }}‰'|   |   ‘Œ c}}«      }|d d …d d …d |dz  …f   }||z  j'                  d¬«      }t        j8                  |dd	d
¬«      \  }}||z
  |z  }t;        ||«      }|j=                  d¬«      }|t        |j                  «      d }t?        | «      \  }}|jA                  ||j
                  gz   «      \  }}t        |«      dk  rg S t)        jB                  t)        jD                  |d d D �cg c]  }t        |«      ‘Œ c}«      d«      }t)        jB                  t)        jF                  |«      dd¬«      jI                  tJ        «      }||   tL        z  }||d d    }||dd     } tO        |d d |dd  «      D ��!cg c]  \  }}!t)        j<                  ||! «      ‘Œ }"}}!tO        |||| |"«      D �#��$�%�&cg c]  \  }#}}$}%}&tQ        |#||$|%|&«      ‘Œ c}&}%}$}}#S c c}	}w # 1 sw Y   �ŒOxY w# 1 sw Y   �ŒTxY wc c}}w c c}w c c}!}w c c}&}%}$}}#w )Nr   c                 ó4   •— ‰j                  ||d   d   «      S )Nr   r   )Ú__setitem__)Ú_ÚinsÚoutsÚindexÚQKss       €r$   ú<lambda>z find_alignment.<locals>.<lambda>½   s   ø€ ¨#¯/©/¸%ÀÀbÁÈ!ÁÓ*M€ r1   r   )Údisable_sdpar   )Údimr   éþÿÿÿTF)rz   ÚkeepdimÚunbiased)Úaxis)r   r   )Úconstant_values))ÚlenrK   ÚtensorÚsot_sequenceÚno_timestampsÚeotrL   rM   ÚdimsÚn_text_layerÚ	enumerateÚdecoderÚblocksÚ
cross_attnÚregister_forward_hookrk   ry   Úno_gradÚ	unsqueezeÚsoftmaxr+   ÚarangeÚtolistÚremoveÚstackÚalignment_headsÚindicesr-   Ústd_meanr%   ÚmeanrX   Úsplit_to_word_tokensr   ÚcumsumÚdiffÚastypeÚboolr	   ÚziprZ   )(rk   rl   rm   rn   ro   ri   rj   r\   r.   ÚblockÚhooksry   ÚlogitsÚsampled_logitsÚtoken_probsÚtext_token_probsÚhookÚ_lÚ_hÚweightsÚstdr–   ÚmatrixÚtext_indicesÚtime_indicesÚwordsÚword_tokensrA   Úword_boundariesÚjumpsÚ
jump_timesÚstart_timesÚ	end_timesr/   Úword_probabilitiesr[   r]   r^   r_   rw   s(                                          @r$   Úfind_alignmentr³   £   sö  ø€ ô ˆ;Ó˜1ÒØˆ	ä�\‰\ð	
Ø×#Ñ#ð	
à×#Ñ#ð	
ð ð	
ð �M‰Mð		
ó÷ 	�bˆ�‰Óð ð ˆ&�5—:‘:×*Ñ*Ñ
*€Cô
 " %§-¡-×"6Ñ"6Ó7÷	ñ ˆAˆuð 	×Ñ×.Ñ.Ø'(ÔMõ	
ð€Eñ õ $ä	�‰‹ñ 5™,›.ñ 5Ù�s—}‘} QÓ'¨×)9Ñ)9¸!Ó)<Ó=¸aÑ@ˆØ¤ I×$:Ñ$:Ó ;Ñ =¸ÀÇÁ¸Ð NÑOˆØ$×,Ñ,°Ð,Ó4ˆØ&¤r§y¡y´°[Ó1AÓ'BÀKÐ'OÑPÐØ+×2Ñ2Ó4Ð÷5÷ 5ð ò ˆØ�‰�ðô �k‰k°U×5JÑ5J×5RÑ5RÓ5T×5VÑ5V×W©6¨2¨r˜3˜r™7 2›;ÓWÓX€GØ’ašÐ-˜j¨A™oÐ-Ð-Ñ.€GØ˜Ñ!×*Ñ*¨rÐ*Ó2€GÜ—‘˜w¨B¸ÀuÔM�I€CˆØ˜‰~ Ñ$€GÜ˜G ]Ó3€Gà�\‰\˜qˆ\Ó!€FØ”C˜	×.Ñ.Ó/°"Ð5€FÜ!$ f W£Ñ€L�,à"×7Ñ7¸ÀyÇ}Á}ÀoÑ8UÓVÑ€Eˆ;Ü
ˆ;Ó˜1Òð ˆ	Ü—f‘fœRŸY™Y¸ÀCÀRÐ8HÖ'I°1¬¨A­Ò'IÓJÈFÓS€Oä�F‰F”2—7‘7˜<Ó(¨&À!ÔD×KÑKÌDÓQ€EØ˜eÑ$Ô'8Ñ8€JØ˜_¨S¨bÐ1Ñ2€KØ˜?¨1¨2Ð.Ñ/€Iô ˜¨¨Ð,¨o¸a¸bÐ.AÓB÷áˆAˆqô 	�‰Ð   1Ð%Õ&ðÐñ ô 69Ø�; ¨YÐ8Jó6
÷ò á1ˆD�&˜%  kô 	�4˜ ¨¨[Õ9öð ùóe÷5ñ 5ú÷ 5ñ 5üó Xùò& (Jùóùö
sC   Â"*OÃ)O#Ã1BOÆ	O#Ç&O0
Ë&O6Í3"O;Î-PÏO 	ÏO#Ï#O-Ú	alignmentÚ	prependedÚappendedc                 óÆ  — t        | «      dz
  }t        | «      dz
  }|dk\  r™| |   }| |   }|j                  j                  d«      rg|j                  j                  «       |v rK|j                  |j                  z   |_        |j                  |j                  z   |_        d|_        g |_        n|}|dz  }|dk\  rŒ™d}d}|t        | «      k  r•| |   }| |   }|j                  j                  d«      sY|j                  |v rK|j                  |j                  z   |_        |j                  |j                  z   |_        d|_        g |_        n|}|dz  }|t        | «      k  rŒ”y y )Nr   r   r   ú Ú )r€   r[   Ú
startswithÚstripr\   Úendswith)r´   rµ   r¶   r.   r/   ÚpreviousÚ	followings          r$   Úmerge_punctuationsr¿   õ   sI  € äˆI‹˜Ñ€AÜˆI‹˜Ñ€AØ
ˆqŠ&Ø˜Q‘<ˆØ˜a‘Lˆ	Ø�=‰=×#Ñ# CÔ(¨X¯]©]×-@Ñ-@Ó-BÀiÑ-Oà%Ÿ]™]¨Y¯^©^Ñ;ˆIŒNØ'Ÿ™°×1AÑ1AÑAˆIÔØˆHŒMØ ˆH�OàˆAØ	ˆQ‰ˆð ˆq‹&ð 	
€AØ	€AØ
Œc�)‹nÒ
Ø˜Q‘<ˆØ˜a‘Lˆ	Ø�}‰}×%Ñ% cÔ*¨y¯~©~ÀÑ/Ià$ŸM™M¨I¯N©NÑ:ˆHŒMØ&Ÿo™o°	×0@Ñ0@Ñ@ˆHŒOØˆIŒNØ!ˆIÕàˆAØ	ˆQ‰ˆð Œc�)‹nÕ
r1   u   "'â€œÂ¿([{-u   "'.ã€‚,ï¼Œ!ï¼�?ï¼Ÿ:ï¼šâ€�)]}ã€�)Úprepend_punctuationsÚappend_punctuationsÚsegmentsrÀ   rÁ   Úlast_speech_timestampc                 ó^  — t        | «      dk(  ry | D �	�
cg c]%  }	|	d   D �
cg c]  }
|
|j                  k  sŒ|
‘Œ c}
‘Œ' }}	}
t        t        j                  j                  |«      «      }t        |||||fi |¤Ž}t        j                  |D �cg c]  }|j                  |j                  z
  ‘Œ c}«      }||j                  «          }t        |«      dkD  rt        j                  |«      nd}t        dt        |«      «      }|dz  }t        |«      dkD  ršd}t        dt        |«      «      D ]€  }||   j                  ||   j                  z
  |kD  sŒ&||   j                   |v r||   j                  |z   ||   _	        ŒR||dz
     j                   |v sŒg||   j                  |z
  ||   _
        Œ‚ t#        |||«       | d   d   t$        z  t&        z  }d}t)        | |«      D �];  \  }	}d}g }|t        |«      k  r¹|t        |«      k  r«||   }|j                   r`|j+                  t-        |j                   t/        ||j                  z   d«      t/        ||j                  z   d«      |j0                  ¬	«      «       |t        |j2                  «      z  }|dz  }|t        |«      k  r|t        |«      k  rŒ«t        |«      dkD  �rV|d   d
   |z
  |dz  kD  r¤|d   d
   |d   d   z
  |kD  s%t        |«      dkD  r‚|d   d
   |d   d   z
  |dz  kD  rkt        |«      dkD  rB|d   d
   |d   d   z
  |kD  r.t5        |d   d
   dz  |d   d
   |z
  «      }|x|d   d
<   |d   d<   t5        d|d   d
   |z
  «      |d   d<   |	d   |d   d
   k  r:|	d   dz
  |d   d   kD  r)t5        dt        |d   d
   |z
  |	d   «      «      |d   d<   n|d   d   |	d<   |	d
   |d   d   kD  r0|	d
   dz   |d   d
   k  rt5        |d   d   |z   |	d
   «      |d   d
<   n|d   d
   |	d
<   |	d
   }||	d<   �Œ> y c c}
w c c}
}	w c c}w )Nr   r\   g        gffffffæ?r   u   .ã€‚!ï¼�?ï¼Ÿr   Úseek)r[   r]   r^   r_   r^   é   r]   g      à?r   r«   )r€   r„   ÚlistÚ	itertoolsÚchainÚfrom_iterabler³   r+   r,   r^   r]   ÚnonzeroÚmedianÚminrf   r9   r[   r¿   r   r   rœ   r)   ÚdictÚroundr_   r\   Úmax)rÂ   rk   rl   rn   ro   rÀ   rÁ   rÃ   ÚkwargsÚsegmentÚtokenÚtext_tokens_per_segmentrm   r´   rA   Úword_durationsÚmedian_durationÚmax_durationÚsentence_end_marksr.   Útime_offsetÚ
word_indexÚsaved_tokensr«   ÚtimingÚboundarys                             r$   Úadd_word_timestampsrÞ     s¶  € ô ˆ8ƒ}˜ÒØð  ÷àð $ HÑ-ÖG�5°¸¿¹Ó1FŠÔGðÐñ ô
 ”y—‘×4Ñ4Ð5LÓMÓN€KÜ˜u i°¸cÀ:ÑXÐQWÑX€IÜ—X‘X¸	ÖB°1˜qŸu™u q§w¡w›ÒBÓC€NØ# N×$:Ñ$:Ó$<Ñ=€NÜ36°~Ó3FÈÒ3J”b—i‘i Ô/ÐPS€OÜ˜#œu _Ó5Ó6€OØ" QÑ&€Lô ˆ>Ó˜QÒØ+Ðä�qœ#˜i›.Ó)ò 	IˆAØ˜‰|×Ñ )¨A¡,×"4Ñ"4Ñ4°|ÓCØ˜Q‘<×$Ñ$Ð(:Ñ:Ø'0°¡|×'9Ñ'9¸LÑ'H�I˜a‘LÕ$Ø˜q 1™uÑ%×*Ñ*Ð.@Ò@Ø)2°1©×)9Ñ)9¸LÑ)H�I˜a‘LÕ&ð	Iô �yÐ"6Ð8KÔLà˜1‘+˜fÑ%¬
Ñ2´[Ñ@€KØ€Jä # HÐ.EÓ Fó @!Ñˆ�ØˆØˆàœ3˜y›>Ò)¨l¼SÀÓ=MÒ.MØ˜zÑ*ˆFà�{Š{Ø—‘ÜØ#Ÿ[™[Ü# K°&·,±,Ñ$>ÀÓBÜ! +°·
±
Ñ":¸AÓ>Ø$*×$6Ñ$6ô	ôð œC §¡Ó.Ñ.ˆLØ˜!‰OˆJð œ3˜y›>Ò)¨l¼SÀÓ=MÓ.Mô$ ˆu‹:˜‹>ð �Q‰x˜‰Ð!6Ñ6¸È1Ñ9LÒLØ�a‘˜‘ %¨¡(¨7Ñ"3Ñ3°lÒBä˜“J ’NØ˜a™ ™¨%°©(°7Ñ*;Ñ;¸lÈQÑ>NÒNô ˜“J ’NØ˜a™ ™¨%°©(°7Ñ*;Ñ;¸lÒJä" 5¨¡8¨E¡?°QÑ#6¸¸a¹À¹È,Ñ8VÓW�HØ:BÐB�E˜!‘H˜U‘O e¨A¡h¨wÑ&7Ü$'¨¨5°©8°E©?¸\Ñ+IÓ$J��a‘˜Ñ!ð ˜Ñ  5¨¡8¨E¡?Ò2Ø˜GÑ$ sÑ*¨U°1©X°gÑ->Ò>ä$'Ø”s˜5 ™8 E™?¨_Ñ<¸gÀgÑ>NÓOó%��a‘˜Ò!ð $)¨¡8¨GÑ#4�˜Ñ ð ˜‘  r¡¨7Ñ!3Ò3Ø˜E‘N SÑ(¨5°©9°UÑ+;Ò;ä#&Ø˜"‘I˜gÑ&¨Ñ8¸'À%¹.ó$��b‘	˜%Ò ð "' r¡¨5Ñ!1�˜‘à$+¨E¡NÐ!à ˆ�ÓñA@!ùò; 	Hùóùò Cs    •P$¡P¶PºP$Â P*ÐP$)i   )(rÈ   r   r   Údataclassesr   Útypingr   r   ÚnumbarR   r+   rK   Útorch.nn.functionalÚnnÚ
functionalr   Úaudior   r   r	   rl   r
   rk   r   ÚTensorre   r%   ÚjitÚndarrayr0   rB   rT   rX   rZ   rf   r³   rc   r¿   rÎ   rÞ   rg   r1   r$   ú<module>ré      sÖ  ðÛ Û Û Ý !ß &ã Û Û ß Ð ç =Ñ =Ý  áÝð#�U—\‘\ð #°ó #ðL €‡��DÔð�R—Z‘Zò ó ðð0 €‡��D 4Ô(ðˆr�z‰zò ó )ðó2*ðB
-ˆ5�<‰<ð 
-˜BŸJ™Jó 
-ð ÷ð ó ðð ØòOØðOàðOð �c‘ðOð 
�‰ð	Oð
 ðOð ðOð ðOð 
ˆ*ÑóOðd $ zÑ"2ð ¸sð Ècó ðR !/ØAòm!à�4‰jðm!ð ðm!ð ð	m!ð
 
�‰ðm!ð ðm!ð ðm!ð ðm!ð !ôm!r1   