§
    dŠtjt>  ã                  óN  — U d dl mZ d dlZd dlZd dlmZ d dlmZ d dlm	Z	m
Z
 ddlmZ ddlmZmZ ej        d	k    �rVd dlZd dlZd d
lmZ dZded<   dZded<   dZded<   eez  ez  Zded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZded<   dZ ded <   eez  e z  Z!ded!<   dZ"ded"<   dZ#ded#<   dZ$ded$<   d%Z%ded&<   d'Z&ded(<   d Z'ded)<   d*Z(ded+<   d,Z)ded-<   d.Z*ded/<    ej+        d0¦  «        Z,d1ed2<    ej+        d3d4¬5¦  «        Z-d1ed6<    G d7„ d8ej.        ¦  «        Z/ G d9„ d:ej.        ¦  «        Z0 G d;„ d<ej.        ¦  «        Z1 G d=„ d>ej.        ¦  «        Z2 G d?„ d@ej.        ¦  «        Z3ej4        e,j5        _6         ej7        ej8        ¦  «        ej9         ej7        e0¦  «         ej7        e1¦  «         ej7        ej:        ¦  «        ej;        ej;        ej;        ej;        ej<        ej;        ge,j5        _=        ej4        e,j>        _6        ej?         ej7        e/¦  «        ej<        ej<        ge,j>        _=        de,j@        _6         ej7        e/¦  «        ge,j@        _=        ej;        e,jA        _6        ej4        ge,jA        _=        ej8        ge-jB        _=        ejC        e-jB        _6        ej8         ej7        e3¦  «        ge-jD        _=        ejC        e-jD        _6        ej8        ej9        ej9        ej9        ej9         ej7        e2¦  «        ge-jE        _=        ejC        e-jE        _6        ej8        ej9        ej9        ej9         ej7        e2¦  «        ge-jF        _=        ejC        e-jF        _6        dSdE„ZGdTdG„ZH G dH„ dIe¦  «        ZIdUdN„ZJdVdQ„ZKn G dR„ dIe¦  «        ZIdIgZLdS )Wé    )ÚannotationsN)Úsuppress)ÚPath)ÚFinalÚcasté   )ÚBaseFileLock)Úensure_directory_existsÚraise_on_not_writable_fileÚwin32)Úwintypesl        z
Final[int]Ú_GENERIC_READi   @Ú_GENERIC_WRITEi   Ú_SYNCHRONIZEÚ_DESIRED_ACCESSé   Ú_FILE_SHARE_READ_WRITEÚ_FILE_OPEN_IFÚ_FILE_ATTRIBUTE_READONLYé€   Ú_FILE_ATTRIBUTE_NORMALi   Ú_FILE_ATTRIBUTE_REPARSE_POINTé    Ú_FILE_SYNCHRONOUS_IO_NONALERTé@   Ú_FILE_NON_DIRECTORY_FILEi    Ú_FILE_OPEN_REPARSE_POINTÚ_CREATE_OPTIONSÚ_OBJ_CASE_INSENSITIVEÚ_OWNER_WRITEÚ_LOCKFILE_FAIL_IMMEDIATELYé   Ú_LOCKFILE_EXCLUSIVE_LOCKé!   Ú_ERROR_LOCK_VIOLATIONÚ_STATUS_SUCCESSl   "    Ú_STATUS_ACCESS_DENIEDl   C    Ú_STATUS_SHARING_VIOLATIONl   V    Ú_STATUS_DELETE_PENDINGÚntdllzFinal[ctypes.WinDLL]Ú_ntdllÚkernel32T)Úuse_last_errorÚ	_kernel32c                  óB   — e Zd Zdej        fdej        fdej        ffZdS )Ú_UNICODE_STRINGÚLengthÚMaximumLengthÚBufferN)Ú__name__Ú
__module__Ú__qualname__r   ÚUSHORTÚLPWSTRÚ_fields_© ó    úO/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/filelock/_windows.pyr0   r0   8   s3   € € € € € à�x”Ð'Ø˜hœoÐ.Ø�x”Ð'ð
ˆˆˆr;   r0   c                  ó„   — e Zd Zdej        fdej        fd ej        e¦  «        fdej        fdej	        fdej	        ffZ
dS )Ú_OBJECT_ATTRIBUTESr1   ÚRootDirectoryÚ
ObjectNameÚ
AttributesÚSecurityDescriptorÚSecurityQualityOfServiceN)r4   r5   r6   r   ÚULONGÚHANDLEÚctypesÚPOINTERr0   Úc_void_pr9   r:   r;   r<   r>   r>   ?   s[   € € € € € à�x”~Ð&Ø˜hœoÐ.Ø˜>˜6œ>¨/Ñ:Ô:Ð;Ø˜8œ>Ð*Ø! 6¤?Ð3Ø'¨¬Ð9ð
ˆˆˆr;   r>   c                  ó2   — e Zd Zdej        fdej        ffZdS )Ú_IO_STATUS_BLOCKÚStatusÚInformationN)r4   r5   r6   rF   rH   r9   r:   r;   r<   rJ   rJ   I   s)   € € € € € à�v”Ð'Ø˜FœOÐ,ð
ˆˆˆr;   rJ   c                  ób   — e Zd Zdej        fdej        fdej        fdej        fdej        ffZdS )Ú_OVERLAPPEDÚInternalÚInternalHighÚOffsetÚ
OffsetHighÚhEventN)	r4   r5   r6   rF   rH   r   ÚDWORDrE   r9   r:   r;   r<   rN   rN   O   sG   € € € € € à˜œÐ)Ø˜Vœ_Ð-Ø�x”~Ð&Ø˜8œ>Ð*Ø�x”Ð'ð
ˆˆˆr;   rN   c                  ó²   — e Zd Zdej        fdej        fdej        fdej        fdej        fdej        fdej        fdej        fd	ej        fd
ej        ff
ZdS )Ú_BY_HANDLE_FILE_INFORMATIONÚdwFileAttributesÚftCreationTimeÚftLastAccessTimeÚftLastWriteTimeÚdwVolumeSerialNumberÚnFileSizeHighÚnFileSizeLowÚnNumberOfLinksÚnFileIndexHighÚnFileIndexLowN)r4   r5   r6   r   rT   ÚFILETIMEr9   r:   r;   r<   rV   rV   X   s|   € € € € € à ¤Ð0Ø˜xÔ0Ð1Ø Ô!2Ð3Ø Ô 1Ð2Ø# X¤^Ð4Ø˜hœnÐ-Ø˜Xœ^Ð,Ø˜xœ~Ð.Ø˜xœ~Ð.Ø˜hœnÐ-ð
ˆˆˆr;   rV   ÚfdÚintÚreturnÚboolc           
     ó.  — t          ¦   «         }t          t          z  }t                               t          j        | ¦  «        |dddt          j        |¦  «        ¦  «        rdS t          j	        ¦   «         }|t          k    rdS t          j        |¦  «        ‚)Nr   r   TF)rN   r#   r!   r.   Ú
