§
    u†%XC'  ã                   óR   — d dl mZ d dlmZ dgZd„ Zd„ Zd„ Z G d„ de	¦  «        Z
dS )	é   )Úutils)Ú
connectionÚQuerySetc                 ó~   — t          j        ¦   «         }|                     | ¦  «         |                     ¦   «         }|S ©N)ÚconnÚcursorÚexecuteÚfetchall©ÚsqlÚcurÚress      úP/granary/edev/quantum/lib/python3.11/site-packages/qubit/io/postgres/queryset.pyÚqueryr      s1   € Ý
Œ+‰-Œ-€CØ‡K‚K�ÑÔÐØ
�,Š,‰.Œ.€CØ€Jó    c                 óÒ   — t          | ¦  «         t          j        ¦   «         }|                     | ¦  «         |                     ¦   «         }t          |¦  «        dk    r|n|d         S ©Nr   é    )Úprintr   r	   r
   r   Úlenr   s      r   Úupdater      sS   € Ý	ˆ#�J„J€JÝ
Œ+‰-Œ-€CØ‡K‚K�ÑÔÐØ
�,Š,‰.Œ.€CÝ�c‘(”(˜Q’,�,ˆ3ˆ3 C¨¤FÐ*r   c                 ó´   — t          j        ¦   «         }|                     | ¦  «         |                     ¦   «         }t	          |¦  «        dk    r|n|d         S r   )r   r	   r
   Úfetchoner   r   s      r   Úinsertr      sH   € Ý
Œ+‰-Œ-€CØ‡K‚K�ÑÔÐØ
�,Š,‰.Œ.€CÝ�c‘(”(˜Q’,�,ˆ3ˆ3 C¨¤FÐ*r   c                   ó6  — e Zd Zi 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(œ¥Zd)„ Zd*„ Zd+„ Zd,„ ZdFd.„ZdGd1e	fd2„Z
g fd1efd3„Zg fd1efd4„Zd5„ Zd6„ ZdGd7„ZdHd:„Zd;„ Zd<„ Zd=„ Zd>„ Zd1efd?„Zd@„ ZdA„ ZdB„ ZdC„ ZdD„ ZdES )Ir   Úget_listzASELECT {fields} from {table} {extra} LIMIT {size} OFFSET {offset}ÚfilterzFSELECT {fields} from {table} WHERE {rule} LIMIT {size} OFFSET {offset}Úcountz"SELECT COUNT({field}) FROM {table}Úcount_on_rulez/SELECT COUNT({field}) FROM {table} WHERE {rule}ÚorderbyzORDER BY {field}Úorderby_decrzORDER BY {field} DECRÚfilter_with_orderbyz[SELECT {fields} from {table} WHERE {rule} ORDER BY {sort_key} LIMIT {size} OFFSET {offset};Úfilter_with_orderby_decrÚ	filter_inz8SELECT {fields} FROM {table} WHERE {key} IN ({targets});Úfilter_in_rangezRSELECT {fields} FROM {table} WHERE {rule} and {key} <= {end} and {key} >= {start};Úfind_in_rangezGSELECT {fields} FROM {table} WHERE {key} <= {end} and {key} >= {start};r   z<INSERT INTO {table} ({keys}) VALUES ({values}) RETURNING id;Úreplacez/REPLACE INTO {table} ({keys}) VALUES ({values})Údeletez!DELETE FROM {table} WHERE {rules}r   z?UPDATE {table} SET {key_value_pairs} WHERE {rules} RETURNING idÚappend_arrayzTUPDATE {table} SET {key} = array_append({key}, {value}) WHERE id='{id}' RETURNING idÚ
get_via_idz,SELECT {fields} from {table} WHERE id='{id}'zAUPDATE {table} SET {key_value_pairs} WHERE id='{id}' RETURNING idz#DELETE FROM {table} WHERE id='{id}'zCUPDATE {table} SET {key}={key}+'{num}' WHERE id='{id}' RETURNING idzCUPDATE {table} SET {key}={key}-'{num}' WHERE id='{id}' RETURNING idz^SELECT {fields} FROM {table} WHERE {extra} {key} LIKE '%{value}%' LIMIT {size} OFFSET {offset}zYINSERT INTO {table} ({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE {key_value_pairs};)Úupdate_via_idÚdelete_via_idÚincrÚdecrÚsearchÚinsert_or_updatec                 óD   — || _         |j        | _        |j        | _        d S r   )ÚtableÚ_fieldsÚfieldsÚ__name__Ú	tablename)Úselfr3   s     r   Ú__init__zQuerySet.__init__7   s   € ØˆŒ
Ø”mˆŒØœˆŒˆˆr   c                 óâ  ‡ — t          |t          ¦  «        s4t          j        t	          |                     d¦  «        ¦  «        ¦  «        S t          ˆ fd„|                     ¦   «         D ¦   «         ¦  «        sDt          dt          |                     ¦   «         ¦  «        t          ‰ j
        ¦  «        z
  ¦  «        ‚	 d„ |                     ¦   «         D ¦   «         }|S #  t          d¦  «        ‚xY w)NÚutf8c              3   ó*   •K  — | ]}|‰j         v V — Œd S r   )r5   )Ú.0Úfr8   s     €r   ú	<genexpr>z"QuerySet.format.<locals>.<genexpr>?   s*   øè è € Ð9Ð9¨�1˜œÐ#Ð9Ð9Ð9Ð9Ð9Ð9r   zUnknew Fieldsc                 ó>   — i | ]\  }}|t          j        |¦  «        “ŒS © )r   Úescape)r=   ÚkÚvs      r   ú
