ó
    //¡j>H  ã                   óF  • S r SSKrSSKJrJr  SSKJrJrJr  SSKJ	r	J
r
Jr   " S S5      rS-S jr " S	 S
5      r " S S5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S\5      r\" \\5        \" \\SSSS9r\R-                  5         \" \\SSSS9r\R-                  5         \" \\SSS S9r\R-                  5         \" S!\S"S#S$S9r\R-                  5         \" S%\S&S'S(S9r\R-                  5         \" S)\S*S+S,S9r\R-                  5         g).z1Implementation of the Range type and adaptation

é    N)ÚProgrammingErrorÚInterfaceError)Ú	ISQLQuoteÚadaptÚregister_adapter)Únew_typeÚnew_array_typeÚregister_typec                   óä   • \ rS rSrSrSrSS jrS rS r\	S 5       r
\	S	 5       r\	S
 5       r\	S 5       r\	S 5       r\	S 5       r\	S 5       rS rS rS rS rS rS rS rS rS rS rS rSrg)ÚRangeé#   am  Python representation for a PostgreSQL |range|_ type.

:param lower: lower bound for the range. `!None` means unbound
:param upper: upper bound for the range. `!None` means unbound
:param bounds: one of the literal strings ``()``, ``[)``, ``(]``, ``[]``,
    representing whether the lower or upper bounds are included
:param empty: if `!True`, the range is empty

