Ë
    ðmxiB  ã            	      óØ  — d dl mZ d dlZd dlZd dlZd dlZddlmZ ddlm	Z	 ddl
mZ ddlmZ  G d„ d	«      Z G d
„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ de«      Z G d„ d«      Z G d „ d! ej4                  d!g d"¢«      «      Z G d#„ d$«      Zej:                  d%„ «       Zy)&é    )ÚannotationsNé   )Úevent)Úurl)ÚDefaultDialect)ÚBaseDDLElementc                  ó$   — e Zd ZdZdZdZd„ Zd„ Zy)Ú
AssertRuleFNTc                 ó   — y ©N© ©ÚselfÚexecute_observeds     úS/home/htdocs/ttos/venv/lib/python3.12/site-packages/sqlalchemy/testing/assertsql.pyÚprocess_statementzAssertRule.process_statement   s   € Øó    c                ó   — J d«       ‚)Nz?All statements are complete, but pending assertion rules remainr   ©r   s    r   Úno_more_statementszAssertRule.no_more_statements   s   € ð	
ð%ó	
ˆur   )Ú__name__Ú
__module__Ú__qualname__Úis_consumedÚerrormessageÚconsume_statementr   r   r   r   r   r
   r
      s   „ Ø€KØ€LØÐòó
r   r
   c                  ó   — e Zd Zy)ÚSQLMatchRuleN©r   r   r   r   r   r   r   r   &   s   „ Ør   r   c                  ó   — e Zd Zdd„Zd„ Zy)Ú	CursorSQLNc                ó.   — || _         || _        || _        y r   )Ú	statementÚparamsr   )r   r#   r$   r   s       r   Ú__init__zCursorSQL.__init__+   s   € Ø"ˆŒØˆŒØ!2ˆÕr   c                ó�  — |j                   d   }| j                  |j                  k7  s%| j                  �\| j                  |j                  k7  rCd| _        d| j                  ›d| j                  ›d|j                  ›d|j                  ›�| _        y |j                   j                  d«       d| _        |j                   sd| _        y y )Nr   TzTesting for exact SQL z parameters z
 received ú )Ú
