ó
    Eñixˆ  ã                  óN  • % S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKJrJr  SSKJr  SSKJr  SSKJrJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSK J!r!  \(       a  SSK"J#r#J$r$  \S   r%Sr&Sr'\(" \SS5      r)\
RT                  S:g  =(       a    \RV                  \RX                  ;   r-\" 5       r.S\/S'   \R`                  " 5       q1Sq2Sq3\" SS9 " S S5      5       r4\ " S S5      5       r5\" SS9 " S S5      5       r6\ " S S5      5       r7 " S  S!\85      r9 " S" S#\9S$9r: " S% S&\Rv                  5      r<SS'.S3S( jjr=SS'.S4S) jjr>S5S* jr?SS'.         S6S+ jjr@SS'.S7S, jjrASS'.S7S- jjrBS8S. jrCS9S/ jrDS:S0 jrES:S1 jrFS:S2 jrGS#/rHg);zZCross-process and cross-host reader/writer lock built on :class:`SoftFileLock` primitives.é    )ÚannotationsN)ÚcontextmanagerÚsuppress)Ú	dataclass)ÚPath)ÚTYPE_CHECKINGÚLiteral)ÚWeakValueDictionary)ÚAcquireReturnProxy)ÚTimeout)ÚSoftFileLock)Úensure_directory_exists)ÚCallableÚ	Generator)ÚreadÚwritez.breaki   Ú
O_NOFOLLOWÚwin32ú,WeakValueDictionary[Path, SoftReadWriteLock]Ú_all_instancesFT)Úfrozenc                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg)Ú_Pathsé-   ÚstrÚstater   Úreaders© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__annotations__Ú__static_attributes__r   ó    ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/filelock/_soft_rw/_sync.pyr   r   -   s   ‡ àƒJØƒJØ†Lr&   r   c                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg)	Ú_Locksé4   úthreading.LockÚinternalÚtransactionr   r   r   Nr   r   r&   r'   r)   r)   4   s   ‡ àÓØÓØÖr&   r)   c                  ó4   • \ rS rSr% S\S'   S\S'   S\S'   Srg)	Ú_MarkerInfoé;   r   ÚtokenÚintÚpidÚhostnamer   Nr   r   r&   r'   r/   r/   ;   s   ‡ àƒJØ	ƒHØ†Mr&   r/   c                  ój   • \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   S	\S'   S\S'   S\S'   Srg)Ú_HoldéB   zYEverything that exists only while a lock is held; ``None`` when the instance has no lock.r2   ÚlevelÚ_ModeÚmodeú
int | NoneÚwrite_thread_idr   Úmarker_nameÚboolÚ	is_readerr1   Ú_HeartbeatThreadÚheartbeat_threadúthreading.EventÚheartbeat_stopr   N)r    r!   r"   r#   Ú__doc__r$   r%   r   r&   r'   r6   r6   B   s1   ‡ ácàƒJØ
ƒKØÓØÓØƒOØƒJØ&Ó&Ø#Ö#r&   r6   c                  óv   ^ • \ rS rSr% S\S'   S\S'    SSSSSS	S
.               SU 4S jjjjrSrU =r$ )Ú_SoftRWMetaéP   r   Ú
_instancesr+   Ú_instances_lockTç      >@Nç      Ð?©ÚblockingÚis_singletonÚheartbeat_intervalÚstale_thresholdÚpoll_intervalc               óÖ  >• U(       d  [         TU ]  UUUUUUUS9$ [        U5      R                  5       nU R                     U R
                  R                  U5      n	U	c"  [         TU ]  UUUUUUUS9n	X�R
                  U'   OMU	R                  U:w  d  U	R                  U:w  a-  SU	R                   SU	R                   SU SU 3n
[        U
5      eU	sS S S 5        $ ! , (       d  f       g = f)NrL   z$Singleton lock created with timeout=z, blocking=z, cannot be changed to timeout=)
ÚsuperÚ__call__r   ÚresolverI   rH   ÚgetÚtimeoutrM   Ú
ValueError)ÚclsÚ	lock_filerW   rM   rN   rO   rP   rQ   Ú
normalizedÚinstanceÚmsgÚ	__class__s              €r'   rT   Ú_SoftRWMeta.__call__T   s  ø€ ö Ü‘7Ñ#ØØØ!Ø)Ø#5Ø /Ø+ð $ð ð ô ˜)“_×,Ñ,Ó.ˆ
Ø× Ó Ø—~‘~×)Ñ)¨*Ó5ˆHØÑÜ ™7Ñ+ØØØ%Ø!-Ø'9Ø$3Ø"/ð ,ð �ð .6—‘˜zÒ*Ø×!Ñ! WÓ,°×0AÑ0AÀXÓ0Mà:¸8×;KÑ;KÐ:LÈKÐX`×XiÑXiÐWjð k5Ø5<°I¸[ÈÈ
ðTð ô ! “oÐ%Ø÷' !× × ús   ÁBCÃ
C(r   ©éÿÿÿÿ)rZ   ústr | os.PathLike[str]rW   ÚfloatrM   r>   rN   r>   rO   rc   rP   úfloat | NonerQ   rc   ÚreturnÚSoftReadWriteLock)r    r!   r"   r#   r$   rT   r%   Ú__classcell__©r^   s   @r'   rF   rF   P   s‚   ø‡ Ø<Ó<Ø#Ó#ð
 ð*ð
 Ø!Ø$(Ø(,Ø#ñ*à)ð*ð ð*ð
 ð*ð ð*ð "ð*ð &ð*ð ð*ð 
÷*÷ *r&   rF   c                  óø  • \ rS rSr% Sr\" 5       rS\S'   \R                  " 5       r
 S!SSSSSS	.               S"S
 jjjr\S#SS.S$S jjj5       r\S#SS.S$S jjj5       rS#SS.S%S jjjrS#SS.S%S jjjrS&S jrSS.S'S jjr\ S!SS.       S(S jjj5       r        S)S jrS*S jr        S+S jr        S+S jr        S,S jrS&S jrS-S jrS.S jrS/S jrS-S jrS&S jrS r g)0rf   é�   uE
  
Cross-process and cross-host reader/writer lock built on :class:`SoftFileLock` primitives.

Use this class instead of :class:`~filelock.ReadWriteLock` when the lock file lives on a network
filesystem (NFS, Lustre with ``-o flock``, HPC cluster shared storage). ``ReadWriteLock`` is backed
by SQLite and cannot run on NFS because SQLite's ``fcntl`` locking is unreliable there.

Layout on disk for a lock at ``foo.lock``:

- ``foo.lock.state`` â€” a :class:`SoftFileLock` taken only during state transitions (microseconds).
- ``foo.lock.write`` â€” writer marker; its presence means a writer is claiming or holding the lock.
- ``foo.lock.readers/<host>.<pid>.<uuid>`` â€” one file per reader.

Each marker stores a random token (``secrets.token_hex(16)``), the holder's pid, and the holder's
hostname. A daemon heartbeat thread refreshes ``mtime`` on every held marker. A marker whose mtime
has not advanced in ``stale_threshold`` seconds may be evicted by any process on any host, giving
correct behavior when a compute node crashes with a lock held.

Writer acquire is two-phase and writer-preferring: phase 1 claims ``.write`` (blocking any new
reader), phase 2 waits for existing readers to drain. Writer starvation is impossible.

Reentrancy, upgrade/downgrade rules, thread pinning, and singleton caching by resolved path match
:class:`~filelock.ReadWriteLock`.

Forking while holding a lock invalidates the inherited instance in the child so the child cannot
double-own the lock with its parent; ``release()`` on a fork-invalidated instance is a no-op, and
the child must re-acquire if it needs a lock.

Trust boundary: protects against same-UID non-cooperating processes (one host or cross-host) and
same-host different-UID users via ``0o600`` / ``0o700`` permissions. Does not protect against root
compromise, NTP tampering on same-UID cross-host nodes, or multi-tenant mounts where hostile
co-tenants share the UID.

:param lock_file: path to the lock file; sidecar state/write/readers live next to it
:param timeout: maximum wait time in seconds; ``-1`` means block indefinitely
:param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately on contention
:param is_singleton: if ``True``, reuse existing instances for the same resolved path
:param heartbeat_interval: seconds between heartbeat refreshes; default 30 s
:param stale_threshold: seconds of ``mtime`` inactivity before a marker is stale; defaults to
    ``3 * heartbeat_interval``, matching etcd's ``LeaseKeepAlive`` convention
:param poll_interval: seconds between acquire retries under contention; default 0.25 s

.. versionadded:: 3.27.0

r   rH   TrJ   NrK   rL   c          	     ó,  • US::  a  SU 3n[        U5      eUc  US-  nXe::  a  SU SU S3n[        U5      eUS::  a  SU 3n[        U5      e[        R                  " U5      U l        X l        X0l        XPl        X`l        Xpl        [        U R                   S3U R                   S	3U R                   S
3S9U l
        [        U R                  5        [        [        R                  " 5       [        R                  " 5       [        U R                  R                   SS9S9U l        S U l        S U l        SU l        SU l        [,           U [.        [1        U R                  5      R3                  5       '   [5        5         S S S 5        g ! , (       d  f       g = f)Nr   z)heartbeat_interval must be positive, got é   z0stale_threshold must exceed heartbeat_interval (z <= Ú)z$poll_interval must be positive, got z.statez.writez.readers)r   r   r   ra   ©rW   ©r,   r-   r   F)rX   ÚosÚfspathrZ   rW   rM   rO   rP   rQ   r   Ú_pathsr   r)   Ú	threadingÚLockr   r   Ú_locksÚ_readers_dir_fdÚ_holdÚ_fork_invalidatedÚ_closedÚ_all_instances_lockr   r   rU   Ú_register_hooks)	ÚselfrZ   rW   rM   rN   rO   rP   rQ   r]   s	            r'   Ú__init__ÚSoftReadWriteLock.__init__³   ss  € ð  Ó"Ø=Ð>PÐ=QÐRˆCÜ˜S“/Ð!ØÑ"Ø0°1Ñ4ˆOØÓ0ØDÀ_ÐDUÐUYÐZlÐYmÐmnÐoˆCÜ˜S“/Ð!Ø˜AÓØ8¸¸ÐHˆCÜ˜S“/Ð!ä Ÿiši¨	Ó2ˆŒØ%ŒØ&ŒØ);ÔØ&5ÔØ$1ÔäØ—^‘^Ð$ FÐ+Ø—^‘^Ð$ FÐ+Ø—~‘~Ð& hÐ/ñ
ˆŒô
 	  §¡Ô/ÜÜ—^’^Ó%Ü!ŸšÓ(Ü˜tŸ{™{×0Ñ0¸"Ñ=ñ
ˆŒð
 ,0ˆÔØ#'ˆŒ
Ø',ˆÔØ"ˆŒæ Ø=AŒNœ4 §¡Ó/×7Ñ7Ó9Ñ:ÜÔ÷ !× Ö ús   Å5FÆ
F©rM   c             #  ó~   #   • U R                  XS9   Sv •  U R                  5         g! U R                  5         f = f7f)aæ  
Context manager that acquires and releases a shared read lock.

Falls back to instance defaults for *timeout* and *blocking* when ``None``.

:param timeout: maximum wait time in seconds, or ``None`` to use the instance default
:param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately; ``None`` uses the instance default

:raises RuntimeError: if a write lock is already held on this instance
:raises Timeout: if the lock cannot be acquired within *timeout* seconds

r   N)Úacquire_readÚrelease©r|   rW   rM   s      r'   Ú	read_lockÚSoftReadWriteLock.read_lockå   s2   é € ð 	×Ñ˜'ÐÑ5ð	Ûà�L‰L�NøˆD�L‰L�Nüó   ‚=“( —=¨:º=c             #  ó~   #   • U R                  XS9   Sv •  U R                  5         g! U R                  5         f = f7f)a  
Context manager that acquires and releases an exclusive write lock.

Falls back to instance defaults for *timeout* and *blocking* when ``None``.

:param timeout: maximum wait time in seconds, or ``None`` to use the instance default
:param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately; ``None`` uses the instance default

:raises RuntimeError: if a read lock is already held, or a write lock is held by a different thread
:raises Timeout: if the lock cannot be acquired within *timeout* seconds

r   N)Úacquire_writer‚   rƒ   s      r'   Ú
write_lockÚSoftReadWriteLock.write_lockù   s2   é € ð 	×Ñ˜7ÐÑ6ð	Ûà�L‰L�NøˆD�L‰L�Nür†   c               ó"   • U R                  SXS9$ )uö  
Acquire a shared read lock.

If this instance already holds a read lock, the lock level is incremented (reentrant). Attempting to acquire a
read lock while holding a write lock raises :class:`RuntimeError` (downgrade not allowed). On the 0â†’1
transition a daemon heartbeat thread is started that refreshes the reader marker's ``mtime`` every
``heartbeat_interval`` seconds so peers on other hosts do not evict the marker as stale.

:param timeout: maximum wait time in seconds, or ``None`` to use the instance default; ``-1`` means block
    indefinitely
:param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable;
    ``None`` uses the instance default

:returns: a proxy that can be used as a context manager to release the lock

:raises RuntimeError: if a write lock is already held on this instance, if this instance was invalidated by
    :func:`os.fork`, or if :meth:`close` was called
:raises Timeout: if the lock cannot be acquired within *timeout* seconds

r   r   ©Ú_acquirerƒ   s      r'   r�   ÚSoftReadWriteLock.acquire_read  s   € ð* �}‰}˜V Wˆ}Ð@Ð@r&   c               ó"   • U R                  SXS9$ )a   
Acquire an exclusive write lock.

If this instance already holds a write lock from the same thread, the lock level is incremented (reentrant).
Attempting to acquire a write lock while holding a read lock raises :class:`RuntimeError` (upgrade not
allowed). Write locks are pinned to the acquiring thread: a different thread trying to re-enter also raises
:class:`RuntimeError`.

Writer acquisition runs in two phases. Phase 1 atomically claims ``<path>.write`` via ``O_CREAT | O_EXCL``,
which immediately blocks any new reader on any host. Phase 2 waits for existing readers to drain. Writer
starvation is impossible: new readers see ``<path>.write`` during phase 2 and wait behind the pending writer.

:param timeout: maximum wait time in seconds, or ``None`` to use the instance default; ``-1`` means block
    indefinitely
:param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable;
    ``None`` uses the instance default

:returns: a proxy that can be used as a context manager to release the lock

:raises RuntimeError: if a read lock is already held, if a write lock is held by a different thread, if this
    instance was invalidated by :func:`os.fork`, or if :meth:`close` was called
:raises Timeout: if the lock cannot be acquired within *timeout* seconds

r   r   rŒ   rƒ   s      r'   rˆ   ÚSoftReadWriteLock.acquire_write$  s   € ð2 �}‰}˜W gˆ}ÐAÐAr&   c                ó€  • U R                  SS9  U R                  R                     U R                  (       a
   SSS5        gSU l        U R                  b?  [        [        5         [        R                  " U R                  5        SSS5        SU l        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)uþ   
Release any held lock and release internal filesystem resources.

Idempotent. After calling this method the instance can no longer acquire locks â€” subsequent acquires raise
:class:`RuntimeError`. A fork-invalidated instance is closed without raising.
T©ÚforceN)	r‚   ru   r,   ry   rv   r   ÚOSErrorrp   Úclose©r|   s    r'   r•   ÚSoftReadWriteLock.close?  s‡   € ð 	�‰˜4ˆÑ Ø�[‰[×!Ó!Ø�|�|Ø÷ "Ð!ð  ˆDŒLØ×#Ñ#Ñ/ÜœgÕ&Ü—H’H˜T×1Ñ1Ô2÷ 'à'+�Ô$÷ "Ð!÷
 'Õ&ú÷ "Õ!ús)   ¦B/Á#B/Á%!BÂB/Â
B,	Â(B/Â/
B=Fr’   c               óÊ  • U R                   R                     U R                  (       a  SU l         SSS5        gU R                  nUc8  U(       a
   SSS5        gSU R                   S[        U 5       S3n[        U5      eU(       a  SUl        OU=R                  S-  sl        UR                  S:”  a
   SSS5        gSU l        SSS5        WR                  R                  5         UR                  R                  U R                  S-   S9  UR                  (       a  [        UR                  U R                   S	9  g[        UR                  5        g! , (       d  f       N”= f)
a   
Release one level of the current lock.

When the lock level reaches zero the heartbeat thread is stopped and the held marker file is unlinked. On a
fork-invalidated instance (that is, the child of a :func:`os.fork` call made while the parent held a lock)
this method is a no-op so inherited ``with`` blocks can unwind cleanly in the child.

:param force: if ``True``, release the lock completely regardless of the current lock level

:raises RuntimeError: if no lock is currently held and *force* is ``False``

NzCannot release a lock on ú (lock id: z) that is not heldr   é   g      ð?rn   ©Údir_fd)ru   r,   rx   rw   rZ   ÚidÚRuntimeErrorr8   rC   ÚsetrA   ÚjoinrO   r?   Ú_unlinkr=   rv   )r|   r“   Úholdr]   s       r'   r‚   ÚSoftReadWriteLock.releaseP  s  € ð �[‰[×!Ó!Ø×%×%à!�”
Ø÷	 "Ð!ð
 —:‘:ˆDØ‰|ÞØ÷ "Ð!ð 2°$·.±.Ð1AÀÌRÐPTËXÈJÐVhÐi�Ü" 3Ó'Ð'ÞØ�•
à—
’
˜a‘•
Ø�z‰z˜A‹~Ø÷! "Ð!ð" ˆDŒJ÷# "ð, 	×Ñ×ÑÔ!Ø×Ñ×"Ñ"¨4×+BÑ+BÀSÑ+HÐ"ÑIØ�>�>Ü�D×$Ñ$¨T×-AÑ-AÓBä�D×$Ñ$Õ%÷7 "Õ!ús   —EºEÁAEÂ?EÅ
E"c               ó   • U " XUS9$ )aæ  
Return the singleton :class:`SoftReadWriteLock` for *lock_file*.

:param lock_file: path to the lock file; sidecar state/write/readers live next to it
:param timeout: maximum wait time in seconds; ``-1`` means block indefinitely
:param blocking: if ``False``, raise :class:`~filelock.Timeout` immediately when the lock is unavailable

:returns: the singleton lock instance

:raises ValueError: if an instance already exists for this path with different *timeout* or *blocking* values

r   r   )rY   rZ   rW   rM   s       r'   Úget_lockÚSoftReadWriteLock.get_lockz  s   € ñ( �9°Ñ9Ð9r&   c               ó¤  • Uc  U R                   OUnUc  U R                  OUnU R                  R                     U R                  (       a  SU R
                   S3n[        U5      eU R                  (       a  SU R
                   S3n[        U5      eU R                  b  U R                  U5      sS S S 5        $  S S S 5        [        R                  " 5       nU(       d$  U R                  R                  R                  SS9nONUS:X  a$  U R                  R                  R                  SS9nO$U R                  R                  R                  SUS9nU(       d  [        U R
                  5      S e U R                  R                     U R                  b>  U R                  U5      sS S S 5        U R                  R                  R                  5         $  S S S 5        US:X  a  S OXt-   n	[         R"                  " S	5      n
US
:X  a  U R%                  X©US9u  p¼OU R'                  X©US9u  p¼[(        R*                  " 5       n[-        U R.                  U R0                  US[3        U 5      S 3S9nU R                  R                     [5        SUUS
:X  a  [(        R6                  " 5       OS UUU
UUS9U l        S S S 5        UR9                  5         [;        U S9U R                  R                  R                  5         $ ! , (       d  f       GNA= f! , (       d  f       GN<= f! , (       d  f       No= f! U R                  R                  R                  5         f = f)NzSoftReadWriteLock on z4 was invalidated by fork(); construct a new instancez has been closedFr   ra   T)rM   rW   é   r   ©ÚdeadlinerM   zfilelock-heartbeat-Úx)ÚrefreshÚintervalÚ
stop_eventÚnamerš   )r8   r:   r<   r=   r?   r1   rA   rC   ©Úlock)rW   rM   ru   r,   rx   rZ   rž   ry   rw   Ú_validate_reentrantÚtimeÚperf_counterr-   Úacquirer   r‚   ÚsecretsÚ	token_hexÚ_acquire_writer_slotÚ_acquire_reader_slotrs   ÚEventr@   Ú_refresh_markerrO   r�   r6   Ú	get_identÚstartr   )r|   r:   rW   rM   Úeffective_timeoutÚeffective_blockingr]   r½   Úacquiredrª   r1   r=   r?   r®   Ú	heartbeats                  r'   r�   ÚSoftReadWriteLock._acquire�  sÛ  € ð -4©O˜DŸLšLÀÐØ.6Ñ.>˜TŸ]š]ÀHÐà�[‰[×!Ó!Ø×%×%Ø-¨d¯n©nÐ-=Ð=qÐr�Ü" 3Ó'Ð'Ø�|�|Ø-¨d¯n©nÐ-=Ð=MÐN�Ü" 3Ó'Ð'Ø�z‰zÑ%Ø×/Ñ/°Ó5÷ "Ñ!ð &÷ "ô ×!Ò!Ó#ˆÞ!Ø—{‘{×.Ñ.×6Ñ6ÀÐ6ÐF‰HØ "Ó$Ø—{‘{×.Ñ.×6Ñ6ÀÐ6ÐE‰Hà—{‘{×.Ñ.×6Ñ6ÀÐN_Ð6Ð`ˆHÞÜ˜$Ÿ.™.Ó)¨tÐ3ð'	.Ø—‘×%Ó%Ø—:‘:Ñ)Ø×3Ñ3°DÓ9÷ &Ð%ðL �K‰K×#Ñ#×+Ñ+Õ-ðK *÷ &ð  1°BÓ6‘t¸EÑ<UˆHÜ×%Ò% bÓ)ˆEØ�w‹Ø)-×)BÑ)BØÐ7Ið *Cð *Ñ&�˜Yð *.×)BÑ)BØÐ7Ið *Cð *Ñ&�ô #ŸšÓ*ˆJÜ(Ø×,Ñ,Ø×0Ñ0Ø%Ø*¬2¨d«8°A¨,Ð7ñ	ˆIð —‘×%Ó%Ü"ØØØ=AÀW»_¤I×$7Ò$7Ô$9ÐRVØ +Ø'ØØ%.Ø#-ñ	�”
÷ &ð �O‰OÔÜ%¨4Ñ0à�K‰K×#Ñ#×+Ñ+Õ-÷u "Ö!ú÷( &Ö%ú÷. &Õ%ûð �K‰K×#Ñ#×+Ñ+Õ-úsO   ¹A6K4Å.L) ÆLÆ"	L) ÇB-L) É>1LÊ/ L) Ë4
LÌ
LÌL) Ì
L&Ì"L) Ì)&Mc                óÈ  • U R                   nUc   eUR                  U:w  aD  US:X  a  SOSnUS:X  a  SOSnSU SU R                   S[        U 5       SU S	U S
3n[	        U5      eUS:X  aZ  [
        R                  " 5       =obR                  :w  a6  SU R                   S[        U 5       SU SUR                   3n[	        U5      eU=R                  S-  sl        [        U S9$ )Nr   r   Ú	downgradeÚupgradezCannot acquire z	 lock on r™   z): already holding a z lock (z not allowed)zCannot acquire write lock on z) from thread z while it is held by thread rš   r°   )
rw   r:   rZ   r�   rž   rs   r¼   r<   r8   r   )r|   r:   r¢   ÚoppositeÚ	directionr]   Úcurs          r'   r²   Ú%SoftReadWriteLock._validate_reentrantÖ  s  € Ø�z‰zˆØÑÐÐØ�9‰9˜ÓØ"&¨&£.‘w°fˆHØ'+¨v£~™¸9ˆIà! $  y°·±Ð0@ÀÌBÈtËHÈ:ð V%Ø%- J¨g°i°[ÀðOð ô ˜sÓ#Ð#Ø�7‹?¤y×':Ò':Ó'<Ð < ×AUÑAUÓUà/°·±Ð/?¸{Ì2ÈdË8È*ð UØ"˜eÐ#?À×@TÑ@TÐ?UðWð ô ˜sÓ#Ð#Ø�
Š
�a‰�
Ü! tÑ,Ð,r&   c               ó  ^ ^• T R                  5         SU U4S jjnSU 4S jjnT R                  XBUS9   T R                  XRUS9  T R                  R
                  S4$ ! [         a!    [        T R                  R
                  5        e f = f)Nc                 ó®  >• T R                   R                     [        T R                  R                  T R
                  [        R                  " 5       S9  [        T R                  R                  5      (       a
   S S S 5        g [        T R                  R                  T5         S S S 5        g! [         a     S S S 5        gf = f! , (       d  f       g= f)N©rP   ÚnowFT)
ru   r   Ú_break_stale_markerrr   r   rP   r³   Ú_file_existsÚ_atomic_create_markerÚFileExistsError)r|   r1   s   €€r'   Útry_claim_writerÚ@SoftReadWriteLock._acquire_writer_slot.<locals>.try_claim_writerõ  s£   ø€ Ø—‘×"Ó"Ü# D§K¡K×$5Ñ$5Àt×G[ÑG[Ôae×ajÒajÓalÒmÜ §¡× 1Ñ 1×2Ñ2Ø ÷ #Ð"ð!Ü)¨$¯+©+×*;Ñ*;¸UÕC÷ #ð øô 'ó !Ø ÷ #Ð"ð!ú÷ #Ô"ð ús*   ˜A"CÂ B.Â.
CÂ8CÃCÃCÃ
Cc                 óh  >• T R                   R                     [        [        5         [	        T R
                  R                  5        S S S 5        T R                  [        R                  " 5       5        T R                  5       (       + sS S S 5        $ ! , (       d  f       NP= f! , (       d  f       g = f©N)
ru   r   r   r”   Ú_touchrr   r   Ú_break_stale_readersr³   Ú_any_readersr–   s   €r'   Úreaders_drained_touchingÚHSoftReadWriteLock._acquire_writer_slot.<locals>.readers_drained_touching   sn   ø€ Ø—‘×"Ó"ô œgÕ&Ü˜4Ÿ;™;×,Ñ,Ô-÷ 'à×)Ñ)¬$¯)ª)«+Ô6Ø×,Ñ,Ó.Ô.÷ #Ñ"÷ 'Õ&ú÷ #Õ"ús#   ˜B#¨ BÁA B#Â
B 	ÂB#Â#
B1r©   F©re   r>   )Ú_open_readers_dirÚ	_wait_forr   r¡   rr   r   )r|   r1   rª   rM   rÒ   rÙ   s   ``    r'   r¸   Ú&SoftReadWriteLock._acquire_writer_slotê  s‡   ù€ ð 	×ÑÔ ÷		ð 		÷	/ð 	�‰Ð'ÀXˆÑNð	Ø�N‰NÐ3ÐQYˆNÑZð
 �{‰{× Ñ  %Ð'Ð'øô	 ó 	ä�D—K‘K×%Ñ%Ô&Øð	ús   µA Á+Bc               óV  ^ ^^^^• T R                  5         [        R                  " 5       R                   S[        R
                  " 5        3mT R                  m[        [        T R                  R                  5      T-  5      mSUUUU U4S jjnT R                  XBUS9  Tb  TS4$ TS4$ )NÚ.c                 ór  >• TR                   R                     [        TR                  R                  TR
                  [        R                  " 5       S9  [        TR                  R                  5      (       a
   S S S 5        gT b  [        TTT S9  O[        TT5         S S S 5        g! , (       d  f       g = f)NrÌ   Fr›   T)	ru   r   rÎ   rr   r   rP   r³   rÏ   rÐ   )rœ   Úfull_reader_pathÚreader_namer|   r1   s   €€€€€r'   Útry_claim_readerÚ@SoftReadWriteLock._acquire_reader_slot.<locals>.try_claim_reader  s„   ø€ Ø—‘×"Ó"Ü# D§K¡K×$5Ñ$5Àt×G[ÑG[Ôae×ajÒajÓalÒmÜ §¡× 1Ñ 1×2Ñ2Ø ÷ #Ð"ð Ñ%Ü)¨+°uÀVÓLä)Ð*:¸EÔBØ÷ #×"Ö"ús   ˜A"B(ÂB(Â(
B6r©   TrÛ   )rÜ   ÚuuidÚuuid4Úhexrp   Úgetpidrv   r   r   rr   r   rÝ   )r|   r1   rª   rM   rä   rœ   râ   rã   s   ``   @@@r'   r¹   Ú&SoftReadWriteLock._acquire_reader_slot  s–   ü€ ð 	×ÑÔ ÜŸš›×)Ñ)Ð*¨!¬B¯IªI«K¨=Ð9ˆØ×%Ñ%ˆÜœt D§K¡K×$7Ñ$7Ó8¸;ÑFÓGÐ÷		ó 		ð 	�‰Ð'ÀXˆÑNØ%Ñ1�È$ÐNÐNÐ7GÈ$ÐNÐNr&   c               ó8  •  U" 5       (       a  g [         R                  " 5       nU(       d  [        U R                  5      eUb  XB:¼  a  [        U R                  5      eU R                  nUb  [        U[        X$-
  S5      5      n[         R                  " U5        Mš  )Ng        )r³   r´   r   rZ   rQ   ÚminÚmaxÚsleep)r|   Ú	predicaterª   rM   rÍ   Ú	sleep_fors         r'   rÝ   ÚSoftReadWriteLock._wait_for,  s�   € ð Ù�{‰{ØÜ×#Ò#Ó%ˆCÞÜ˜dŸn™nÓ-Ð-ØÑ#¨«Ü˜dŸn™nÓ-Ð-Ø×*Ñ*ˆIØÑ#Ü 	¬3¨x©~¸sÓ+CÓD�	Ü�JŠJ�yÔ!ñ r&   c                óÊ  • [        U R                  R                  5      n[        [        5         UR                  SS9  S S S 5        [        R                  " U R                  R                  5      n[        R                  " UR                  5      (       d%  [        R                  " UR                  5      (       d$  U R                  R                   S3n[        U5      eU R                  cf  [        (       aZ  [        R                  [!        [        SS5      -  ["        -  n[        R$                  " U R                  R                  U5      U l        g g g ! , (       d  f       GN= f)NiÀ  )r:   zB exists but is not a directory or is a symlink; refusing to use itÚO_DIRECTORYr   )r   rr   r   r   rÑ   Úmkdirrp   ÚlstatÚstatÚS_ISLNKÚst_modeÚS_ISDIRrž   rv   Ú_SUPPORTS_DIR_FDÚO_RDONLYÚgetattrÚ_O_NOFOLLOWÚopen)r|   Úreaders_pathÚstr]   Úflagss        r'   rÜ   Ú#SoftReadWriteLock._open_readers_dir@  sò   € Ü˜DŸK™K×/Ñ/Ó0ˆÜ”oÕ&Ø×Ñ EÐÑ*÷ 'ô �XŠX�d—k‘k×)Ñ)Ó*ˆÜ�<Š<˜Ÿ
™
×#Ñ#¬4¯<ª<¸¿
¹
×+CÑ+CØ—[‘[×(Ñ(Ð)Ð)kÐlˆCÜ˜sÓ#Ð#Ø×ÑÑ'×,<Ò,<Ü—K‘K¤'¬"¨m¸QÓ"?Ñ?Ä+ÑMˆEÜ#%§7¢7¨4¯;©;×+>Ñ+>ÀÓ#FˆDÕ ð -=Ð'÷ 'Ö&ús   ¯EÅ
E"c                ó2   • U R                  5        H  n  g   g)NTF)Ú_iter_reader_entries)r|   Ú_s     r'   rØ   ÚSoftReadWriteLock._any_readersN  s   € Ø×*Ñ*Ö,ˆAÙñ -àr&   c              #  ó$  #   • U R                   b_  [        R                  " U R                   5       nU H/  n[        UR                  5      (       a  M  UR                  S4v •  M1     SSS5        g[        U R                  R                  5      n[        R                  " U5       nU H:  n[        UR                  5      (       a  M  [        X2R                  -  5      S4v •  M<     SSS5        g! , (       d  f       g= f! , (       d  f       g= f7f)a  
Yield ``(name, dirfd_relative)`` pairs for every live reader marker.

``dirfd_relative`` is ``True`` when *name* should be passed to ``dir_fd=``-aware syscalls; ``False``
when *name* is a full path because dirfd-relative I/O is unavailable on this platform.
NTF)	rv   rp   ÚscandirÚ_is_housekeeping_namer¯   r   rr   r   r   )r|   ÚitÚentryrÿ   s       r'   r  Ú&SoftReadWriteLock._iter_reader_entriesS  sÇ   é € ð ×ÑÑ+Ü—’˜D×0Ñ0Ô1°RÛ�EÜ0°·±×<Ó<Ø#Ÿj™j¨$Ð.Ô.ñ  ÷ 2ð Ü˜DŸK™K×/Ñ/Ó0ˆÜ�ZŠZ˜Ô%¨Û�Ü,¨U¯Z©Z×8Ó8Ü˜l¯Z©ZÑ7Ó8¸%Ð?Ô?ñ ÷ &Ð%÷ 2Ô1ð úç%Õ%üs@   ‚.D°C.ÁC.Á&>DÂ$C?ÃC?Ã%	DÃ.
C<Ã8DÃ?
DÄ	Dc                óä   • / n U R                  5        H*  u  p4UR                  X4(       a  U R                  OS 45        M,     U H  u  p5[	        X0R
                  XS9  M     g ! [         a     g f = f)N)rP   rÍ   rœ   )r  Úappendrv   r”   rÎ   rP   )r|   rÍ   Únamesr¯   Údirfd_relativeÚfds         r'   r×   Ú&SoftReadWriteLock._break_stale_readersf  sr   € Ø.0ˆð	Ø(,×(AÑ(AÖ(CÑ$�Ø—‘˜d½N D×$8Ò$8ÐPTÐUÖVñ )Dó ‰HˆDÜ ×6JÑ6JÐPSÔ_ò øô ó 	Ùð	ús   „>A" Á"
A/Á.A/c                ó°  • U R                   R                     U R                  nUc
   S S S 5        gUR                  nUR                  nUR
                  (       a  U R                  OS nS S S 5        [        WWS9nUc  gUu  pgUb&  [        R                  " UR                  W5      (       d  g [        X$S9  g! , (       d  f       NU= f! [         a     gf = f)NFr›   T)ru   r,   rw   r=   r1   r?   rv   Ú_read_markerÚhmacÚcompare_digestrÖ   ÚFileNotFoundError)r|   r¢   r=   r1   rœ   Úread_resultÚinfoÚ_mtimes           r'   r»   Ú!SoftReadWriteLock._refresh_markerp  sÂ   € Ø�[‰[×!Ó!Ø—:‘:ˆDØ‰|Ø÷ "Ð!ð ×*Ñ*ˆKØ—J‘JˆEØ-1¯^¯^�T×)Ò)ÀˆF÷ "ô # ;°vÑ>ˆØÑØØ"‰ˆð ‰<œt×2Ò2°4·:±:¸u×EÑEØð	Ü�;Ò.ð ÷) "Õ!ûô$ !ó 	Ùð	ús"   —B7±7B7Â-	C Â7
CÃ
CÃCc           	     óÒ   • [        [        R                  " 5       [        R                  " 5       [        U R                  R
                  SS9S9U l        S U l        S U l        SU l	        g )Nra   rn   ro   T)
r)   rs   rt   r   rr   r   ru   rw   rv   rx   r–   s    r'   Ú_reset_after_fork_in_childÚ,SoftReadWriteLock._reset_after_fork_in_child‡  sQ   € ô Ü—^’^Ó%Ü!ŸšÓ(Ü˜tŸ{™{×0Ñ0¸"Ñ=ñ
ˆŒð
 ˆŒ
Ø#ˆÔØ!%ˆÕr&   )ry   rx   rw   ru   rr   rv   rM   rO   rZ   rQ   rP   rW   r`   )rZ   rb   rW   rc   rM   r>   rN   r>   rO   rc   rP   rd   rQ   rc   re   ÚNonerÕ   )rW   rd   rM   úbool | Nonere   zGenerator[None])rW   rd   rM   r   re   r   ©re   r  )r“   r>   re   r  )rZ   rb   rW   rc   rM   r>   re   rf   )r:   r9   rW   rd   rM   r   re   r   )r:   r9   re   r   )r1   r   rª   rd   rM   r>   re   ztuple[str, bool])rï   úCallable[[], bool]rª   rd   rM   r>   re   r  rÛ   )re   zGenerator[tuple[str, bool]])rÍ   rc   re   r  )!r    r!   r"   r#   rD   r
   rH   r$   rs   rt   rI   r}   r   r„   r‰   r�   rˆ   r•   r‚   Úclassmethodr¥   r�   r²   r¸   r¹   rÝ   rÜ   rØ   r  r×   r»   r  r%   r   r&   r'   rf   rf   �   s.  ‡ ñ,ñ\ @SÓ?T€JÐ<ÓTØ—n’nÓ&€Oð
 ð0ð
 Ø!Ø$(Ø(,Ø#ñ0à)ð0ð ð0ð
 ð0ð ð0ð "ð0ð &ð0ð ð0ð 
ö0ðd ðÐQU÷ ó ðð& ðÐRV÷ ó ðð&AÐTX÷ Að Að.BÐUY÷ Bð Bô6,ð" (-÷ (&ðT ð ð:ð
 ñ:à)ð:ð ð:ð
 ð:ð 
õ:ó ð:ð*D.àðD.ð ðD.ð
 ðD.ð 
ôD.ôL-ð(&(àð&(ð ð	&(ð
 ð&(ð 
ô&(ðPOàðOð ð	Oð
 ðOð 
ôOð4"à%ð"ð ð	"ð
 ð"ð 
ô"ô(Gôô
@ô&`ô÷.&r&   rf   )Ú	metaclassc                  óJ   ^ • \ rS rSr          SU 4S jjrSS jrSrU =r$ )r@   i•  c                óF   >• [         TU ]  USS9  Xl        X l        X0l        g )NT)r¯   Údaemon)rS   r}   Ú_refreshÚ	_intervalÚ_stop_event)r|   r¬   r­   r®   r¯   r^   s        €r'   r}   Ú_HeartbeatThread.__init__–  s'   ø€ ô 	‰Ñ˜d¨4ÐÑ0ØŒØ!ŒØ%Õr&   c                ó  • U R                   R                  U R                  5      (       d]  U R                  5       (       d  U R                   R	                  5         g U R                   R                  U R                  5      (       d  M\  g g rÕ   )r*  Úwaitr)  r(  rŸ   r–   s    r'   ÚrunÚ_HeartbeatThread.run¢  sZ   € Ø×"Ñ"×'Ñ'¨¯©×7Ñ7Ø—=‘=—?‘?Ø× Ñ ×$Ñ$Ô&Øð ×"Ñ"×'Ñ'¨¯©×7Õ7r&   )r)  r(  r*  )
r¬   r"  r­   rc   r®   rB   r¯   r   re   r  r!  )r    r!   r"   r#   r}   r.  r%   rg   rh   s   @r'   r@   r@   •  sB   ø† ð
&à#ð
&ð ð
&ð $ð	
&ð
 ð
&ð 
÷
&÷ò r&   r@   r›   c               óþ  • [         R                  [         R                  -  [         R                  -  [        -  n[
        (       a  Ub  [         R                  " XSUS9nO[         R                  " XS5      n U S[         R                  " 5        S[        R                  " 5        S3R                  S5      n[         R                  " XE5        [         R                  " U5        g ! [         R                  " U5        f = f)Ni€  r›   Ú
Úascii)rp   ÚO_CREATÚO_EXCLÚO_WRONLYrý   rú   rþ   ré   ÚsocketÚgethostnameÚencoder   r•   )r¯   r1   rœ   r  r  Úcontents         r'   rÐ   rÐ   ©  s¬   € ô �J‰JœŸ™Ñ"¤R§[¡[Ñ0´;Ñ>€EßÒ˜FÑ.Ü�WŠW�T %°Ñ7‰ä�WŠW�T %Ó(ˆðØ�G˜2œbŸiši›k˜]¨"¬V×-?Ò-?Ó-AÐ,BÀ"ÐE×LÑLÈWÓUˆÜ
�Š�Ôä
�Š��øŒ�Š��ús   Á7AC$ Ã$C<c               ó  • [         R                  [        -  n [        (       a  Ub  [         R                  " XUS9O[         R                  " X5      n  [         R                  " U5      n[         R                  " U[        S-   5      n [         R                  " U5        [        U5      UR                  4$ ! [
         a     g f = f! [
         a     [         R                  " U5        g f = f! [         R                  " U5        f = f)Nr›   rš   )rp   rû   rý   rú   rþ   r”   Úfstatr   Ú_MAX_MARKER_SIZEr•   Ú_parse_marker_bytesÚst_mtime)r¯   rœ   r  r  r   Údatas         r'   r  r  ¸  sÎ   € ô �K‰Kœ+Ñ%€Eðß4DÒ4DÈÑI[ŒR�WŠW�T¨Ò0Ôac×ahÒahÐimÓauˆðð	Ü—’˜"“ˆBÜ—7’7˜2Ô/°!Ñ3Ó4‰Dô 	�Š�ŒÜ˜tÓ$ b§k¡kÐ1Ð1øô ó Ùðûô ó 	Øä
�Š��ð	ûô 	�Š��ús5   ™9B6 Á4C Â6
CÃCÃ
C)ÃC, Ã(C)Ã)C, Ã,Dc                ó  • U (       a  [        U 5      [        :”  a  g  U R                  S5      n[        R
                  " SU[        R                  5      nUc  g [        US   S5      nUS:”  a  g [        US   X2S   S9$ ! [         a     g f = f)	Nr2  uå  
        \A                                  # start of string
        (?P<token>    [0-9a-f]{32}     ) \n # 128-bit hex token
        (?P<pid>      [1-9][0-9]{0,9}  ) \n # decimal pid: no leading zero, â‰¤ 10 digits
        (?P<hostname> [\x21-\x7e]{1,253})   # printable non-whitespace ASCII (RFC 1123 hostname limit)
        \n*                                 # tolerate sloppy writers that append extra newlines
        \Z                                  # end of string
        r3   é
   iÿÿÿr1   r4   )r1   r3   r4   )	Úlenr<  ÚdecodeÚUnicodeDecodeErrorÚreÚmatchÚVERBOSEr2   r/   )r?  ÚtextrF  r3   s       r'   r=  r=  Ë  s˜   € ö ”3�t“9Ô/Ó/ØðØ�{‰{˜7Ó#ˆô �HŠHð	ð 	Ü
�
‰
ó€Eð �}ØÜ
ˆe�E‰l˜BÓ
€CØ
ˆYƒØÜ˜U 7™^°ÀZÑ?PÑQÐQøô' ó Ùðús   �A> Á>
BÂ
Bc               ó  • [        XS9nUc  gUu  pVX&-
  U::  a  gUc
  [        XS9  gU  [         S[        R                  " 5        S[
        R                  " S5       3n [        (       a  Ub  [        R                  " XX3S9  O[        U 5      R                  U5         [        XsS9nUc  gUu  pšU	c
  [        XsS9  g[        R                  " UR                  U	R                  5      (       d  gX¦:”  a  g[        XsS9  g! [         a     gf = f)Nr›   FTrà   r¨   )Ú
src_dir_fdÚ
dst_dir_fd)r  r¡   Ú_BREAK_SUFFIXrp   ré   r¶   r·   rú   Úrenamer   r”   r  r  r1   )r¯   rP   rÍ   rœ   r  Úinfo_beforeÚmtime_beforeÚ
break_nameÚ
read_afterÚ
info_afterÚmtime_afters              r'   rÎ   rÎ   é  s  € ô ˜tÑ3€KØÑØØ +Ñ€KØ
Ñ˜_Ó,ØØÑÜ�Ò$Øà�6œ-˜¨¬"¯)ª)«+¨°a¼×8IÒ8IÈ"Ó8MÐ7NÐO€JðßÒ Ñ 2Ü�IŠI�d°6ÓMä�‹J×Ñ˜jÕ)ô ˜jÑ8€JØÑØØ(Ñ€JØÑÜ�
Ò*ØÜ×Ò˜{×0Ñ0°*×2BÑ2B×CÑCØØÓ!ØÜˆJÒ&Øøô ó Ùðús   Á #C> ÂC> Ã>
DÄ
Dc               óÎ   • [        [        5         [        (       a  Ub  [        R                  " XS9  O[        U 5      R	                  5         S S S 5        g ! , (       d  f       g = f©Nr›   )r   r  rú   rp   Úunlinkr   ©r¯   rœ   s     r'   r¡   r¡     s>   € Ü	Ô#Õ	$ßÒ Ñ 2ä�IŠI�dÓ*ä�‹J×ÑÔ÷ 
%×	$Ö	$ús   �=AÁ
A$c               ó|   • [         (       a  Ub  [        R                  " U S US9  g [        R                  " U S 5        g rU  )rú   rp   ÚutimerW  s     r'   rÖ   rÖ     s+   € ßÒ˜FÑ.Ü
�Š��t FÓ+ä
�Š��tÕr&   c                ó�   •  [         R                  " U 5      n[        R                  " UR
                  5      $ ! [         a     gf = f)NF)rp   rõ   r  rö   ÚS_ISREGrø   )Úpathr   s     r'   rÏ   rÏ   &  s=   € ðÜ�XŠX�d‹^ˆô �<Š<˜Ÿ
™
Ó#Ð#øô ó Ùðús   ‚8 ¸
AÁAc                óD   • U R                  S5      =(       d	    [        U ;   $ )Nrà   )Ú
startswithrL  )r¯   s    r'   r	  r	  .  s   € Ø�?‰?˜3Ó×8¤=°DÑ#8Ð8r&   c                 ó–   • [         R                  " 5       q[        [        R                  5       5       H  n U R                  5         M     g rÕ   )rs   rt   rz   Úlistr   Úvaluesr  ©r\   s    r'   Ú_reset_all_after_forkrc  2  s5   € ô
 $Ÿ.š.Ó*ÐÜœ×.Ñ.Ó0Ö1ˆØ×+Ñ+Ö-ò 2r&   c                 ó¾   • [        [        R                  5       5       H*  n [        [        5         U R                  SS9  S S S 5        M,     g ! , (       d  f       M>  = f)NTr’   )r`  r   ra  r   Ú	Exceptionr‚   rb  s    r'   Ú_cleanup_all_instancesrf  <  sB   € Üœ×.Ñ.Ó0Ö1ˆÜ”iÕ Ø×Ñ 4ÐÑ(÷ !Ñ ò 2ß Ö ús   °AÁ
A	c                 óÊ   • [         (       d  [        R                  " [        5        Sq [        (       d1  [        [        S5      (       a  [        R                  " [        S9  Sqg g g )NTÚregister_at_fork)Úafter_in_child)	Ú_atexit_registeredÚatexitÚregisterrf  Ú_fork_registeredÚhasattrrp   rh  rc  r   r&   r'   r{   r{   B  sL   € çÒÜ�ŠÔ.Ô/Ø!ÐçÒ¤¬Ð,>× ?Ñ ?Ü
×ÒÔ+@ÒAØÑð !@Ðr&   )r¯   r   r1   r   rœ   r;   re   r  )r¯   r   rœ   r;   re   z'tuple[_MarkerInfo | None, float] | None)r?  Úbytesre   z_MarkerInfo | None)
r¯   r   rP   rc   rÍ   rc   rœ   r;   re   r>   )r¯   r   rœ   r;   re   r  )r\  r   re   r>   )r¯   r   re   r>   r!  )IrD   Ú
__future__r   rk  r  rp   rE  r¶   r6  rö   Úsysrs   r³   ræ   Ú
contextlibr   r   Údataclassesr   Úpathlibr   Útypingr   r	   Úweakrefr
   Úfilelock._apir   Úfilelock._errorr   Úfilelock._softr   Úfilelock._utilr   Úcollections.abcr   r   r9   rL  r<  rü   rý   Úplatformrþ   Úsupports_dir_fdrú   r   r$   rt   rz   rj  rm  r   r)   r/   r6   ÚtyperF   rf   ÚThreadr@   rÐ   r  r=  rÎ   r¡   rÖ   rÏ   r	  rc  rf  r{   Ú__all__r   r&   r'   Ú<module>r�     së  ðÚ `å "ã Û Û 	Û 	Û Û Û Û 
Û Û Û ß /Ý !Ý ß )Ý 'å ,Ý #Ý 'Ý 2æß3ð 	�Ñ €Ø€ØÐ Ù�b˜,¨Ó*€ð —<‘< 7Ñ*×L¨r¯w©w¸"×:LÑ:LÑ/LÐ á?RÓ?T€Ð<Ó TØ—n’nÓ&Ð ØÐ ØÐ ñ �$Ñ÷ð ó ðð ÷ð ó ðñ �$Ñ÷ð ó ðð ÷
$ð 
$ó ð
$ô.�$ô .ôbQ& +ò Q&ôh�y×'Ñ'ô ð( JN÷ ð 59÷ 2ô&RðF ñ*Ø
ð*ð ð*ð 
ð	*ð
 ð*ð 
õ*ðZ 04÷  ð /3÷ ô$ô9ô.ô)ô ð ð�r&   