LockFileExÚmsvcrtÚget_osfhandlerF   ÚbyrefÚget_last_errorr%   ÚWinError)rb   Ú
overlappedÚflagsÚerrs       r<   Ú_lock_fd_nonblockingrp   –   s‚   € õ !‘]”]ˆ
Ý(Õ+EÑEˆÝ×Ò¥Ô 4°RÑ 8Ô 8¸%ÀÀAÀqÍ&Ì,ÐWaÑJbÔJbÑcÔcð 	Ø�4ÝÔ#Ñ%Ô%ˆØÕ'Ò'Ð'Ø�5åŒo˜cÑ"Ô"Ð"r;   ÚNonec           	     óð   — t          ¦   «         }t                               t          j        | ¦  «        dddt          j        |¦  «        ¦  «        s%t          j        t          j        ¦   «         ¦  «        ‚d S )Nr   r   )	rN   r.   ÚUnlockFileExrh   ri   rF   rj   rl   rk   )rb   rm   s     r<   Ú
_unlock_fdrt   ¤   sb   € Ý ‘]”]ˆ
å×%Ò%¥fÔ&:¸2Ñ&>Ô&>ÀÀ1ÀaÍÌÐV`ÑIaÔIaÑbÔbð 	;Ý”/¥&Ô"7Ñ"9Ô"9Ñ:Ô:Ð:ð	;ð 	;r;   c                  ó"   — e Zd ZdZdd„Zdd„ZdS )ÚWindowsFileLockay  
        Uses ``LockFileEx`` to hard lock a byte range of the lock file on Windows systems.

        Lock file cleanup: Windows attempts to delete the lock file after release, but deletion is
        not guaranteed in multi-threaded scenarios where another thread holds an open handle. The lock
        file may persist on disk, which does not affect lock correctness.
        rd   rq   c                ór  — t          | j        ¦  «         t          | j        ¦  «         t          | j        |                      ¦   «         ¦  «        }|€d S 	 t          |¦  «        }|r|                      |¦  «         n## t          $ r t          j	        |¦  «         ‚ w xY w|st          j	        |¦  «         d S d S ©N)
r   Ú	lock_filer
   Ú_open_non_reparse_fdÚ
_open_moderp   Ú_mark_descriptor_ownedÚBaseExceptionÚosÚclose)Úselfrb   Úlockeds      r<   Ú_acquirezWindowsFileLock._acquire³   sÈ   € Ý& t¤~Ñ6Ô6Ð6Ý# D¤NÑ3Ô3Ð3õ & d¤n°d·o²oÑ6GÔ6GÑHÔHˆBØˆzØ�ðÝ-¨bÑ1Ô1�Øð 4Ø×/Ò/°Ñ3Ô3Ð3øøÝ ð ð ð Ý”˜‘”�Øðøøøð ð Ý”˜‘”���ðð s   Á&A< Á< Bc                óf  — t          d| j        j        ¦  «        }t          |¦  «         |                      ¦   «          |                      |d¬¦  «         | j        sUt          t          ¦  «        5  t          | j
        ¦  «                             ¦   «          d d d ¦  «         d S # 1 swxY w Y   d S d S )Nrc   F)Údefault_suppresses)r   Ú_contextÚlock_file_fdrt   Ú_mark_descriptor_releasedÚ_close_released_fdÚ_preserve_lock_filer   ÚOSErrorr   ry   Úunlink)r€   rb   s     r<   Ú_releasezWindowsFileLock._releaseÆ   sñ   € Ý�e˜Tœ]Ô7Ñ8Ô8ˆBõ �r‰NŒNˆNØ×*Ò*Ñ,Ô,Ð,Ø×#Ò# B¸5Ð#ÑAÔAÐAØÔ+ð 2Ý�gÑ&Ô&ð 2ð 2Ý˜œÑ(Ô(×/Ò/Ñ1Ô1Ð1ð2ð 2ð 2ñ 2ô 2ð 2ð 2ð 2ð 2ð 2ð 2ð 2øøøð 2ð 2ð 2ð 2ð 2ð 2ð2ð 2s   Á0'B$Â$B(Â+B(N©rd   rq   ©r4   r5   r6   Ú__doc__r‚   rŒ   r:   r;   r<   rv   rv   ª   sF   € € € € € ð	ð 	ð	ð 	ð 	ð 	ð&
	2ð 
	2ð 
	2ð 
	2ð 
	2ð 
	2r;   rv   ÚpathÚstrÚmodeú
int | Nonec                ó�  — t          j        d| dt          j        t          j        z  ¦  «         t          | |t          z   ¬¦  «        \  }}|t          k    rb|t          t          hv rdS t                               |¦  «        }t          dt          j        |¦  «                             ¦   «         | |¦  «        ‚t!          ¦   «         }t"                               |t          j        |¦  «        ¦  «        sAt          j        ¦   «         }t"                               |¦  «         t          j        |¦  «        ‚|j        t0          z  r.t"                               |¦  «         d| › �}t          |¦  «        ‚	 t3          j        |t          j        t          j        z  ¦  «        S # t8          $ r t"                               |¦  «         ‚ w xY w)a  
        Open *path* for locking while refusing reparse points, bound to the handle actually locked.

        The file is opened through ``NtCreateFile`` with ``FILE_OPEN_REPARSE_POINT`` so a symlink or junction planted
        at the path is not followed, and the reparse decision is read from *that* handle via
        ``GetFileInformationByHandle`` rather than from a prior pathname query. Reading the held handle closes the
        check-then-open race: an attacker cannot swap the path between validation and use because both act on the same
        handle. Share mode omits delete so a peer cannot unlink or rename the file out from under a live holder,
        matching ``os.open``'s ``_SH_DENYNO``.

        ``NtCreateFile`` is used instead of ``CreateFileW`` because its return value carries the raw ``NTSTATUS``.
        Windows collapses a transient delete-pending name and a permanent access denial into the same Win32
        ``ERROR_ACCESS_DENIED``; the status keeps them apart, so a real denial fails fast instead of spinning until the
        caller's timeout (#604).

        The reparse option only guards the final path component; Windows still follows reparse points in intermediate
        directories. This assumes the lock file sits in a lock directory untrusted users cannot modify. A path with
        attacker-controlled parent directories would need component-by-component handle validation.

        :param path: the lock file path.
        :param mode: the permission mode; as ``os.open`` does on Windows, a cleared owner-write bit creates the file
            read-only. The attribute only takes effect when the file is created, not when an existing one is opened.

        :returns: a file descriptor owning the opened handle, or ``None`` on a sharing violation or a delete-pending
            name the caller should treat as contention and retry.

        :raises OSError: if the path resolves to a reparse point, or the open fails for any other reason, raised with
            the Win32 error the status maps to.

        ÚopenN)Ú	read_onlyz1Lock file is a reparse point (symlink/junction): )ÚsysÚauditr~   ÚO_RDWRÚO_CREATÚ_nt_openr    r&   r(   r)   r+   ÚRtlNtStatusToDosErrorrŠ   rF   ÚFormatErrorÚstriprV   r.   ÚGetFileInformationByHandlerj   rk   ÚCloseHandlerl   rW   r   rh   Úopen_osfhandleÚO_NOINHERITr}   )r�   r’   ÚhandleÚstatusÚwinerrorÚinforo   Úmsgs           r<   rz   rz   Ò   s’  € õ@ 	Œ	�&˜$ ¥b¤iµ"´*Ñ&<Ñ=Ô=Ð=Ý! $°d½\Ñ6IÐ2IÐJÑJÔJ‰ˆ�Ø•_Ò$Ð$ØÕ3Õ5KÐLÐLÐLØ�tÝ×3Ò3°FÑ;Ô;ˆHÝ˜$¥Ô 2°8Ñ <Ô <× BÒ BÑ DÔ DÀdÈHÑUÔUÐUå*Ñ,Ô,ˆå×3Ò3°F½F¼LÈÑ<NÔ<NÑOÔOð 	'ÝÔ'Ñ)Ô)ˆCÝ×!Ò! &Ñ)Ô)Ð)Ý”/ #Ñ&Ô&Ð&ØÔ Õ#@Ñ@ð 	Ý×!Ò! &Ñ)Ô)Ð)ØLÀdÐLÐLˆCÝ˜#‘,”,Ðð	åÔ(¨µ´½R¼^Ñ1KÑLÔLÐLøÝð 	ð 	ð 	Ý×!Ò! &Ñ)Ô)Ð)Øð	øøøs   Å3+F Æ&Gr–   útuple[int, int]c               ót  — t          ¦   «         }t                               | t          j        |¦  «        dd¦  «        dz  }|t
          k    rd|fS 	 t          ¦   «         }t          j        t          ¦  «        |_        t          j	        |¦  «        |_
        t          |_        t          j        ¦   «         }t          ¦   «         }t                               t          j        |¦  «        t"          t          j        |¦  «        t          j        |¦  «        d|rt$          nt&          t(          t*          t,          dd¦  «        dz  }t                               t          j        |¦  «        ¦  «         n1# t                               t          j        |¦  «        ¦  «         w xY w|t
          k    rd|fS |j        pd|fS )a›  
        Open *path* through ``NtCreateFile`` and return ``(handle, status)``.

        ``RtlDosPathNameToNtPathName_U_WithStatus`` translates the Win32 path to the NT namespace, handling relative,
        drive, UNC and extended-length path forms as Win32 itself would, and allocates a buffer that
        ``RtlFreeUnicodeString`` releases. The handle is ``0`` unless the status is ``STATUS_SUCCESS``.
        Nl   ÿÿ r   )r0   r+   Ú'RtlDosPathNameToNtPathName_U_WithStatusrF   rj   r&   r>   Úsizeofr1   Úpointerr@   r   rA   r   rE   rJ   ÚNtCreateFiler   r   r   r   r   r   ÚRtlFreeUnicodeStringÚvalue)r�   r–   Únt_namer¤   Ú
attributesr£   Ú	io_statuss          r<   r›   r›     s€  € õ "Ñ#Ô#ˆÝ×?Ò?ÀÅfÄlÐSZÑF[ÔF[Ð]aÐcgÑhÔhÐkuÑuˆØ•_Ò$Ð$Ø�f�9Ðð	?Ý+Ñ-Ô-ˆJÝ &¤Õ.@Ñ AÔ AˆJÔÝ$*¤N°7Ñ$;Ô$;ˆJÔ!Ý$9ˆJÔ!Ý”_Ñ&Ô&ˆFÝ(Ñ*Ô*ˆIå×#Ò#Ý”L Ñ(Ô(Ý#Ý”L Ñ,Ô,Ý”L Ñ+Ô+ØØ09ÐUÕ,Ð,Õ?UÝ*Ý!Ý#ØØñô ð ñð õ" ×'Ò'­¬°WÑ(=Ô(=Ñ>Ô>Ð>Ð>ø�F×'Ò'­¬°WÑ(=Ô(=Ñ>Ô>Ð>Ð>øøøØ•_Ò$Ð$Ø�f�9ÐØŒ|Ð ˜q &Ð(Ð(s   ÁC1E/ Å/.Fc                  ó"   — e Zd ZdZdd„Zdd„ZdS )rv   zRUses ``LockFileEx`` to hard lock a byte range of the lock file on Windows systems.rd   rq   c                ó   — t           ‚rx   ©ÚNotImplementedError©r€   s    r<   r‚   zWindowsFileLock._acquire:  ó   € Ý%Ð%r;   c                ó   — t           ‚rx   rµ   r·   s    r<   rŒ   zWindowsFileLock._release=  r¸   r;   Nr�   rŽ   r:   r;   r<   rv   rv   7  sB   € € € € € Ø`Ð`ð	&ð 	&ð 	&ð 	&ð	&ð 	&ð 	&ð 	&ð 	&ð 	&r;   )rb   rc   rd   re   )rb   rc   rd   rq   )r�   r‘   r’   rc   rd   r“   )r�   r‘   r–   re   rd   r¨   )MÚ
__future__r   r~   r—   Ú
contextlibr   Úpathlibr   Útypingr   r   Ú_apir	   Ú_utilr
   r   ÚplatformrF   rh   r   r   Ú__annotations__r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r#   r%   r&   r'   r(   r)   ÚWinDLLr+   r.   Ú	Structurer0   r>   rJ   rN   rV   ÚLONGr­   ÚrestyperG   rE   rT   Ú
c_longlongrD   rH   Úargtypesrª   ÚLPCWSTRr®   rœ   r    ÚBOOLrŸ   rg   rs   rp   rt   rv   rz   r›   Ú__all__r:   r;   r<   ú<module>rË      s  ðØ "Ð "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø 
€
€
€
Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ Fà„<�7ÒÑØ€M€M€MØ€M€M€MØÐÐÐÐÐà *€MÐ*Ð*Ð*Ñ*Ø!+€NÐ+Ð+Ð+Ñ+Ø)€LÐ)Ð)Ð)Ñ)Ø"/°.Ñ"@À<Ñ"O€OÐOÐOÐOÑOàð ð ð ð ñ ð !"€MÐ!Ð!Ð!Ñ!Ø+5ÐÐ5Ð5Ð5Ñ5Ø)3ÐÐ3Ð3Ð3Ñ3Ø0:Ð!Ð:Ð:Ð:Ñ:ð 1;Ð!Ð:Ð:Ð:Ñ:Ø+5ÐÐ5Ð5Ð5Ñ5Ø+5ÐÐ5Ð5Ð5Ñ5Ø"?ÐBZÑ"ZÐ]uÑ"u€OÐuÐuÐuÑuØ(2ÐÐ2Ð2Ð2Ñ2Ø$€LÐ$Ð$Ð$Ñ$ð .8ÐÐ7Ð7Ð7Ñ7Ø+5ÐÐ5Ð5Ð5Ñ5Ø(*ÐÐ*Ð*Ð*Ñ*ð
 #-€OÐ,Ð,Ð,Ñ,Ø(2ÐÐ2Ð2Ð2Ñ2Ø,6ÐÐ6Ð6Ð6Ñ6Ø)3ÐÐ3Ð3Ð3Ñ3à#0 6¤=°Ñ#9Ô#9€FÐ9Ð9Ð9Ñ9Ø&3 f¤m°JÈtÐ&TÑ&TÔ&T€IÐTÐTÐTÑTð
ð 
ð 
ð 
ð 
˜&Ô*ñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
˜VÔ-ñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
˜6Ô+ñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
�fÔ&ñ 
ô 
ð 
ð
ð 
ð 
ð 
ð 
 fÔ&6ñ 
ô 
ð 
ð #+¤-€FÔÔàˆŒ�x”Ñ'Ô'ØŒØˆŒÐ)Ñ*Ô*ØˆŒÐ'Ñ(Ô(ØˆŒ�vÔ(Ñ)Ô)ØŒØŒØŒØŒØŒØŒð$€FÔÔ ð >F¼]€FÔ2Ô:àÔØˆŒ�Ñ'Ô'ØŒØŒð	?€FÔ2Ô;ð +/€FÔÔ'Ø,:¨F¬N¸?Ñ,KÔ,KÐ+L€FÔÔ(Ø+3¬>€FÔ Ô(Ø-5¬]¨O€FÔ Ô)à&.¤oÐ%6€IÔÔ"Ø$,¤M€IÔÔ!Ø5=´_ÀnÀfÄnÐUpÑFqÔFqÐ4r€IÔ(Ô1Ø3;´=€IÔ(Ô0àŒØŒØŒØŒØŒØˆŒ�{Ñ#Ô#ð%€IÔÔ!ð $,¤=€IÔÔ àŒØŒØŒØŒØˆŒ�{Ñ#Ô#ð'€IÔÔ#ð &.¤]€IÔÔ"ð#ð #ð #ð #ð;ð ;ð ;ð ;ð&2ð &2ð &2ð &2ð &2˜,ñ &2ô &2ð &2ðP8ð 8ð 8ð 8ðt')ð ')ð ')ð ')ð ')ðV&ð &ð &ð &ð &˜,ñ &ô &ð &ð ð€€€r;   