<dictcomp>z#QuerySet.format.<locals>.<dictcomp>B   s&   € Ð?Ð?Ð?©$¨!¨Q�1•e”l 1‘o”oÐ?Ð?Ð?r   zSeries Failed)Ú
isinstanceÚdictr   rB   ÚstrÚencodeÚallÚkeysÚ	ExceptionÚsetr5   Úitems)r8   Údatar   s   `  r   ÚformatzQuerySet.format<   sÒ   ø€ Ý˜$¥Ñ%Ô%ð 	:Ý”<¥ D§K¢K°Ñ$7Ô$7Ñ 8Ô 8Ñ9Ô9Ð9ÝÐ9Ð9Ð9Ð9¨T¯YªY©[¬[Ð9Ñ9Ô9Ñ9Ô9ð 	RÝ˜O­S°·²±´Ñ-=Ô-=ÅÀDÄKÑ@PÔ@PÑ-PÑQÔQÐQð	-Ø?Ð?°$·*²*±,´,Ð?Ñ?Ô?ˆCØˆJøð	-Ý˜OÑ,Ô,Ð,øøøs   Â=C ÃC.c                 ó  — t           | j        d         j        di | j        t	          j        t          t          j        | j        ¦  «        ¦  «        |dœ¤Ž¦  «        }|r(t          t          | j        |d         ¦  «        ¦  «        nd S )Nr+   )r3   r5   Úidr   rA   )r   Ú_sqlrP   r7   r   ÚconcatÚmapÚwrap_keyr5   rG   Úzip)r8   Úoidr   s      r   ÚgetzQuerySet.getG   s‹   € ÝÐ2�D”I˜lÔ+Ô2ð ð Ø”^Ý”l¥3¥u¤~°t´{Ñ#CÔ#CÑDÔDØð6
ð 6
ð ð ñ ô ˆð
 25Ð>�t•C˜œ S¨¤VÑ,Ô,Ñ-Ô-Ð-¸$Ð>r   c                 ó^  — |                       |¦  «        }t           | j        d         j         di | j        t	          j        |¦  «        ddt	          j        t          t          j        | j	        ¦  «        ¦  «        dœ¤Ž¦  «        }t          t          | j	        |d         ¦  «        ¦  «        S )Nr   Ú1Ú0)r3   ÚruleÚsizeÚoffsetr5   r   rA   )rP   r   rS   r7   r   Úget_and_segrT   rU   rV   r5   rG   rW   )r8   ÚargsÚkwargsrO   r   s        r   Úget_byzQuerySet.get_byO   s£   € Ø�{Š{˜6Ñ"Ô"ˆÝÐ.�D”I˜hÔ'Ô.ð ð Ø”^ÝÔ% dÑ+Ô+ØØÝ”l¥3¥u¤~°t´{Ñ#CÔ#CÑDÔDð2
ð 2
ð ð ñ ô ˆõ •C˜œ S¨¤VÑ,Ô,Ñ-Ô-Ð-r   Ú c                 óª  — t           | j        d         j        di | j        t	          j        t          t          j        | j        ¦  «        ¦  «        |                      |¦  «        |                      |¦  «        t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        |rt	          j        |¦  «        dz   pddœ¤Ž¦  «        S )Nr0   Úandrd   )r3   r5   ÚkeyÚvaluer_   r^   ÚextrarA   )r   rS   rP   r7   r   rT   rU   rV   r5   rH   ÚintÚ	get_pairs)r8   rg   rh   ÚstartÚlimitÚfilterss         r   r0   zQuerySet.searchZ   s¹   € ÝÐ/�T”Y˜xÔ(Ô/ð ð Ø”^Ý”l¥3¥u¤~°t´{Ñ#CÔ#CÑDÔDØ—;’;˜sÑ#Ô#Ø—[’[ Ñ'Ô'Ý�#˜e™*œ*‘o”oÝ�˜E™
œ
‘O”OØÐA¥¤°Ñ!9Ô!9¸EÑ!AÐGÀRð3
ð 3
ð ð ñ ô ð 	r   éd   r   Úreturnc                 óF  ‡ — t          |t          ¦  «        r-t          j        t	          t          j        |¦  «        ¦  «        }n"t          j        rt          j        |¦  «        pd}t           ‰ j        d         j	        di ‰ j
        t          j        t	          t          j        ‰ j        ¦  «        ¦  «        t          t          |¦  «        ¦  «        t          t          |¦  «        ¦  «        |r ‰ j        d         j	        di d|i¤Žpddœ¤Ž¦  «        }ˆ fd„|D ¦   «         S )Nrd   r   r!   Úfield)r3   r5   r^   r_   ri   c                 óT   •— g | ]$}t          t          ‰j        |¦  «        ¦  «        ‘Œ%S rA   ©rG   rW   r5   ©r=   Úrr8   s     €r   ú
<listcomp>z%QuerySet.get_list.<locals>.<listcomp>u   ó-   ø€ Ð7Ð7Ð7¨a••S˜œ aÑ(Ô(Ñ)Ô)Ð7Ð7Ð7r   rA   )rF   Úlistr   rT   rU   Úset_descÚsort_keyr   rS   rP   r7   rV   r5   rH   rj   )r8   r^   r_   r{   r   s   `    r   r   zQuerySet.get_liste   s$  ø€ Ý�h¥Ñ%Ô%ð 	IÝ”|¥C­¬¸Ñ$AÔ$AÑBÔBˆHˆHå”~ÐB­%¬.¸Ñ*BÔ*BÐHÀbˆHåÐ0�D”I˜jÔ)Ô0ð 	ð 	Ø”^Ý”l¥3¥u¤~°t´{Ñ#CÔ#CÑDÔDÝ�˜D™	œ	‘N”NÝ�#˜f™+œ+Ñ&Ô&Øð Ð"= $¤)¨IÔ"6Ô"=ð #ð #Ø˜ðAð #ð #ð àð	4
ð 	4
ð 	ð 	ñ 	ô 	ˆð 8Ð7Ð7Ð7°3Ð7Ñ7Ô7Ð7r   c                 ó  — t           | j        d         j        di | j        t	          j        t          t          j        |p| j        ¦  «        ¦  «        |t	          j        t          t          j	        |¦  «        ¦  «        dœ¤Ž¦  «        S )Nr%   )r3   r5   rg   ÚtargetsrA   )
r   rS   rP   r7   r   rT   rU   rV   r5   Ú
wrap_value)r8   rg   r}   r5   s       r   Úfind_inzQuerySet.find_inw   sƒ   € ÝÐ2�T”Y˜{Ô+Ô2ð ð Ø”^Ý”l¥3¥u¤~°vÐ7LÀÄÑ#MÔ#MÑNÔNØÝ”|¥C­Ô(8¸'Ñ$BÔ$BÑCÔCð	6
ð 6
ð ð ñ ô ð 	r   c                 óz  ‡ — ‰                       |¦  «        }t           ‰ j        d         j         di ‰ j        t	          j        t          t          j        |p‰ j        ¦  «        ¦  «        |t	          j	        |¦  «        t	          j
        |¦  «        t	          j
        |¦  «        dœ¤Ž¦  «        }ˆ fd„|D ¦   «         S )Nr&   )r3   r5   rg   r]   rl   Úendc                 óT   •— g | ]$}t          t          ‰j        |¦  «        ¦  «        ‘Œ%S rA   rt   ru   s     €r   rw   z*QuerySet.find_in_range.<locals>.<listcomp>‰   rx   r   rA   )rP   r   rS   r7   r   rT   rU   rV   r5   r`   r~   )	r8   rg   rl   r�   r5   ra   rb   rO   r   s	   `        r   r'   zQuerySet.find_in_range   s¿   ø€ Ø�{Š{˜6Ñ"Ô"ˆÝÐ7�D”IÐ/Ô0Ô7ð ð Ø”^Ý”l¥3¥u¤~°vÐ7LÀÄÑ#MÔ#MÑNÔNØÝÔ% dÑ+Ô+ÝÔ% eÑ,Ô,ÝÔ# CÑ(Ô(ð;