statementsr#   r$   Ú
parametersr   r   Úpopr   )r   r   Ústmts      r   r   zCursorSQL.process_statement0   s¢   € Ø×*Ñ*¨1Ñ-ˆØ�>‰>˜TŸ^™^Ò+Ø�K‰KÐ#¨¯©°t·±Ò(Fà%)ˆDÕ"ð —N“NØ—K“KØ—N“NØ—O’Oðð Õð ×'Ñ'×+Ñ+¨AÔ.Ø#ˆDÔØ#×.Ò.Ø)-�Õ&ð /r   ©NT©r   r   r   r%   r   r   r   r   r!   r!   *   s   „ ó3ó
.r   r!   c                  ó:   — e Zd Z	 d	d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)
ÚCompiledSQLNc                ó<   — || _         || _        || _        || _        y r   )r#   r$   ÚdialectÚenable_returning)r   r#   r$   r1   r2   s        r   r%   zCompiledSQL.__init__G   s!   € ð #ˆŒØˆŒØˆŒØ 0ˆÕr   c                óN   — t        j                  dd| j                  «      }||k(  S ©Nú[\n\t]Ú )ÚreÚsubr#   ©r   r   Úreceived_statementr+   s       r   Ú_compare_sqlzCompiledSQL._compare_sqlO   s#   € Ü�v‰v�i  T§^¡^Ó4ˆØ! TÑ)Ð)r   c                óR  — | j                   dk(  r^t        «       }d|_        | j                  r?dx|_        x|_        |_        d|_        d|_        d|_	        d|_
        |j                  sJ ‚|S t        j                  j                  | j                   «      j                  «       «       S ©NÚdefaultT)r1   r   Úsupports_default_metavaluer2   Úinsert_returningÚupdate_returningÚdelete_returningÚuse_insertmanyvaluesÚsupports_multivalues_insertÚupdate_returning_multifromÚdelete_returning_multifromÚinsert_executemany_returningr   ÚURLÚcreateÚget_dialect)r   r   r1   s      r   Ú_compile_dialectzCompiledSQL._compile_dialectS   s¡   € Ø�<‰<˜9Ò$Ü$Ó&ˆGð 26ˆGÔ.à×$Ò$ð ð�Ô(ð ¨7Ô+CØÔ,à/3�Ô,Ø6:�Ô3Ø59�Ô2Ø59�Ô2ð ×;Ò;Ð;Ð;àˆNä—7‘7—>‘> $§,¡,Ó/×;Ñ;Ó=Ó?Ð?r   c                ó`  — |j                   }| j                  |«      }d}d}d|j                  v r|j                  d   }nd}t        |j                  t
        «      r|j                  j                  ||¬«      }nH|j                  j                  |||j                  j                  |j                  j                  |¬«      }t        j                  ddt        |«      «      }|j                  }	|	s|j                  |¬«      g}
||
fS |	D �cg c]  }|j                  ||¬«      ‘Œ }
}||
fS c c}w )zxreconstruct the statement and params in terms
        of a target dialect, which for CompiledSQL is just DefaultDialect.NÚschema_translate_map)r1   rM   )Ú	cache_keyr1   Úcolumn_keysÚfor_executemanyrM   r5   r6   )Úextracted_parameters)ÚcontextrK   Úexecution_optionsÚ
isinstanceÚclauseelementr   ÚcompileÚcompiledrO   rP   r7   r8   Ústrr)   Úconstruct_params)r   r   rR   Úcompare_dialectrN   rQ   Úmap_rW   Ú_received_statementr)   Ú_received_parametersÚms               r   r\   zCompiledSQL._received_statementm   si  € ð #×*Ñ*ˆØ×/Ñ/Ð0@ÓAˆð ˆ	àð 	ð " W×%>Ñ%>Ñ>Ø×,Ñ,Ð-CÑD‰DàˆDäÐ&×4Ñ4´nÔEØ'×5Ñ5×=Ñ=Ø'Ø%)ð >ó ‰Hð
 (×5Ñ5×=Ñ=Ø#Ø'Ø#×,Ñ,×8Ñ8Ø '× 0Ñ 0× @Ñ @Ø%)ð >ó ˆHô !Ÿf™f Y°´C¸³MÓBÐØ%×0Ñ0ˆ
áà×)Ñ)Ø)=ð *ó ð$Ð ð #Ð$8Ð8Ð8ð $ö	$ð ð ×)Ñ)ØÐ,@ð *õ ð$Ð ð $ð #Ð$8Ð8Ð8ùò$s   ÄD+c                óâ  — |j                   }| j                  |«      \  }}| j                  |«      }| j                  ||«      }|r||�zt	        |«      }t	        |«      }|r\|rZt        |j                  d«      «      }	t        t	        |«      «      D ]!  \  }
}|	D ]  }||vs||   |	|   k7  sŒ Œ ||
=  n d}n|r|rŒZ|s|rd}|rd| _        d | _	        y | j                  ||«      ||dœz  | _	        y )Nr   FT)r:   Úreceived_parameters)rR   r\   Ú_all_paramsr;   ÚlistÚdictr*   Ú	enumerater   r   Ú_failure_message)r   r   rR   r\   r]   r$   Ú
equivalentÚ
all_paramsÚall_receivedÚparamÚidxÚreceivedÚ	param_keys                r   r   zCompiledSQL.process_statement¢   s4  € Ø"×*Ñ*ˆà48×4LÑ4LØó5
Ñ1ÐÐ1ð ×!Ñ! 'Ó*ˆà×&Ñ&Ð'7Ð9LÓMˆ
áØÐ!Ü! &›\�
Ü#Ð$8Ó9�Ù ¡\Ü  §¡°Ó!2Ó3�Eä)2´4¸Ó3EÓ)Fò ™˜˜Xà).ò "˜Ið !*°Ñ 9Ø#+¨IÑ#6¸%À	Ñ:JÓ#Já %ð"ð !-¨SÐ 1Ù!ðð$ &+˜
Øñ- !¢\ñ. ¡Ø!&�JáØ#ˆDÔØ $ˆDÕà $× 5Ñ 5Ø  &ó!ð ':Ø';ññ!ˆDÕr   c                ó¬   — | j                   rHt        | j                   «      r| j                  |«      }n| j                   }t        |t        «      s|g}|S y r   )r$   ÚcallablerT   rb   )r   rR   r$   s      r   ra   zCompiledSQL._all_paramsÕ   sE   € Ø�;Š;Ü˜Ÿ™Ô$ØŸ™ WÓ-‘àŸ™�Ü˜f¤dÔ+Ø ˜�ØˆMàr   c                óz   — d| j                   j                  dd«      ›dt        |«      j                  dd«      ›d�S ©NzTesting for compiled statement
ú%ú%%ú partial params zE, received
%(received_statement)r with params %(received_parameters)r)r#   ÚreplaceÚrepr©r   r   Úexpected_paramss      r   re   zCompiledSQL._failure_messageá   s7   � ð —‘×&Ñ& s¨DÕ1Ü�_Ó%×-Ñ-¨c°4Õ8ðð	
r   r=   )
r   r   r   r%   r;   rK   r\   r   ra   re   r   r   r   r/   r/   F   s+   „ àJNó1ò*ò@ò439òj1òf
ó	
r   r/   c                  ó"   — e Zd Z	 dd„Zd„ Zd„ Zy)ÚRegexSQLNc                óš   — t         j                  | «       t        j                  |«      | _        || _        || _        || _        || _        y r   )	r   r%   r7   rV   ÚregexÚ
orig_regexr$   r1   r2   )r   r{   r$   r1   r2   s        r   r%   zRegexSQL.__init__î   s?   € ô 	×Ñ˜dÔ#Ü—Z‘Z Ó&ˆŒ
ØˆŒØˆŒØˆŒØ 0ˆÕr   c                óz   — d| j                   j                  dd«      ›dt        |«      j                  dd«      ›d�S )Nz Testing for compiled statement ~rq   rr   rs   zE, received %(received_statement)r with params %(received_parameters)r)r|   rt   ru   rv   s      r   re   zRegexSQL._failure_messageø   s7   � ð —‘×'Ñ'¨¨TÕ2Ü�_Ó%×-Ñ-¨c°4Õ8ðð	
r   c                óJ   — t        | j                  j                  |«      «      S r   )Úboolr{   Úmatch)r   r   r:   s      r   r;   zRegexSQL._compare_sql  s   € Ü�D—J‘J×$Ñ$Ð%7Ó8Ó9Ð9r   )Nr>   F)r   r   r   r%   re   r;   r   r   r   ry   ry   í   s   „ àFKó1ò	
ó:r   ry   c                  ó<   ‡ — e Zd Zd„ Zd„ Zˆ fd„Zd„ Zd„ Zd„ Zˆ xZ	S )Ú
DialectSQLc                ó.   — |j                   j                  S r   )rR   r1   r   s     r   rK   zDialectSQL._compile_dialect  s   € Ø×'Ñ'×/Ñ/Ð/r   c                ó:   — t        j                  dd|«      }||k(  S r4   )r7   r8   )r   Ú	real_stmtÚreceived_stmtr+   s       r   Ú_compare_no_spacezDialectSQL._compare_no_space  s   € Ü�v‰v�i  YÓ/ˆØ Ñ$Ð$r   c                óæ   •— t         ‰| �  |«      \  }}|j                  D ]*  }| j                  |j                  j
                  |«      sŒ* n t        d|z  «      ‚||j                  j                  fS )NzICan't locate compiled statement %r in list of statements actually invoked)Úsuperr\   r(   r‡   rR   r#   ÚAssertionErrorÚcompiled_parameters)r   r   r†   Úreceived_paramsr…   Ú	__class__s        €r   r\   zDialectSQL._received_statement  s‹   ø€ Ü).©Ñ)DØó*
Ñ&ˆ�ð
 *×4Ñ4ò 		ˆIØ×%Ñ%Ø×!Ñ!×+Ñ+¨]õñ ð			ô !ð.Ø0=ñ>óð ð
 Ð.×6Ñ6×JÑJÐJÐJr   c                ó¢  ‡‡— |j                   }t        j                  dd| j                  «      }|j	                  dd«      }|dk(  rt        j                  dd|«      }n^d }|dk(  rd	}n=|d
k(  rd}n5|j                  d«      r$t        j                  d«      Š|dk(  rdndŠˆˆfd„}t        j                  d||«      }|j	                  dd«      }|S )Nr5   r6   z::z!!Úpyformatz	:([\w_]+)z%(\1)sÚqmarkú?Úformatz%sÚnumericé   Únumeric_dollarú$ú:c                ó"   •— ‰› t        ‰«      › �S r   )Únext)r^   ÚcounterÚnum_identifiers    €€r   Úreplz4DialectSQL._dialect_adjusted_statement.<locals>.repl7  s   ø€ Ø,Ð-¬d°7«m¨_Ð=Ð=r   )Ú
paramstyler7   r8   r#   rt   Ú
startswithÚ	itertoolsÚcount)r   r1   r�   r+   rœ   rš   r›   s        @@r   Ú_dialect_adjusted_statementz&DialectSQL._dialect_adjusted_statement"  sÌ   ù€ Ø×'Ñ'ˆ
Ü�v‰v�i  T§^¡^Ó4ˆð �|‰|˜D $Ó'ˆà˜Ò#Ü—6‘6˜,¨	°4Ó8‰Dð ˆDØ˜WÒ$Ø‘Ø˜xÒ'Ø‘Ø×&Ñ& yÔ1Ü#Ÿ/™/¨!Ó,�à(2Ð6FÒ(F¡ÈC�õ>ô —6‘6˜,¨¨dÓ3ˆDð �|‰|˜D $Ó'ˆàˆr   c                óV   — | j                  |j                  j                  «      }||k(  S r   )r¡   rR   r1   r9   s       r   r;   zDialectSQL._compare_sqlA  s.   € Ø×/Ñ/Ø×$Ñ$×,Ñ,ó
ˆð " TÑ)Ð)r   c                ó¬   — d| j                  |j                  j                  «      j                  dd«      ›dt	        |«      j                  dd«      ›d�S rp   )r¡   rR   r1   rt   ru   rv   s      r   re   zDialectSQL._failure_messageG  sS   � ð ×0Ñ0Ø$×,Ñ,×4Ñ4óç‘'˜#˜tÓ$ñ%ô �_Ó%×-Ñ-¨c°4Õ8ðð
	
r   )
r   r   r   rK   r‡   r\   r¡   r;   re   Ú__classcell__©r�   s   @r   r‚   r‚     s"   ø„ ò0ò%ôKò&ò>*ö
r   r‚   c                  ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚCountStatementsc                ó    — || _         d| _        y ©Nr   ©r    Ú_statement_count)r   r    s     r   r%   zCountStatements.__init__V  s   € ØˆŒ
Ø !ˆÕr   c                ó.   — | xj                   dz  c_         y )Nr”   )r«   r   s     r   r   z!CountStatements.process_statementZ  s   € Ø×Ò Ñ"Ör   c                óv   — | j                   | j                  k7  r J d| j                   | j                  fz  «       ‚y )Nz,desired statement count %d does not match %drª   r   s    r   r   z"CountStatements.no_more_statements]  sC   € Ø�:‰:˜×.Ñ.Ò.ðÐHØ—
‘
Ø×%Ñ%ðLñ ó �5ð /r   N)r   r   r   r%   r   r   r   r   r   r§   r§   U  s   „ ò"ò#ór   r§   c                  ó   — e Zd Zd„ Zd„ Zy)ÚAllOfc                ó$   — t        |«      | _        y r   )ÚsetÚrules©r   r²   s     r   r%   zAllOf.__init__f  s   € Ü˜“Zˆ�
r   c                óX  — t        | j                  «      D ]k  }d |_        |j                  |«       |j                  r0| j                  j                  |«       | j                  sd| _         y |j                  rŒdd | _         y  t        | j                  «      d   j                  | _        y ©NTr   )rb   r²   r   r   r   Údiscard©r   r   Úrules      r   r   zAllOf.process_statementi  s’   € Ü˜Ÿ™Ó$ò 	AˆDØ $ˆDÔØ×"Ñ"Ð#3Ô4Ø×ÒØ—
‘
×"Ñ" 4Ô(Ø—z’zØ'+�DÔ$ÙØ×&Ó&à$(�Ô!Ùð	Aô !% T§Z¡ZÓ 0°Ñ 3× @Ñ @ˆDÕr   Nr-   r   r   r   r¯   r¯   e  s   „ ò óAr   r¯   c                  ó*   ‡ — e Zd Zd„ Zd„ Zˆ fd„Zˆ xZS )ÚEachOfc                ó$   — t        |«      | _        y r   )rb   r²   r³   s     r   r%   zEachOf.__init__{  s   € Ü˜%“[ˆ�
r   c                óv  — | j                   sd| _        d| _        | j                   r| j                   d   }|j                  |«       |j                  r| j                   j	                  d«       n|j
                  r|j
                  | _        |j                  rn| j                   rŒ| j                   sd| _        y y )NTFr   )r²   r   r   r   r*   r   r·   s      r   r   zEachOf.process_statement~  s—   € Ø�zŠzØ#ˆDÔØ%*ˆDÔ"à�jŠjØ—:‘:˜a‘=ˆDØ×"Ñ"Ð#3Ô4Ø×ÒØ—
‘
—‘˜qÕ!Ø×"Ò"Ø$(×$5Ñ$5�Ô!Ø×%Ò%Øð �j‹jð �zŠzØ#ˆDÕð r   c                óÂ   •— | j                   r7| j                   d   j                  s| j                   d   j                  «        y | j                   rt        ‰| �	  «        y y r©   )r²   r   r   r‰   )r   r�   s    €r   r   zEachOf.no_more_statements�  sE   ø€ Ø�:Š:˜dŸj™j¨™m×7Ò7Ø�J‰J�q‰M×,Ñ,Õ.Ø�ZŠZÜ‰GÑ&Õ(ð r   )r   r   r   r%   r   r   r¤   r¥   s   @r   rº   rº   z  s   ø„ ò!ò$÷$)ð )r   rº   c                  ó   ‡ — e Zd Zˆ fd„Zˆ xZS )ÚConditionalc                ó<   •— |rt        ‰| �  |Ž  y t        ‰| �  |Ž  y r   )r‰   r%   )r   Ú	conditionr²   Ú
else_rulesr�   s       €r   r%   zConditional.__init__˜  s    ø€ ÙÜ‰GÑ˜eÒ$ä‰GÑ˜jÒ)r   )r   r   r   r%   r¤   r¥   s   @r   r¿   r¿   —  s   ø„ ÷*ð *r   r¿   c                  ó   — e Zd Zd„ Zy)ÚOrc                óÀ   — | j                   D ](  }|j                  |«       |j                  sŒ!d| _         y  t        | j                   «      d   j                  | _        y rµ   )r²   r   r   rb   r   r·   s      r   r   zOr.process_statement   sX   € Ø—J‘Jò 	AˆDØ×"Ñ"Ð#3Ô4Ø×ÓØ#'�Ô Ùð		Aô !% T§Z¡ZÓ 0°Ñ 3× @Ñ @ˆDÕr   N)r   r   r   r   r   r   r   rÄ   rÄ   Ÿ  s   „ óAr   rÄ   c                  ó   — e Zd Zd„ Zd„ Zy)ÚSQLExecuteObservedc                ó‚   — || _         || _        |r|| _        g | _        y |r|g| _        g | _        y g | _        g | _        y r   )rR   rU   r)   r(   )r   rR   rU   Úmultiparamsr$   s        r   r%   zSQLExecuteObserved.__init__«  sK   € ØˆŒØ*ˆÔáØ)ˆDŒOð
 ˆ�ñ	 Ø%˜hˆDŒOð ˆ�ð !ˆDŒOØˆ�r   c                ó,   — t        | j                  «      S r   )rX   r(   r   s    r   Ú__repr__zSQLExecuteObserved.__repr__·  s   € Ü�4—?‘?Ó#Ð#r   N)r   r   r   r%   rË   r   r   r   rÇ   rÇ   ª  s   „ ò
ó$r   rÇ   c                  ó   — e Zd Zy)ÚSQLCursorExecuteObservedNr   r   r   r   rÍ   rÍ   »  s   „ ð 	r   rÍ   )r#   r)   rR   Úexecutemanyc                  ó   — e Zd Zd„ Zd„ Zd„ Zy)ÚSQLAsserterc                ó   — g | _         y r   )Úaccumulatedr   s    r   r%   zSQLAsserter.__init__Å  s
   € ØˆÕr   c                ó*   — | j                   | _        | ` y r   )rÒ   Ú_finalr   s    r   Ú_closezSQLAsserter._closeÈ  s   € Ø×&Ñ&ˆŒØÑr   c                ó2  — t        |Ž }t        | j                  «      }|rO|j                  d«      }|j	                  |«       |j
                  rn |j                  rJ |j                  «       ‚|rŒO|r