©Ú_lowerÚ_upperÚ_boundsNc                 óŒ   • U(       d(  US;  a  [        SU< 35      eXl        X l        X0l        g S =U l        =U l        U l        g )N)ú[)z(]z()z[]zbound flags not valid: )Ú
ValueErrorr   r   r   )ÚselfÚlowerÚupperÚboundsÚemptys        Úh/var/www/html/health-monitoring.indevconsultancy.in/venv/lib/python3.13/site-packages/psycopg2/_range.pyÚ__init__ÚRange.__init__/   sE   € ÞØÐ5Ó5Ü Ð#:¸6¹*Ð!EÓFÐFàŒKØŒKØ!�Là7;Ð;ˆDŒKÐ;˜$œ+¨­ó    c                 óÚ   • U R                   c  U R                  R                   S3$ SR                  U R                  R                  U R                  U R
                  U R                   5      $ )Nz(empty=True)z{}({!r}, {!r}, {!r}))r   Ú	__class__Ú__name__Úformatr   r   ©r   s    r   Ú__repr__ÚRange.__repr__:   sV   € Ø�<‰<ÑØ—n‘n×-Ñ-Ð.¨lÐ;Ð;à)×0Ñ0°·±×1HÑ1HØ—‘˜TŸ[™[¨$¯,©,ó8ð 8r   c                 óÎ   • U R                   c  gU R                   S   [        U R                  5      S[        U R                  5      U R                   S   /nSR	                  U5      $ )Nr   r   z, é   Ú )r   Ústrr   r   Újoin)r   Úitemss     r   Ú__str__ÚRange.__str__A   sY   € Ø�<‰<ÑØð �L‰L˜‰OÜ�—‘ÓØÜ�—‘ÓØ�L‰L˜‰Oð
ˆð �w‰w�u‹~Ðr   c                 ó   • U R                   $ )z:The lower bound of the range. `!None` if empty or unbound.)r   r"   s    r   r   ÚRange.lowerN   ó   € ð �{‰{Ðr   c                 ó   • U R                   $ )z:The upper bound of the range. `!None` if empty or unbound.)r   r"   s    r   r   ÚRange.upperS   r/   r   c                 ó   • U R                   SL $ )z`!True` if the range is empty.N©r   r"   s    r   ÚisemptyÚRange.isemptyX   s   € ð �|‰|˜tÐ#Ð#r   c                 ó:   • U R                   c  gU R                  SL $ )z0`!True` if the range doesn't have a lower bound.NF©r   r   r"   s    r   Ú	lower_infÚRange.lower_inf]   ó    € ð �<‰<ÑØØ�{‰{˜dÐ"Ð"r   c                 ó:   • U R                   c  gU R                  SL $ )z1`!True` if the range doesn't have an upper bound.NF©r   r   r"   s    r   Ú	upper_infÚRange.upper_infd   r:   r   c                 ó\   • U R                   b  U R                  c  gU R                   S   S:H  $ )z4`!True` if the lower bound is included in the range.Fr   Ú[r7   r"   s    r   Ú	lower_incÚRange.lower_inck   ó-   € ð �<‰<Ñ 4§;¡;Ñ#6ØØ�|‰|˜A‰ #Ñ%Ð%r   c                 ó\   • U R                   b  U R                  c  gU R                   S   S:H  $ )z4`!True` if the upper bound is included in the range.Fr&   Ú]r<   r"   s    r   Ú	upper_incÚRange.upper_incr   rC   r   c                 ó&  • U R                   c  gU R                  b4  U R                   S   S:X  a  XR                  :  a  gOXR                  ::  a  gU R                  b5  U R                   S   S:X  a  XR                  :”  a  g gXR                  :¼  a  gg)NFr   r@   r&   rE   T©r   r   r   )r   Úxs     r   Ú__contains__ÚRange.__contains__y   s‹   € Ø�<‰<ÑØà�;‰;Ñ"Ø�|‰|˜A‰ #Ó%Ø—{‘{“?Ø ð #ð Ÿ™Ó#Ø à�;‰;Ñ"Ø�|‰|˜A‰ #Ó%Ø—{‘{“?Ø ð #ð ð Ÿ™Ó#Ø àr   c                 ó   • U R                   S L$ ©Nr3   r"   s    r   Ú__bool__ÚRange.__bool__�   s   € Ø�|‰| 4Ð'Ð'r   c                 óà   • [        U[        5      (       d  gU R                  UR                  :H  =(       a9    U R                  UR                  :H  =(       a    U R                  UR                  :H  $ )NF)Ú
isinstancer   r   r   r   ©r   Úothers     r   Ú__eq__ÚRange.__eq__’   sQ   € Ü˜%¤×'Ñ'ØØ—‘˜uŸ|™|Ñ+÷ .Ø—‘˜uŸ|™|Ñ+÷.à—‘ §¡Ñ-ð	/r   c                 ó.   • U R                  U5      (       + $ rN   )rU   rS   s     r   Ú__ne__ÚRange.__ne__™   s   € Ø—;‘;˜uÓ%Ô%Ð%r   c                 óZ   • [        U R                  U R                  U R                  45      $ rN   )Úhashr   r   r   r"   s    r   Ú__hash__ÚRange.__hash__œ   s    € Ü�T—[‘[ $§+¡+¨t¯|©|Ð<Ó=Ð=r   c                 ó¢   • [        U[        5      (       d  [        $ S H.  n[        X5      n[        X5      nX4:X  a  M   Uc    gUc    gX4:  s  $    g)Nr   TF)rR   r   ÚNotImplementedÚgetattr)r   rT   ÚattrÚ
self_valueÚother_values        r   Ú__lt__ÚRange.__lt__£   s\   € Ü˜%¤×'Ñ'Ü!Ð!Û3ˆDÜ  Ó,ˆJÜ! %Ó.ˆKØÓ(ÙØÑ#ÙØÑ$Ùà!Ñ/Ò/ñ 4ð r   c                 ó0   • X:X  a  gU R                  U5      $ ©NT)rd   rS   s     r   Ú__le__ÚRange.__le__³   ó   € Ø‹=Øà—;‘;˜uÓ%Ð%r   c                 óZ   • [        U[        5      (       a  UR                  U 5      $ [        $ rN   )rR   r   rd   r_   rS   s     r   Ú__gt__ÚRange.__gt__¹   s$   € Ü�eœU×#Ñ#Ø—<‘< Ó%Ð%ä!Ð!r   c                 ó0   • X:X  a  gU R                  U5      $ rg   )rl   rS   s     r   Ú__ge__ÚRange.__ge__¿   rj   r   c                 ó~   • U R                    Vs0 s H!  n[        X5      (       d  M  U[        X5      _M#     sn$ s  snf rN   )Ú	__slots__Úhasattrr`   )r   Úslots     r   Ú__getstate__ÚRange.__getstate__Å   s>   € àŸšó?Ú&�¬'°$×*=ó *�”g˜dÓ)Ò)Ù&ñ?ð 	?ùò ?s   �:§:c                 óN   • UR                  5        H  u  p#[        XU5        M     g rN   )r*   Úsetattr)r   Ústatert   Úvalues       r   Ú__setstate__ÚRange.__setstate__É   s   € Ø Ÿ;™;ž=‰KˆDÜ�D Ö&ò )r   rI   )NNr   F)r    Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rr   r   r#   r+   Úpropertyr   r   r4   r8   r=   rA   rF   rK   rO   rU   rX   r\   rd   rh   rl   ro   ru   r{   Ú__static_attributes__© r   r   r   r   #   sà   † ñð 0€Iô	<ò8òð ñó ðð ñó ðð ñ$ó ð$ð ñ#ó ð#ð ñ#ó ð#ð ñ&ó ð&ð ñ&ó ð&òò,(ò/ò&ò>òò &ò"ò&ò?õ'r   r   c                 ó‚   • [         R                  XU5      nUR                  U(       + =(       a    U=(       d    S5        U$ )a™  Create and register an adapter and the typecasters to convert between
a PostgreSQL |range|_ type and a PostgreSQL `Range` subclass.

:param pgrange: the name of the PostgreSQL |range| type. Can be
    schema-qualified
:param pyrange: a `Range` strict subclass, or just a name to give to a new
    class
:param conn_or_curs: a connection or cursor used to find the oid of the
    range and its subtype; the typecaster is registered in a scope limited
    to this object, unless *globally* is set to `!True`
:param globally: if `!False` (default) register the typecaster only on
    *conn_or_curs*, otherwise register it globally
:return: `RangeCaster` instance responsible for the conversion

If a string is passed to *pyrange*, a new `Range` subclass is created
with such name and will be available as the `~RangeCaster.range` attribute
of the returned `RangeCaster` object.

The function queries the database on *conn_or_curs* to inspect the
*pgrange* type and raises `~psycopg2.ProgrammingError` if the type is not
found.  If querying the database is not advisable, use directly the
`RangeCaster` class and register the adapter and typecasters using the
provided functions.

N)ÚRangeCasterÚ_from_dbÚ	_register)ÚpgrangeÚpyrangeÚconn_or_cursÚgloballyÚcasters        r   Úregister_ranger�   Î   s5   € ô4 ×!Ñ! '°LÓA€FØ
×Ñ˜”\×2 l×:°dÔ;Ø€Mr   c                   ó4   • \ rS rSrSrSrS rS rS rS r	Sr
g)	ÚRangeAdapteréí   z–`ISQLQuote` adapter for `Range` subclasses.

