§
    ƒnócúG  ã                  óª   — d dl mZ d dlZd dlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZmZmZ ej        rdd	l	mZ dd
lmZ  G d„ de
¦  «        Zd„ ZdS )é    )ÚannotationsNé   )Úversion_compare)ÚCudaCompileré   )ÚNewExtensionModuleÚ
ModuleInfo)ÚflattenÚpermittedKwargsÚnoKwargsÚInvalidArguments)ÚModuleState)ÚCompilerc                  ó  ‡ — e Zd Z eddd¬¦  «        Zˆ fd„Zedd„¦   «         Z edg¦  «        dd„¦   «         Z	 edg¦  «        dd„¦   «         Z
ed„ ¦   «         Zed„ ¦   «         Zed„ ¦   «         Zd„ Zdd„Zd d„Zˆ xZS )!Ú
CudaModuleÚCUDAz0.50.0T)Úunstablec                ó¢   •— t          ¦   «                              ¦   «          | j                             | j        | j        | j        dœ¦  «         d S )N)Úmin_driver_versionÚnvcc_arch_flagsÚnvcc_arch_readable)ÚsuperÚ__init__ÚmethodsÚupdater   r   r   )ÚselfÚargsÚkwargsÚ	__class__s      €ú9/usr/lib/python3/dist-packages/mesonbuild/modules/cuda.pyr   zCudaModule.__init__%   sY   ø€ Ý‰Œ×ÒÑÔÐØŒ×ÒØ"&Ô"9Ø"&Ô"6Ø"&Ô"9ð
ð 
ñ 	ô 	ð 	ð 	ð 	ó    Ústateú'ModuleState'r   úT.Tuple[str]r   úT.Dict[str, T.Any]ÚreturnÚstrc                ó–  — t          d¦  «        }t          |¦  «        dk    st          |d         t          ¦  «        s|‚|d         }g ddddœ‘dd	d
dœ‘ddddœ‘ddddœ‘ddddœ‘ddddœ‘ddddœ‘ddddœ‘ddddœ‘dd d!dœ‘d"d#d$dœ‘d%d&d'dœ‘d(d)d*dœ‘d+d,d*dœ‘d-d.d/dœ‘d0d1d2dœ‘d3d4d5dœ‘d6d7d8dœ‘d9d:d;dœ‘d<d=d>dœ‘d?d@dAdœ‘dBdCdDdœ‘dEdFdGdœ‘dHdIdJdœ‘dKdLdMdœ‘dNdOdPdœ‘dQdRdSdœ‘dTdUdVdœ‘dWdXdYdœ‘dZd[d\dœ‘d]d^d_dœ‘}d`}|D ]@}t	          ||da         ¦  «        r(|                     |j        j        |db         ¦  «        } nŒA|S )cNzømin_driver_version must have exactly one positional argument: a CUDA Toolkit version string. Beware that, since CUDA 11.0, the CUDA Toolkit's components (including NVCC) are versioned independently from each other (and the CUDA Toolkit as a whole).r   r   z>=12.0.0z527.41z	525.60.13)Úcuda_versionÚwindowsÚlinuxz>=11.8.0z522.06z	520.61.05z>=11.7.1z516.31z	515.48.07z>=11.7.0z516.01z	515.43.04z>=11.6.1z511.65z	510.47.03z>=11.6.0z511.23z	510.39.01z>=11.5.1z496.13z	495.29.05z>=11.5.0z496.04z>=11.4.3z472.50z	470.82.01z>=11.4.1z471.41z	470.57.02z>=11.4.0z471.11z	470.42.01z>=11.3.0z465.89z	465.19.01z>=11.2.2z461.33z	460.32.03z>=11.2.1z461.09z>=11.2.0z460.82z	460.27.03z>=11.1.1z456.81z455.32z>=11.1.0z456.38z455.23z>=11.0.3z451.82z	450.51.06z>=11.0.2z451.48z	450.51.05z>=11.0.1z451.22z	450.36.06z	>=10.2.89z441.22z440.33z
>=10.1.105z418.96z418.39z
>=10.0.130z411.31z410.48z	>=9.2.148z398.26z396.37z>=9.2.88z397.44z396.26z>=9.1.85z391.29z390.46z>=9.0.76z385.54z384.81z>=8.0.61z376.51z375.26z>=8.0.44z369.30z367.48z>=7.5.16z353.66z352.31z>=7.0.28z347.62z346.46Úunknownr)   r+   )r   ÚlenÚ
isinstancer'   r   ÚgetÚhost_machineÚsystem)	r   r"   r   r   Úargerrorr)   Údriver_version_tableÚdriver_versionÚds	            r    r   zCudaModule.min_driver_version-   s  € õ $ð %gñ hô hˆõ
 ˆt‰9Œ9˜Š>ˆ>¥¨D°¬GµSÑ!9Ô!9ˆ>ØˆNà˜A”wˆð  