J d|z  «       ‚|j
                  s|j                  «        y y )Nr   z$Additional SQL statements remain:
%s)rº   rb   rÔ   r*   r   r   r   r   )r   r²   r¸   Úobservedr#   s        r   Úassert_zSQLAsserter.assert_Ì  s�   € Ü�uˆ~ˆä˜Ÿ™Ó$ˆÙØ Ÿ™ Q›ˆIØ×"Ñ" 9Ô-Ø×ÒØØ×"Ò"Ø/˜d×/Ñ/Ó/�uò ñ ØLÐAÀHÑLÓL�5Ø×!Ò!Ø×#Ñ#Õ%ð "r   N)r   r   r   r%   rÕ   rØ   r   r   r   rÐ   rÐ   Ä  s   „ òòó&r   rÐ   c              #  ó®  ‡‡K  — t        «       Šg Št        j                  | d«      ˆfd„«       }t        j                  | d«      ˆˆfd„«       }	 ‰–— t        j                  | d|«       t        j                  | d|«       ‰j	                  «        y # t        j                  | d|«       t        j                  | d|«       ‰j	                  «        w xY w­w)NÚbefore_executec                ó$   •— d| _         |||f‰d d  y r,   )Ú_WORKAROUND_ISSUE_13018)ÚconnrU   rÉ   r$   rS   Úorigs        €r   Úconnection_executez)assert_engine.<locals>.connection_executeã  s   ø€ ð (,ˆÔ$ð   ¨fÐ4ˆ‰Q‰r   Úafter_cursor_executec                ó,  •— |sy ‰j                   r+‰j                   d   j                  |u r‰j                   d   }n2t        |‰d   ‰d   ‰d   «      }‰j                   j                  |«       |j                  j                  t        ||||«      «       y )Néÿÿÿÿr   r”   r   )rÒ   rR   rÇ   Úappendr(   rÍ   )	rÝ   Úcursorr#   r)   rR   rÎ   ÚobsÚasserterrÞ   s	          €€r   Úcursor_executez%assert_engine.<locals>.cursor_executeì  s’   ø€ ñ Øð × Ò Ø×$Ñ$ RÑ(×0Ñ0°GÑ;à×&Ñ& rÑ*‰Cä$ W¨d°1©g°t¸A±wÀÀQÁÓHˆCØ× Ñ ×'Ñ'¨Ô,à�‰×ÑÜ$Ø˜: w°óõ	
r   )rÐ   r   Úlistens_forÚremoverÕ   )Úenginerß   rç   ræ   rÞ   s      @@r   Úassert_enginerë   Ý  s¼   ùè ø€ ä‹}€Hà€Dä
×Ñ�vÐ/Ó0ó5ó 1ð5ô ×Ñ�vÐ5Ó6ô
ó 7ð
ð,ØŠä�‰�VÐ3°^ÔDÜ�‰�VÐ-Ð/AÔBØ�‰Õøô 	�‰�VÐ3°^ÔDÜ�‰�VÐ-Ð/AÔBØ�‰Õüs   „A
CÁB Á?CÂA CÃC)Ú
__future__r   ÚcollectionsÚ
contextlibrŸ   r7   r6   r   rê   r   Úengine.defaultr   Úschemar   r
   r   r!   r/   ry   r‚   r§   r¯   rº   r¿   rÄ   rÇ   Ú
namedtuplerÍ   rÐ   Úcontextmanagerrë   r   r   r   ú<module>ró      sü   ðõ #ã Û Û Û 	å Ý Ý +Ý #÷
ñ 
ô	�:ô 	ô.�ô .ô8d
�,ô d
ôN:ˆ{ô :ô4K
�ô K
ô\�jô ô AˆJô Aô*)ˆZô )ô:*�&ô *ôAˆô A÷$ñ $ô"	Ø€K×ÑØ"Ú=óô	÷&ñ &ð2 ×Ññ*ó ñ*r   