This is an abstract class: concrete classes must set a `name` class
attribute or override `getquoted()`.
Nc                 ó   • Xl         g rN   )Úadapted)r   r’   s     r   r   ÚRangeAdapter.__init__õ   s   € Ø�r   c                 ó.   • U R                   [        L a  U $ g rN   )Ú_protor   )r   Úprotos     r   Ú__conform__ÚRangeAdapter.__conform__ø   s   € Ø�;‰;œ)Ò#ØˆKð $r   c                 ó   • Xl         g rN   )Ú_conn)r   Úconns     r   ÚprepareÚRangeAdapter.prepareü   s   € Ø�
r   c                 ó¾  • U R                   c  [        S5      eU R                  nUR                  (       a  SU R                   R	                  S5      -   $ UR
                  bR  [        UR
                  5      n[        US5      (       a  UR                  U R                  5        UR                  5       nOSnUR                  bR  [        UR                  5      n[        US5      (       a  UR                  U R                  5        UR                  5       nOSnU R                   R	                  S5      S-   U-   S-   U-   S-   UR                  R	                  S5      -   S	-   $ )
NzMRangeAdapter must be subclassed overriding its name or the getquoted() methods	   'empty'::Úutf8rœ   s   NULLó   (s   , s   , 's   '))ÚnameÚNotImplementedErrorr’   r4   Úencoder   r   rs   rœ   rš   Ú	getquotedr   r   )r   ÚrÚar   r   s        r   r¤   ÚRangeAdapter.getquotedÿ   s$  € Ø�9‰9ÑÜ%ð,ó-ð -ð �L‰LˆØ�9�9Ø $§)¡)×"2Ñ"2°6Ó":Ñ:Ð:à�7‰7ÑÜ�a—g‘g“ˆAÜ�q˜)×$Ñ$Ø—	‘	˜$Ÿ*™*Ô%Ø—K‘K“M‰EàˆEà�7‰7ÑÜ�a—g‘g“ˆAÜ�q˜)×$Ñ$Ø—	‘	˜$Ÿ*™*Ô%Ø—K‘K“M‰EàˆEà�y‰y×Ñ Ó'¨$Ñ.°Ñ6¸Ñ>ÀÑFØñØ—y‘y×'Ñ'¨Ó/ñ0Ø27ñ8ð 	8r   )rš   r’   )r    r}   r~   r   r€   r¡   r   r—   rœ   r¤   r‚   rƒ   r   r   r�   r�   í   s"   † ñð
 €Dòòòõ8r   r�   c                   óª   • \ rS rSrSrSS jrS r\S 5       r\	R                  " S\	R                  5      r\	R                  " S5      rSS	 jrSS
 jrSrg)r…   i  zùHelper class to convert between `Range` and PostgreSQL range types.

Objects of this class are usually created by `register_range()`. Manual
creation could be useful if querying the database is not advisable: in
this case the oids must be provided.
Nc                 ó:  • X@l         U R                  X5        U R                  R                  =(       d     U R                  R                  R
                  n[        U4X`R                  5      U l        Ub!  [        U4US-   U R                  5      U l
        g S U l
        g )NÚARRAY)Úsubtype_oidÚ_create_rangesÚadapterr¡   r   r    r   ÚparseÚ
typecasterr	   Úarray_typecaster)r   rˆ   r‰   Úoidr«   Ú	array_oidr¡   s          r   r   ÚRangeCaster.__init__$  s|   € Ø&ÔØ×Ñ˜GÔ-à�|‰|× Ñ ×C D§L¡L×$:Ñ$:×$CÑ$Cˆä" C 6¨4·±Ó<ˆŒàÑ Ü$2Ø�˜d W™n¨d¯o©oó%?ˆDÕ!ð %)ˆDÕ!r   c                 ó&  • SU l         [        U[        5      (       a(  [        U[        40 5      U l         XR                   l        O% [        U[        5      (       a  U[        La  Xl         U R                   c  [        S5      eSU l         [        U[        5      (       a  [        U[        40 5      U l        [        U[        5      (       a  U[        La  X l        U R                  c  [        S5      eg! [         a     N•f = f! [         a     N5f = f)z0Create Range and RangeAdapter classes if needed.Nz:pgrange must be a string or a RangeAdapter strict subclassz1pyrange must be a type or a Range strict subclass)
r­   rR   r(   Útyper�   r¡   Ú
issubclassÚ	TypeErrorÚranger   )r   rˆ   r‰   s      r   r¬   ÚRangeCaster._create_ranges2  s  € ð ˆŒÜ�gœs×#Ñ#Ü ¬,¨¸"Ó=ˆDŒLØ '�L‰LÕðÜ˜g¤|×4Ñ4Ø#¬<Ò7Ø#*”Lð �<‰<ÑÜØLóNð Nð ˆŒ
ð	Ü˜'¤3×'Ñ'Ü! '¬E¨8°RÓ8�”
Ü˜'¤5×)Ñ)¨g¼UÒ.BØ$”
ð �:‰:ÑÜØCóEð Eð øô! ó Ùðûô ó 	Ùð	ús%   Á$C3 Â
AD Ã3
D Ã?D Ä
DÄDc                 ó(  • SSK Jn  SSKJn  U" U5      u  pgUR                  R
                  S:  a"  [        SUR                  R
                  -  5      eUR                  nSU;   a  UR                  SS5      u  pšOUn
Sn	UR                  S	X©45        UR                  5       nU(       do   S
nUR                  U:X  a  UR                  S5        SnUR                  SU45        UR                  5       nU(       a  USS u  p©W(       a  UR                  S5        X„:w  a!  UR                  (       d  UR                  5         U(       d  [        SU S35      eUSS u  pÞn[        XXÞUS9$ ! [         a     Nsf = f! W(       a  UR                  S5        f f = f)zlReturn a `RangeCaster` instance for the type *pgrange*.

Raise `ProgrammingError` if the type is not found.
r   )ÚSTATUS_IN_TRANSACTION)Ú_solve_conn_cursiX` z'range types not available in version %sÚ.r&   Úpublicz¯select rngtypid, rngsubtype, typarray
from pg_range r
join pg_type t on t.oid = rngtypid
join pg_namespace ns on ns.oid = typnamespace
where typname = %s and ns.nspname = %s;
FzSAVEPOINT register_typeTz³SELECT rngtypid, rngsubtype, typarray, typname, nspname
from pg_range r
join pg_type t on t.oid = rngtypid
join pg_namespace ns on ns.oid = typnamespace
WHERE t.oid = %s::regtype
é   Nz#ROLLBACK TO SAVEPOINT register_typezPostgreSQL range 'z' not found©r±   r«   r²   )Úpsycopg2.extensionsr»   Úpsycopg2.extrasr¼   ÚinfoÚserver_versionr   ÚstatusÚsplitÚexecuteÚfetchoneÚ
autocommitÚrollbackr…   )r   r¡   r‰   rŠ   r»   r¼   r›   ÚcursÚconn_statusÚschemaÚtnameÚrecÚ	savepointrµ   ÚsubtypeÚarrays                   r   r†   ÚRangeCaster._from_dbU  sœ  € õ 	>Ý4Ù% lÓ3‰
ˆà�9‰9×#Ñ# eÓ+Ü"Ð#LØ—)‘)×*Ñ*ñ$+ó ,ð ,ð —k‘kˆð �$‹;Ø ŸJ™J s¨AÓ.‰MˆF�EàˆEØˆFð 	�‰ð ð €_ô	ð �m‰m‹oˆæðHØ!�	ð —;‘;Ð"7Ó7Ø—L‘LÐ!:Ô;Ø $�Ià—‘ð ð €Xôð —m‘m“o�ÞØ$'¨¨ G‘M�EæØ—L‘LÐ!FÔGð Ó/¸¿¿Ø�M‰MŒOæÜ"Ø$ T F¨+Ð6ó8ð 8ð  # 2 A˜wÑˆ�uä˜4Ø°Uñ<ð 	<øô) $ó Ùðûö Ø—L‘LÐ!FÕGð ús*   Â)8E& Ã!E6 Å&
E3Å0E6 Å2E3Å3E6 Å6Fa]  
        ( \(|\[ )                   # lower bound flag
        (?:                         # lower bound:
          " ( (?: [^"] | "")* ) "   #   - a quoted string
          | ( [^",]+ )              #   - or an unquoted string
        )?                          #   - or empty (not catched)
        ,
        (?:                         # upper bound:
          " ( (?: [^"] | "")* ) "   #   - a quoted string
          | ( [^"\)\]]+ )           #   - or an unquoted string
        )?                          #   - or empty (not catched)
        ( \)|\] )                   # upper bound flag
        z	(["\\])\1c                 ó~  • Uc  g US:X  a  U R                  SS9$ U R                  R                  U5      nUc  [        SU S35      eUR	                  S5      nUc0  UR	                  S5      nUb  U R
                  R                  SU5      nUR	                  S	5      nUc0  UR	                  S
5      nUb  U R
                  R                  SU5      nUb8  UR                  U R                  U5      nUR                  U R                  U5      nUR	                  S5      UR	                  S5      -   nU R                  XEU5      $ )Nr   T)r   zfailed to parse range: 'Ú'r¿   é   z\1é   é   r&   é   )	r¸   Ú	_re_rangeÚmatchr   ÚgroupÚ_re_undoubleÚsubÚcastr«   )r   ÚsÚcurÚmr   r   r   s          r   r®   ÚRangeCaster.parse²  s&  € Ø‰9Øà�‹<Ø—:‘: D�:Ð)Ð)à�N‰N× Ñ  Ó#ˆØ‰9Ü Ð#;¸A¸3¸aÐ!@ÓAÐAà—‘˜“