Ø'°hÈÐUÐUð  
à'°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð	  
ð
 (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð (°hÈÐUÐUð  
ð  (°hÈÐRÐRð!  
ð" (°hÈÐRÐRð#  
ð$ (°hÈÐUÐUð%  
ð& (°hÈÐUÐUð'  
ð( (°hÈÐUÐUð)  
ð* )°hÈÐRÐRð+  
ð, *°hÈÐRÐRð-  
ð. *°hÈÐRÐRð/  
ð0 )°hÈÐRÐRð1  
ð2 (°hÈÐRÐRð3  
ð4 (°hÈÐRÐRð5  
ð6 (°hÈÐRÐRð7  
ð8 (°hÈÐRÐRð9  
ð: (°hÈÐRÐRð;  
ð< (°hÈÐRÐRð=  
ð> (°hÈÐRÐRð?  
ÐðD #ˆØ%ð 	ð 	ˆAÝ˜|¨Q¨~Ô->Ñ?Ô?ð Ø!"§¢ uÔ'9Ô'@À!ÀGÄ*Ñ!MÔ!M�Ø�ðð Ðr!   Údetectedú-T.Tuple[T.Union[Compiler, CudaCompiler, str]]úT.List[str]c                óR   — |                       ||¦  «        } | j        |Ž d         }|S )Nr   ©Ú_validate_nvcc_arch_argsÚ_nvcc_arch_flags©r   r"   r   r   Únvcc_arch_argsÚrets         r    r   zCudaModule.nvcc_arch_flagsd   ó2   € ð ×6Ò6°t¸VÑDÔDˆØ#ˆdÔ# ^Ð4°QÔ7ˆØˆ
r!   c                óR   — |                       ||¦  «        } | j        |Ž d         }|S )Nr   r:   r=   s         r    r   zCudaModule.nvcc_arch_readablel   r@   r!   c                ó‚   — t          j        dd| ¦  «        } |                      d¦  «                             d¦  «        } | S )Nz	[ 	
,;]+ú;)ÚreÚsubÚstripÚsplit)Úss    r    Ú_break_arch_stringzCudaModule._break_arch_stringt   s7   € åŒF�> 3¨Ñ*Ô*ˆØ�GŠG�C‰LŒL×Ò˜sÑ#Ô#ˆØˆr!   c                ó>   — t          | t          ¦  «        r| j        S dS )NÚ )r.   r   Údetected_cc©Úcs    r    Ú_detected_cc_from_compilerz%CudaModule._detected_cc_from_compilerz   s!   € å�a�Ñ&Ô&ð 	!Ø”=Ð Øˆrr!   c                ól   — t          | t          ¦  «        r| j        S t          | t          ¦  «        r| S dS )Nr,   )r.   r   Úversionr'   rM   s    r    Ú_version_from_compilerz!CudaModule._version_from_compiler€   s8   € å�a�Ñ&Ô&ð 	Ø”9ÐÝ�a�ÑÔð 	ØˆHØˆyr!   c                ó
  ‡ — t          d¦  «        }t          |¦  «        dk     r|‚|d         }‰                      |¦  «        }|dk    r|‚t          |¦  «        dk    rg nt          |dd …         ¦  «        }ˆ fd„|D ¦   «         }t          |¦  «        }t          |¦  «        dk    r3t	          |¦  «                             h d£¦  «        st          d¦  «        ‚t          |¦  «        dk    r|d         n|}|                     d‰                      |¦  «        ¦  «        }t          |g¦  «        }ˆ fd	„|D ¦   «         }t          |¦  «        }t	          |¦  «                             h d£¦  «        st          d¦  «        ‚|||fS )