ð ;
ð ð ñ ô ˆð 8Ð7Ð7Ð7°3Ð7Ñ7Ô7Ð7r   c           	      óˆ   — t          j        |¦  «        pd}t           | j        d         j        di | j        |dœ¤Ž¦  «        S )NÚ*r   )r3   rr   rA   )r   rB   r   rS   rP   r7   )r8   rr   s     r   r   zQuerySet.count‹   s]   € Ý”˜UÑ#Ô#Ð* sˆÝÐ.�T”Y˜wÔ'Ô.ð ð Ø”^Øð2
ð 2
ð ð ñ ô ð 	r   c           
      óÔ   — |                       |¦  «        }t          j        |¦  «        }t           | j        d         j         di | j        t          j        |¦  «        |dœ¤Ž¦  «        S )Nr    )r3   r]   rr   rA   )rP   r   rB   r   rS   r7   r`   )r8   rr   r]   s      r   r    zQuerySet.count_on_rule’   sw   € Ø�{Š{˜4Ñ Ô ˆÝ”˜UÑ#Ô#ˆÝÐ6�T”Y˜Ô/Ô6ð ð Ø”^ÝÔ% dÑ+Ô+Øð:
ð :
ð ð ñ ô ð 	r   c                 ó”  ‡ — ‰                       |¦  «        }t           ‰ j        d         j         di ‰ j        t	          j        |¦  «        t          t          |¦  «        ¦  «        t	          j        t          t          j
        ‰ j        ¦  «        ¦  «        t          t          |¦  «        ¦  «        dœ¤Ž¦  «        }ˆ fd„|D ¦   «         S )Nr   )r3   r]   r^   r5   r_   c                 óT   •— g | ]$}t          t          ‰j        |¦  «        ¦  «        ‘Œ%S rA   rt   ru   s     €r   rw   z#QuerySet.filter.<locals>.<listcomp>¤   rx   r   rA   )rP   r   rS   r7   r   r`   rH   rj   rT   rU   rV   r5   )r8   rm   r_   r{   ra   rb   rO   r   s   `       r   r   zQuerySet.filter›   sº   ø€ Ø�{Š{˜6Ñ"Ô"ˆÝÐ.�D”I˜hÔ'Ô.ð ð Ø”^ÝÔ% dÑ+Ô+Ý�˜E™
œ
‘O”OÝ”l¥3¥u¤~°t´{Ñ#CÔ#CÑDÔDÝ�#˜f™+œ+Ñ&Ô&ð2
ð 2
ð ð ñ ô ˆð 8Ð7Ð7Ð7°3Ð7Ñ7Ô7Ð7r   rR   Fc                 ó0  — |                       |¦  «        }t          |t          ¦  «        r-t          j        t          t          j        |¦  «        ¦  «        }nt          j        |¦  «        }|rdpd}	t           | j        |	         j         di | j	        t          j
        |¦  «        t          t          |¦  «        ¦  «        |t          t          |¦  «        ¦  «        t          j        t          t          j        | j        ¦  «        ¦  «        dœ¤Ž¦  «        S )Nr$   r#   )r3   r]   r^   r{   r_   r5   rA   )rP   rF   ry   r   rT   rU   rz   r   rS   r7   r`   rH   rj   rV   r5   )