ˆØ‰=Ø—G‘G˜A“JˆEØÑ Ø×)Ñ)×-Ñ-¨e°UÓ;�à—‘˜“
ˆØ‰=Ø—G‘G˜A“JˆEØÑ Ø×)Ñ)×-Ñ-¨e°UÓ;�à‰?Ø—H‘H˜T×-Ñ-¨uÓ5ˆEØ—H‘H˜T×-Ñ-¨uÓ5ˆEà—‘˜“˜aŸg™g a›jÑ(ˆà�z‰z˜%¨Ó/Ð/r   c                 ó¶   • [        U R                  U5        U R                  b  [        U R                  U5        [        U R                  U R
                  5        g rN   )r
   r¯   r°   r   r¸   r­   )r   Úscopes     r   r‡   ÚRangeCaster._registerÑ  s>   € Ü�d—o‘o uÔ-Ø× Ñ Ñ,Ü˜$×/Ñ/°Ô7ä˜Ÿ™ T§\¡\Õ2r   )r­   r°   r¸   r«   r¯   rN   )r    r}   r~   r   r€   r   r¬   Úclassmethodr†   ÚreÚcompileÚVERBOSErÚ   rÝ   r®   r‡   r‚   rƒ   r   r   r…   r…     sb   † ñô)ò!EðF ñJ<ó ðJ<ðX —