NzJThe first argument must be an NVCC compiler object, or its version string!r   r   r,   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS © ©rI   ©Ú.0Úar   s     €r    ú
<listcomp>z7CudaModule._validate_nvcc_arch_args.<locals>.<listcomp>”   s'   ø€ ÐCÐCÐC°A�T×,Ò,¨QÑ/Ô/ÐCÐCÐCr!   >   ÚAllÚAutoÚCommonzaThe special architectures 'All', 'Common' and 'Auto' must appear alone, as a positional argument!r6   c                ó:   •— g | ]}‰                      |¦  «        ‘ŒS rU   rV   rW   s     €r    rZ   z7CudaModule._validate_nvcc_arch_args.<locals>.<listcomp>œ   s'   ø€ ÐAÐAÐA°1�D×+Ò+¨AÑ.Ô.ÐAÐAÐAr!   )r   r-   rR   r
   ÚsetÚ
isdisjointr/   rO   )r   r   r   r2   Úcompilerr)   Ú	arch_listr6   s   `       r    r;   z#CudaModule._validate_nvcc_arch_argsˆ   s©  ø€ Ý#Ð$pÑqÔqˆåˆt‰9Œ9�qŠ=ˆ=ØˆNà˜A”wˆHØ×6Ò6°xÑ@Ô@ˆLØ˜yÒ(Ð(Ø�å˜d™)œ) qš.˜.�B�B­g°d¸1¸2¸2´hÑ.?Ô.?ˆ	ØCÐCÐCÐC¸ÐCÑCÔCˆ	Ý˜IÑ&Ô&ˆ	Ýˆy‰>Œ>˜AÒÐ¥c¨)¡n¤n×&?Ò&?Ð@YÐ@YÐ@YÑ&ZÔ&ZÐÝ"ð  $Kñ  Lô  Lð  LÝ$'¨	¡N¤N°aÒ$7Ð$7�I˜a”L�L¸Yˆ	à—:’:˜j¨$×*IÒ*IÈ(Ñ*SÔ*SÑTÔTˆÝ˜H˜:Ñ&Ô&ˆØAÐAÐAÐA¸ÐAÑAÔAˆÝ˜8Ñ$Ô$ˆÝ�8‰}Œ}×'Ò'Ð(AÐ(AÐ(AÑBÔBð 	LÝ"ð  $Kñ  Lô  Lð  Là˜Y¨Ð0Ð0r!   Nc                óª   — g }|D ]M}|rI|rt          |d|z   ¦  «        rŒ|rt          |d|z   ¦  «        r|sŒ2|}||vr|                     |¦  «         ŒN|S )zÉ
        Filter CUDA arch list (no codenames) for >= low and < hi architecture
        bounds, and deduplicate.
        If saturate is provided, architectures >= hi are replaced with saturate.
        ú<ú>=)r   Úappend)r   Úcuda_arch_listÚloÚhiÚsaturateÚfiltered_cuda_arch_listÚarchs          r    Ú_filter_cuda_arch_listz!CudaModule._filter_cuda_arch_list£   s•   € ð #%ÐØ"ð 		9ð 		9ˆDØð 9Øð �/¨$°°b±Ñ9Ô9ð ØØð $�/¨$°°r±	Ñ:Ô:ð $Ø#ð !Ø Ø#�DØÐ6Ð6Ð6Ø+×2Ò2°4Ñ8Ô8Ð8øØ&Ð&r!   r\   rK   c                ó 
  — g d¢}g d¢}d}d}g d¢}t          |d¦  «        rd}t          |d¦  «        r%|g d	¢z  }|dgz  }t          |d
¦  «        r|dgz  }d}t          |d¦  «        r-|ddgz  }|ddgz  }|g d¢z  }t          |d¦  «        r|dgz  }d}t          |d¦  «        r.|ddgz  }|dgz  }|ddgz  }d}t          |d¦  «        r|dgz  }d}t          |d¦  «        r*|dgz  }|dgz  }|dgz  }t          |d ¦  «        r|d!gz  }d}t          |d"¦  «        r,|d#gz  }|dgz  }|dgz  }d$}t          |d%¦  «        r|d&gz  }d'}t          |d(¦  «        r$|d'gz  }|d'gz  }t          |d)¦  «        r|d*gz  }d+}t          |d,¦  «        r'|g d-¢z  }|g d.¢z  }|g d/¢z  }t          |d0¦  «        rd1}t          |d2¦  «        rd3}t          |d4¦  «        rd5}|sd6}|d7k    r|}nŠ|d8k    r|}n�|d6k    rQ|rLt          |t          ¦  «        r|}n|                      |¦  «        }|                      ||||d9         ¦  «        }n-|}n*t          |t
          ¦  «        r|                      |¦  «        }t          d:„ t          |¦  «        D ¦   «         ¦  «        }g }	g }
|D ]Ø}g }g }|                     d;¦  «        }|r|dt          d;¦  «         …         }t          j        d<|¦  «        r|g|g}}nbdd=gg fd>gg fd?gg fdd$gd$gfd@gg fd3dgdgfddgdgfdAgg fdgdgfdgg fdgdgfdgdgfd+gg fdBgdBgfdCgdCgfdDœ                     |dE¦  «        \  }}|€t          dF|› dG�¦  «        ‚|	|z  }	|r	|s|}|
|z  }
ŒÙt          t          |	¦  «        ¦  «        }	t          t          |
¦  «        ¦  «        }
g }g }|	D ]Í}t          j        dH|¦  «                             ¦   «         \  }}t          |dI|z   ¦  «        rŒ@|rt          |dJ|z   ¦  «        rŒV|rF|                     dKdL¦  «        }|                     dKdL¦  «        }|dMdN|z   dOz   |z   gz  }|dP|z   gz  }Œž|                     dKdL¦  «        }|dMdN|z   dOz   |z   gz  }|dP|z   gz  }ŒÎ|
D ]‰}t          j        dH|¦  «                             ¦   «         \  }}|r|}t          |dI|z   ¦  «        rŒD|rt          |dJ|z   ¦  «        rŒZ|                     dKdL¦  «        }|dMdN|z   dQz   |z   gz  }|dR|z   gz  }ŒŠ||fS )Sz{
        Using the CUDA Toolkit version and the target architectures, compute
        the NVCC architecture flags.
        )ÚFermiÚKeplerÚMaxwell)ú3.0ú3.5ú5.0Nz2.0)rr   ú3.2rs   rt   z<7.0z5.2z>=7.0)úKepler+TegraúKepler+TeslaúMaxwell+Tegraz<8.0z5.2+PTXú6.0z>=8.0ÚPascalúPascal+Tegraú6.1)ry   r|   ú6.2z<9.0z6.1+PTXz7.0z>=9.0ÚVoltaÚXavierz7.2rr   z<10.0z7.2+PTXz8.0z>=10.0ÚTuringz7.5z<11.0z7.5+PTXz>=11.0ÚAmperers   z<11.1z8.0+PTXz8.6z>=11.1z<11.8z8.6+PTXú8.7z>=11.8)ÚOrinÚLovelaceÚHopper)ú8.9ú9.0z9.0+PTX)r‚   r†   r‡   z<12z9.1z>=12.0rt   z<13z10.0r\   r[   r]   éÿÿÿÿc              3  ó   K  — | ]}|¯|V — Œ	d S ©NrU   )rX   Úxs     r    ú	<genexpr>z.CudaModule._nvcc_arch_flags.<locals>.<genexpr>)  s'   è è € ÐDÐD aÀ!ÐD ÐDÐDÐDÐDÐDÐDr!   z+PTXz![0-9]+\.[0-9](\([0-9]+\.[0-9]\))?z2.1(2.0)ru   z3.7z5.3r}   r†   r‡   )ro   rv   rw   rp   rx   rq   rz   r{   r~   r   r€   r�   rƒ   r„   r…   )NNzUnknown CUDA Architecture Name ú!z'([0-9]+\.[0-9])(?:\(([0-9]+\.[0-9])\))?rd   re   ú.rK   z-gencodezarch=compute_z	,code=sm_Úsm_z,code=compute_Úcompute_)r   r.   ÚlistrI   rm   r'   Úsortedr_   Úendswithr-   rD   Ú	fullmatchr/   r   ÚgroupsÚreplace)r   r)   rg   r6   Úcuda_known_gpu_architecturesÚcuda_common_gpu_architecturesÚcuda_hi_limit_gpu_architectureÚcuda_lo_limit_gpu_architectureÚcuda_all_gpu_architecturesÚcuda_arch_binÚcuda_arch_ptxÚ	arch_nameÚarch_binÚarch_ptxÚadd_ptxÚ
nvcc_flagsÚnvcc_archs_readablerl   Úcodevs                      r    r<   zCudaModule._nvcc_arch_flags·   sÊ  € ð *HÐ)GÐ)GÐ$Ø)>Ð)>Ð)>Ð%Ø)-Ð&Ø).Ð&Ø)EÐ)EÐ)EÐ"å˜<¨Ñ0Ô0ð 	3Ø-2Ð*å˜<¨Ñ1Ô1ð 	7Ø(Ð-^Ð-^Ð-^Ñ^Ð(Ø)¨e¨WÑ4Ð)å˜|¨VÑ4Ô4ð 7Ø-°)°Ñ<Ð-Ø16Ð.å˜<¨Ñ1Ô1ð 	7Ø(¨h¸Ð-GÑGÐ(Ø)¨e°U¨^Ñ;Ð)Ø&Ð-BÐ-BÐ-BÑBÐ&å˜|¨VÑ4Ô4ð 7Ø-°)°Ñ<Ð-Ø16Ð.å˜<¨Ñ1Ô1ð 		7Ø(¨g°xÐ-@Ñ@Ð(Ø)¨e¨WÑ4Ð)Ø&¨e°U¨^Ñ;Ð&à-2Ð*å˜|¨WÑ5Ô5ð 7Ø-°)°Ñ<Ð-Ø16Ð.å˜<¨Ñ2Ô2ð 	7Ø(¨h¨ZÑ7Ð(Ø)¨e¨WÑ4Ð)Ø&¨e¨WÑ4Ð&å˜|¨WÑ5Ô5ð 7Ø-°)°Ñ<Ð-Ø16Ð.å˜<¨Ñ2Ô2ð 		7Ø(¨h¨ZÑ7Ð(Ø)¨e¨WÑ4Ð)Ø&¨e¨WÑ4Ð&à-2Ð*å˜|¨WÑ5Ô5ð 7Ø-°)°Ñ<Ð-Ø16Ð.å˜<¨Ñ2Ô2ð 	7Ø)¨e¨WÑ4Ð)Ø&¨e¨WÑ4Ð&å˜|¨WÑ5Ô5ð 7Ø-°)°Ñ<Ð-Ø16Ð.å˜<¨Ñ2Ô2ð 	7Ø(Ð-KÐ-KÐ-KÑKÐ(Ø)Ð-FÐ-FÐ-FÑFÐ)Ø&Ð-BÐ-BÐ-BÑBÐ&å˜|¨UÑ3Ô3ð 7Ø16Ð.å˜<¨Ñ2Ô2ð 	8ð .3Ð*å˜|¨UÑ3Ô3ð 8Ø17Ð.àð 	$Ø#ˆNà˜uÒ$Ð$Ø9ˆNˆNØ˜xÒ'Ð'Ø:ˆNˆNØ˜vÒ%Ð%Øð 
?Ý˜h­Ñ-Ô-ð GØ%-�N�Nà%)×%<Ò%<¸XÑ%FÔ%F�NØ!%×!<Ò!<¸^Ø=[Ø=[Ø=ZÐ[]Ô=^ñ"`ô "`��ð
 "?��Ý˜­Ñ,Ô,ð 	EØ!×4Ò4°^ÑDÔDˆNåÐDÐD­3¨~Ñ+>Ô+>ÐDÑDÔDÑDÔDˆàˆØˆØ'ð $	*ð $	*ˆIØˆHØˆHØ×(Ò(¨Ñ0Ô0ˆGØð 5Ø% m­¨F©¬ | mÔ4�	åŒ|ÐCÀYÑOÔOð /Ø&/ [°9°+˜(��ð (-¨jÐ&9¸2Ð%>Ø', g¸2Ð%>Ø', g¸2Ð%>Ø',¨e n¸E¸7Ð%CØ', g¸2Ð%>Ø',¨e n¸E¸7Ð%CØ',¨e n¸E¸7Ð%CØ', g¸2Ð%>Ø', g¸E¸7Ð%CØ', g¸2Ð%>Ø', g¸E¸7Ð%CØ', g¸E¸7Ð%CØ', g¸2Ð%>Ø', g¸E¸7Ð%CØ', g¸E¸7Ð%Cð&ð &÷  ’#�i Ñ.Ô.ñ! #�˜(ð$ ÐÝ&Ð'UÈÐ'UÐ'UÐ'UÑVÔVÐVà˜XÑ%ˆMàð *Øð (Ø'�HØ Ñ)�øå�s =Ñ1Ô1Ñ2Ô2ˆÝ�s =Ñ1Ô1Ñ2Ô2ˆàˆ