r8   r{   r_   rm   ri   r/   ra   rb   rO   Útmpls
             r   ÚsortbyzQuerySet.sortby¦   sñ   € Ø�{Š{˜6Ñ"Ô"ˆÝ�h¥Ñ%Ô%ð 	0Ý”|¥C­¬¸Ñ$AÔ$AÑBÔBˆHˆHå”~ hÑ/Ô/ˆHØÐ2Ð2ÐKÐ6KˆÝÐ+�T”Y˜t”_Ô+ð ð Ø”^ÝÔ% dÑ+Ô+Ý�˜E™
œ
‘O”OØ Ý�#˜f™+œ+Ñ&Ô&Ý”l¥3¥u¤~°t´{Ñ#CÔ#CÑDÔDð/
ð /
ð ð ñ ô ð 	r   c                 óx  — |                       |¦  «        }t           | j        d         j         di | j        t	          j        t          t          j        |                     ¦   «         ¦  «        ¦  «        t	          j        t          t          j	        | 
                    ¦   «         ¦  «        ¦  «        dœ¤Ž¦  «        S )Nr   ©r3   rK   ÚvaluesrA   ©rP   r   rS   r7   r   rT   rU   rV   rK   r~   r�   ©r8   ra   rb   rO   s       r   r   zQuerySet.insert¶   sš   € Ø�{Š{˜6Ñ"Ô"ˆÝÐ0�d”i Ô)Ô0ð ð Ø”^Ý”L¥¥U¤^°T·Y²Y±[´[Ñ!AÔ!AÑBÔBÝ”l¥3¥uÔ'7¸¿º¹¼Ñ#GÔ#GÑHÔHð4
ð 4
ð ð ñ ô ð 	r   c                 óx  — |                       |¦  «        }t           | j        d         j         di | j        t	          j        t          t          j        |                     ¦   «         ¦  «        ¦  «        t	          j        t          t          j	        | 
                    ¦   «         ¦  «        ¦  «        dœ¤Ž¦  «        S )Nr(   rŒ   rA   rŽ   r�   s       r   r(   zQuerySet.replace¾   sš   € Ø�{Š{˜6Ñ"Ô"ˆÝÐ1�d”i 	Ô*Ô1ð ð Ø”^Ý”L¥¥U¤^°T·Y²Y±[´[Ñ!AÔ!AÑBÔBÝ”l¥3¥uÔ'7¸¿º¹¼Ñ#GÔ#GÑHÔHð5
ð 5
ð ð ñ ô ð 	r   c           
      ó°   — |                       |¦  «        }t          j        |¦  «        }t           | j        d         j         di || j        |dœ¤Ž¦  «        S )Nr,   )rR   r3   Úkey_value_pairsrA   )rP   r   rk   r   rS   r7   )r8   rX   ra   rb   rO   Úpairss         r   r   zQuerySet.updateÆ   sl   € Ø�{Š{˜6Ñ"Ô"ˆÝ” Ñ%Ô%ˆÝÐ7�d”i Ô0Ô7ð ð ØØ”^Ø$ð;
ð ;
ð ð ñ ô ð 	r   c                 ó`   — t           | j        d         j        di || j        ||dœ¤Ž¦  «        S )Nr*   )rR   r3   rg   rh   rA   ©r   rS   rP   r7   )r8   rX   rg   rh   s       r   r*   zQuerySet.append_arrayÏ   sO   € ÝÐ6�d”i Ô/Ô6ð ð ØØ”^ØØð	:
ð :
ð ð ñ ô ð 	r   c                 ó®  — |                       |¦  «        }t           |                      d¦  «        j         di | j        t	          j        t          t          j        |                     ¦   «         ¦  «        ¦  «        t	          j        t          t          j        | 	                    ¦   «         ¦  «        ¦  «        t	          j
        |¦  «        dœ¤Ž¦  «        S )Nr1   )r3   rK   r�   r’   rA   )rP   r   rS   r7   r   rT   rU   rV   rK   r�   rk   r�   s       r   r1   zQuerySet.insert_or_update×   s¬   € Ø�{Š{˜6Ñ"Ô"ˆÝÐ:�d—i’iÐ 2Ñ3Ô3Ô:ð ð Ø”^Ý”L¥¥U¤^°T·Y²Y±[´[Ñ!AÔ!AÑBÔBÝ”l¥3¥u¤~°t·{²{±}´}Ñ#EÔ#EÑFÔFÝ$œ¨tÑ4Ô4ð	>
ð >
ð ð ñ ô ð 	r   c                 óú   — |                       |¦  «        }|                       |¦  «        }t           | j        d         j         di | j        t	          j        |¦  «        t	          j        |¦  «        dœ¤Ž¦  «        S )Nr   )r3   Úrulesr’   rA   )rP   r   rS   r7   r   r`   rk   )r8   r˜   ra   rb   rO   s        r   Ú	update_byzQuerySet.update_byà   sƒ   € Ø�{Š{˜6Ñ"Ô"ˆØ—’˜EÑ"Ô"ˆÝÐ0�d”i Ô)Ô0ð ð Ø”^ÝÔ& uÑ-Ô-Ý$œ¨tÑ4Ô4ð4
ð 4
ð ð ñ ô ð 	r   c           	      ó\   — t           | j        d         j        di | j        |dœ¤Ž¦  «        S )Nr-   )r3   rR   rA   r•   )r8   rX   s     r   r)   zQuerySet.deleteé   sI   € ÝÐ7�d”i Ô0Ô7ð ð Ø”^Øð;
ð ;
ð ð ñ ô ð 	r   c           
      óª   — |                       |¦  «        }t           | j        d         j         di | j        t	          j        |¦  «        dœ¤Ž¦  «        S )Nr)   )r3   r˜   rA   )rP   r   rS   r7   r   r`   r�   s       r   Ú	delete_byzQuerySet.delete_byï   se   € Ø�{Š{˜6Ñ"Ô"ˆÝÐ0�d”i Ô)Ô0ð ð Ø”^ÝÔ& tÑ,Ô,ð4
ð 4
ð ð ñ ô ð 	r   c                 ó`   — t           | j        d         j        di || j        ||dœ¤Ž¦  «        S )Nr.   ©rR   r3   rg   ÚnumrA   r•   ©r8   rX   rg   rŸ   s       r   r.   zQuerySet.incrö   óO   € ÝÐ.�d”i Ô'Ô.ð ð ØØ”^ØØð	2
ð 2
ð ð ñ ô ð 	r   c                 ó`   — t           | j        d         j        di || j        ||dœ¤Ž¦  «        S )Nr/   rž   rA   r•   r    s       r   r/   zQuerySet.decrþ   r¡   r   N)rd   )ro   r   rd   )rR   r   ro   rd   F)r6   Ú
__module__Ú__qualname__rS   r9   rP   rY   rc   r0   ry   r   rG   r   r'   r   r    r   rŠ   r   r(   r   r*   r1   r™   r)   rœ   r.   r/   rA   r   r   r   r      s½  € € € € € ðØÐWðàÐZðð 	Ð5ðð 	ÐJð	ð
 	Ð%ðð 	Ð/ðð 	Ð|ðð 	#ð  %Bðð 	ÐOðð 	Ðoðð 	Ðbðð 	ÐPðð 	ÐDðð 	Ð5ðð 	ÐSðð  	Ðnð!ð" 	ÐDð#ð$ ]Ø>ØUØUØrØwð/ð ð €Dð4(ð (ð (ð
	-ð 	-ð 	-ð?ð ?ð ?ð	.ð 	.ð 	.ð	ð 	ð 	ð 	ð8ð 8¸4ð 8ð 8ð 8ð 8ð$ ,.ð ð °$ð ð ð ð ð 57ð 
8ð 
8ÈDð 
8ð 
8ð 
8ð 
8ðð ð ðð ð ð	8ð 	8ð 	8ð 	8ðð ð ð ð ð ð ðð ð ðð ð ðð ð ð°4ð ð ð ð ðð ð ðð ð ðð ð ðð ð ðð ð ð ð r   N)rd   r   Úpostgresr   r   Ú__all__r   r   r   Úobjectr   rA   r   r   ú<module>r¨      s›   ðØ Ð Ð Ð Ð Ð Ø (Ð (Ð (Ð (Ð (Ð (Øˆ,€ðð ð ð+ð +ð +ð+ð +ð +ðhð hð hð hð hˆvñ hô hð hð hð hr   