’
ð ð �Z‰Zó€Ið —:’:˜lÓ+€Lô0÷>3r   r…   c                   ó   • \ rS rSrSrSrg)ÚNumericRangeiÙ  z¸A `Range` suitable to pass Python numeric types to a PostgreSQL range.

PostgreSQL types :sql:`int4range`, :sql:`int8range`, :sql:`numrange` are
casted into `!NumericRange` instances.
rƒ   N©r    r}   r~   r   r€   r‚   rƒ   r   r   rì   rì   Ù  s   † ñò
 	r   rì   c                   ó   • \ rS rSrSrSrg)Ú	DateRangeiâ  z#Represents :sql:`daterange` values.rƒ   Nrí   rƒ   r   r   rï   rï   â  ó   † Ù-Úr   rï   c                   ó   • \ rS rSrSrSrg)ÚDateTimeRangeiç  z!Represents :sql:`tsrange` values.rƒ   Nrí   rƒ   r   r   rò   rò   ç  s   † Ù+Úr   rò   c                   ó   • \ rS rSrSrSrg)ÚDateTimeTZRangeiì  z#Represents :sql:`tstzrange` values.rƒ   Nrí   rƒ   r   r   rô   rô   ì  rð   r   rô   c                   ó   • \ rS rSrSrS rSrg)ÚNumberRangeAdapteriö  z1Adapt a range if the subtype doesn't need quotes.c                 óÂ  • U R                   nUR                  (       a  gUR                  (       d3  [        UR                  5      R                  5       R                  S5      nOSnUR                  (       d3  [        UR                  5      R                  5       R                  S5      nOSnSUR                  S    U SU UR                  S    S3R                  S5      $ )Ns   'empty'Úasciir'   rÕ   r   Ú,r&   )r’   r4   r8   r   r   r¤   Údecoder=   r   r   r£   )r   r¥   r   r   s       r   r¤   ÚNumberRangeAdapter.getquotedø  s©   € Ø�L‰LˆØ�9�9Øà�{�{ô
 ˜!Ÿ'™'“N×,Ñ,Ó.×5Ñ5°gÓ>‰EàˆEà�{�{Ü˜!Ÿ'™'“N×,Ñ,Ó.×5Ñ5°gÓ>‰EàˆEà�A—I‘I˜a‘L�> % ¨¨%¨°·±¸1±°¸aÐ@×HÑHÈÓQÐQr   rƒ   N)r    r}   r~   r   r€   r¤   r‚   rƒ   r   r   rö   rö   ö  s   † Ù;õRr   rö   i@  é   iA  rÀ   iV  é   iW  iB  i¤  iC  Ú	daterangeiH  i:  iI  ÚtsrangeiD  iZ  iE  Ú	tstzrangeiF  i   iG  )F)r€   rè   Úpsycopg2._psycopgr   r   rÁ   r   r   r   r   r	   r
   r   r�   r�   r…   rì   rï   rò   rô   rö   Úint4range_casterr‡   Úint8range_casterÚnumrange_casterÚdaterange_casterÚtsrange_casterÚtstzrange_casterrƒ   r   r   Ú<module>r     sb  ðñó6 
ç >ß BÑ Bß GÑ G÷h'ñ h'ôV÷>-8ñ -8÷`y3ñ y3ôx	�5ô 	ô	�ô 	ô
	�Eô 	ô
	�eô 	ôR˜ô Rñ2 �Ð1Ô 2ñ
 Ð1°<Ø˜"¨ñ.Ð à × Ñ Ô áÐ1°<Ø˜"¨ñ.Ð à × Ñ Ô áÐ0°,Ø˜$¨$ñ0€à × Ñ Ô á˜{¨IØ˜$¨$ñ0Ð à × Ñ Ô á˜Y¨Ø˜$¨$ñ0€à × Ñ Ô á˜{¨OØ˜$¨$ñ0Ð à × Ñ Õ r   