Ø Ðà!ð 	6ð 	6ˆDÝœ,Ø=¸tñEô EßEKÂVÁXÄXñ ˆD�%õ ˜t SÐ+IÑ%IÑJÔJð ØØ-ð µ/À$ÈÐOmÑHmÑ2nÔ2nð Øàð 6Ø—|’| C¨Ñ,Ô,�ØŸš c¨2Ñ.Ô.�Ø˜z¨?¸UÑ+BÀ[Ñ+PÐSWÑ+WÐXÑX�
Ø#¨°© ~Ñ5Ð#Ð#à—|’| C¨Ñ,Ô,�Ø˜z¨?¸TÑ+AÀKÑ+OÐRVÑ+VÐWÑW�
Ø#¨°© ~Ñ5Ð#Ð#à!ð 	7ð 	7ˆDÝœ,Ø=¸tñEô EßEKÂVÁXÄXñ ˆD�%ð ð Ø�å˜t SÐ+IÑ%IÑJÔJð ØØ-ð µ/À$ÈÐOmÑHmÑ2nÔ2nð Øà—<’<  RÑ(Ô(ˆDØ˜: ¸Ñ'=Ð@PÑ'PÐSWÑ'WÐXÑXˆJØ J°Ñ$5Ð#6Ñ6ÐÐàÐ.Ð.Ð.r!   )r"   r#   r   r$   r   r%   r&   r'   )r"   r#   r   r7   r   r%   r&   r8   )NNN)r\   rK   )Ú__name__Ú
__module__Ú__qualname__r	   ÚINFOr   r   r   r   r   r   ÚstaticmethodrI   rO   rR   r;   rm   r<   Ú__classcell__)r   s   @r    r   r   !   sY  ø€ € € € € àˆ:�f˜h°Ð6Ñ6Ô6€Dðð ð ð ð ð ð4ð 4ð 4ñ „Xð4ðl €_�j�\Ñ"Ô"ðð ð ñ #Ô"ðð €_�j�\Ñ"Ô"ðð ð ñ #Ô"ðð ðð ñ „\ðð
 ðð ñ „\ðð
 ðð ñ „\ðð1ð 1ð 1ð6'ð 'ð 'ð 'ð(E/ð E/ð E/ð E/ð E/ð E/ð E/ð E/r!   r   c                 ó   — t          | i |¤ŽS rŠ   )r   )r   r   s     r    Ú
initializer¬   ~  s   € Ý�tÐ&˜vÐ&Ð&Ð&r!   )Ú
__future__r   ÚtypingÚTrD   Úmesonlibr   Úcompilers.cudar   rK   r   r	   Úinterpreterbaser
   r   r   r   ÚTYPE_CHECKINGr   Ú	compilersr   r   r¬   rU   r!   r    ú<module>rµ      s#  ðð #Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø 	€	€	€	à &Ð &Ð &Ð &Ð &Ð &Ø )Ð )Ð )Ð )Ð )Ð )à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,ðð ð ð ð ð ð ð ð ð ð ð ð
 „?ð %ØÐÐÐÐÐØ$Ð$Ð$Ð$Ð$Ð$ð[/ð [/ð [/ð [/ð [/Ð#ñ [/ô [/ð [/ðz
'ð 'ð 'ð 'ð 'r!   