� !A?h�w��j�dZdZdZdZdZdZdZdZdZdd l Z dd l Z dd l Z dd l Z dd l Tgd �Z d �Z dd lmZmZmZd�Zn#e$rd�ZYnwxYwd�Zd�Zd�Zd�Zd�Ze jje_d�Zd�Zd�Z d�Z! ddl"m#Z#n #e$rd Z#YnwxYwd�Z$d�Z%d�Z& ddl"m'Z'd�Z(n#e$rd�Z(YnwxYwd �Z) dd!l"m*Z*d"�Z+n #e$re)Z+YnwxYw dd#l"m,Z,m-Z.e/fd$�Z0e/fd%�Z1d&d'�d(�Z2n#e$r d&d'�d)�Z2YnwxYwe3e d*��oe j4��d+d,kZ5d0d-�Z6d.�Z7 dd/l"m8Z9d S#e$rYd SwxYw)1z�Common pathname manipulations, WindowsNT/95 version. Instead of importing this module directly, import os and refer to this module as os.path. �.�..�\�;�/z.;C:\bin�nul�N)�*)'�normcase�isabs�join� splitdrive�split�splitext�basename�dirname� commonprefix�getsize�getmtime�getatime�getctime�islink�exists�lexists�isdir�isfile�ismount� expanduser� expandvars�normpath�abspath�curdir�pardir�sep�pathsep�defpath�altsep�extsep�devnull�realpath�supports_unicode_filenames�relpath�samefile� sameopenfile�samestat� commonpath� ALLOW_MISSINGc�4�t|t��rdSdS)N�\/�\/)� isinstance�bytes��paths �3/opt/alt/python-internal/lib64/python3.11/ntpath.py� _get_bothsepsr9$s���$������v��u�)� LCMapStringEx�LOCALE_NAME_INVARIANT�LCMAP_LOWERCASEc��tj|��}|s|St|t��rnt j��}|�|d���dd��}ttt|��}|� |d��Sttt|�dd����S)�nNormalize case of pathname. Makes all characters lowercase and all slashes into backslashes. �surrogateescaperr) �os�fspathr4r5�sys�getfilesystemencoding�decode�replace�_LCMapStringEx�_LOCALE_NAME_INVARIANT�_LCMAP_LOWERCASE�encode)�s�encodings r8r r 4s��� �I�a�L�L��� ��H� �a�� � � 8��0�2�2�H�����#4�5�5�=�=�c�4�H�H�A��5�/��4�4�A��8�8�H�&7�8�8� 8�!�"8�"2�"#�)�)�C��"6�"6�8�8� 8r:c�<�tj|��}t|t��rLtjtj|���dd�������S|�dd�����S)r?rr)rArBr4r5�fsencode�fsdecoderF�lower)rKs r8r r Gsx�� �I�a�L�L�� �a�� � � J��;�r�{�1�~�~�5�5�c�4�@�@�F�F�H�H�I�I� I��y�y��d�#�#�)�)�+�+�+r:c��tj|��}t|t��rd}d}d}nd}d}d}|dd��||��}|�|��s|�|d ��rd Sd S) zTest whether a path is absolute�\�/s:\rrz:\N��TF)rArBr4r5rF� startswith)rKr#r&� colon_seps r8r r Xs��� � �!� � �A��!�U��������� � ������ � �"�1�"�� � �f�c�"�"�A� �|�|�C����A�L�L��A�6�6���t� �5r:c��tj|��}t|t��rd}d}d}nd}d}d} |s |dd�|zt |��\}}t tj|��D]x}t |��\}} | r| d|vr |s|s|}| }�)|r7||kr1|���|���kr|}| }�`|}|r|d|vr||z}|| z}�y|r"|d|vr|r|dd�|kr||z|zS||zS#tttf$rtj d |g|�R��wxYw) NrRr2�:rr3�:r�����r ) rArBr4r5r �maprP� TypeError�AttributeError� BytesWarning� genericpath�_check_arg_types) r7�pathsr#�seps�colon� result_drive� result_path�p�p_drive�p_paths r8r r ls��� �9�T�?�?�D��$�������������������� � ��!��H�s�N�N�$.�t�$4�$4�!� �k��R�Y��&�&� /� /�A�(��m�m�O�G�V�� '�&��)�t�+�+��+�,�+�#*�L�$� ��� '�W� �4�4��=�=�?�?�l�&8�&8�&:�&:�:�:�#*�L�"(�K��&� �� 0�{�2��d�:�:�)�C�/� �%��.�K�K� � 4�K��N�$�6�6� �7�)�"�#�#�.�%�7�7��#�%� �3� 3��k�)�)�� �~�|� 4�����$�V�T�:�E�:�:�:�:� ����s�CD�D�,Ec�\�tj|��}t|��dkr�t|t��r d}d}d}d}nd}d}d}d }|�||��}|d d�|dzkr�|d d ����|krd nd}|�||��}|d kr ||d d �fS|�||dz��}|d kr ||d d �fS|d |�||d �fS|dd�|kr|d d�|dd �fS|d d �|fS)a�Split a pathname into drive/UNC sharepoint and relative path specifiers. Returns a 2-tuple (drive_or_unc, path); either part may be empty. If you assign result = splitdrive(p) It is always true that: result[0] + result[1] == p If the path contained a drive letter, drive_or_unc will contain everything up to and including the colon. e.g. splitdrive("c:/dir") returns ("c:", "/dir") If the path contained a UNC path, the drive_or_unc will contain the host name and share up to but not including the fourth directory separator character. e.g. splitdrive("//host/computer/dir") returns ("//host/computer", "/dir") Paths cannot contain both a drive letter and a UNC path. �rRrSrY�\\?\UNC\rrrZ�\\?\UNC\rN�r[rU)rArB�lenr4r5rF�upper�find) rgr#r&rd� unc_prefix�normp�start�index�index2s r8r r �sd��& � �!� � �A� �1�v�v��{�{� �a�� � � (��C��F��E�(�J�J��C��F��E�'�J�� � �&�#�&�&�� ��1��:��q�� � ��r��r����*�*�j�8�8�A�A�a�E��J�J�s�E�*�*�E���{�{��!�B�Q�B�%�x���Z�Z��U�Q�Y�/�/�F���|�|��!�B�Q�B�%�x���W�f�W�:�q����z�)� )� ��1��:�� � ��R�a�R�5�!�A�B�B�%�<� � �R�a�R�5�!�8�Or:c�4�tj|��}t|��}t|��\}}t |��}|r!||dz |vr|dz}|r ||dz |v�|d|�||d�}}|�|��p|}||z|fS)z~Split a pathname. Return tuple (head, tail) where tail is everything after the final slash. Either part may be empty.rUN)rArBr9r ro�rstrip)rgrc�d�i�head�tails r8rr�s��� � �!� � �A� �� � �D� �a�=�=�D�A�q� �A���A� ���!�A�#��d�"�"� �Q��� ���!�A�#��d�"�"��2�A�2���!�"�"��$�D� �;�;�t� � � $��D� �t�8�T�>�r:c��tj|��}t|t��rt j|ddd��St j|ddd��S)NrRrS�.rrr)rArBr4r5r`� _splitext�rgs r8rr�sO�� � �!� � �A��!�U���8��$�Q��t�T�:�:�:��$�Q��c�3�7�7�7r:c�,�t|��dS)z)Returns the final component of a pathnamerU�rr�s r8rr���� ��8�8�A�;�r:c�,�t|��dS)z-Returns the directory component of a pathnamerr�r�s r8rr�r�r:c�� tj|��}n#tttf$rYdSwxYwt j|j��S)zhTest whether a path is a symbolic link. This will always return false for Windows prior to 6.0. F)rA�lstat�OSError� ValueErrorr^�stat�S_ISLNK�st_mode�r7�sts r8rrsQ��� �X�d�^�^���� �Z�� 0�����u�u����� �<�� � #� #�#s ��2�2c�b� tj|��}n#ttf$rYdSwxYwdS)zCTest whether a path exists. Returns True for broken symbolic linksFT)rAr�r�r�r�s r8rr sB��� �X�d�^�^���� �Z� �����u�u����� �4s ��,�,)�_getvolumepathnamec��tj|��}t|��}t|��}t |��\}}|r|d|vr| p||vS|r||vrdSt ra|�|��}t |���|��}|���|���kSdS)zaTest whether a path is a mount point (a drive root, the root of a share, or a mounted volume)rTF)rArBr9r r r�rx�casefold)r7rc�root�rest�x�ys r8rr#s��� �9�T�?�?�D� �� � �D� �4�=�=�D��D�!�!�J�D�$� �,��Q��4�����+�d�d�l�+� ���� � ��t��� �K�K�� � �� �d� #� #� *� *�4� 0� 0���z�z�|�|�q�z�z�|�|�+�+��ur:c��tj|��}t|t��rd}nd}|�|��s|Sdt |��}}||kr9||t |��vr"|dz }||kr||t |��v�"dtjvrtjd}nVdtjvr|S tjd}n#t$rd}YnwxYwt|tjd��}|dkr�|d|�}t|t��rtj |��}tj� d��}||kr2|t|��kr|Stt|��|��}t|t��rtj|��}|||d �zS) zLExpand ~ and ~user constructs. If user or $HOME is unknown, do nothing.�~�~rU� USERPROFILE�HOMEPATH� HOMEDRIVE��USERNAMEN)rArBr4r5rVror9�environ�KeyErrorr rO�getrrrN)r7�tilderz�n�userhome�drive� target_user� current_users r8rr@s��� �9�T�?�?�D��$���������� �?�?�5� !� !��� � �c�$�i�i�q�A� �a�%�%�D��G�=��#6�#6�6�6� �Q��� �a�%�%�D��G�=��#6�#6�6�6��� �"�"��:�m�,��� �2�:� %� %�� � ��J�{�+�E�E��� � � ��E�E�E� ������r�z�*�5�6�6���A�v�v��1�Q�3�i� � �k�5� )� )� 3��+�k�2�2�K��z�~�~�j�1�1� � �,� &� &� �x��1�1�1�1�� ��G�H�-�-�{�;�;�H��$����)��;�x�(�(�� �d�1�2�2�h� �s�C� C*�)C*c��tj|��}t|t��rOd|vrd|vr|Sddl}t|j|jzdzd��}d}d}d}d }d}ttd d��}n6d |vrd |vr|Sddl}|j|jzdz}d }d }d}d}d }tj}|dd�} d} t|��} | | k�r || | dz�} | |kre|| dzd�}t|��} |� | ��} | | |d| dz�zz } �n�#t$r| | |zz } | dz } Y�n�wxYw| |kr�|| dz| dz�|kr | | z } | dz } �n`|| dzd�}t|��} |� |��} |d| �} |�7tj tjtj | ����}n|| }n#t$r || z|z}YnwxYw| |z } �n�#t$r| ||zz } | dz } Y�n�wxYw| |k�r�|| dz| dz�|kr | | z } | dz } �n}|| dz| dz�|kr�|| dzd�}t|��} |� |��} |d| �} |�7tj tjtj | ����}n|| }n#t$r||z| z|z}YnwxYw| |z } n�#t$r| ||z|zz } | dz } Yn�wxYw|dd�} | dz } || | dz�} | r!| |vr| | z } | dz } || | dz�} | r| |v� |�7tj tjtj | ����}n|| }n#t$r|| z}YnwxYw| |z } | r| dz} n| | z } | dz } | | k�� | S)zfExpand shell variables of the forms $var, ${var} and %var%. Unknown variables are left unchanged.�$�%rNz_-�ascii�'�{�}�environb�$�%�'�{�}rUrk)rArBr4r5�string� ascii_letters�digits�getattrr�rorur�rNrOr�)r7r��varchars�quote�percent�brace�rbrace�dollarr��resru�pathlen�c�var�values r8rr}s$�� �9�T�?�?�D��$����� �t� � ��D� 0� 0��K�� � � ���-�� �=��D�g�N�N�������������"�j�$�/�/��� �d�?�?�s�$����K�� � � ��'�&�-�7�$�>�������������*�� �r��r�(�C� �E��$�i�i�G� �'�/�/� ��u�Q�w�� �� ��:�:���� � � �#�D��$�i�i�G� $�� � �1� � ���q�4� ���� �+�+�+����� $� $� $��q�4�x����!� ���� $�����'�\�\��E�A�I�e�a�i�'�(�G�3�3��q����� ����E�!�G�H�H�~���d�)�)��!� �J�J�w�/�/�E� �v��v�,�C�8�"�?�$&�K�� �2�;�s�;K�;K�0L�$M�$M�E�E�$+�C�L�E���#�8�8�8� '�#� �� 7����8�����5�L�C�C��"�(�(�(��7�T�>�)�C�#�a�K�E�E�E�(�����&�[�[��E�A�I�e�a�i�'�(�F�2�2��q����� ����e�a�i��� �)�*�e�3�3��E�!�G�H�H�~���d�)�)��!� �J�J�v�.�.�E� �v��v�,�C�>�"�?�$&�K�� �2�;�s�;K�;K�0L�$M�$M�E�E�$+�C�L�E���#�>�>�>� &���� 4�v� =����>�����5�L�C�C��"�(�(�(��6�E�>�D�0�0�C�#�a�K�E�E�E�(�����2�A�2�h���� ����u�q�y��)���.�A��M�M��1�H�C��Q�J�E��U�5�1�9�_�-�A��.�A��M�M�)��� "� �B�J�r�{�3�7G�7G�,H� I� I��� '�� �����)�)�)�"�S�L�E�E�E�)�����u� �����Q�J�E�� �1�H�C� �� ��W �'�/�/�X �Jso�(D+�+E�E� H �,AG.�.H�H� H(�'H(�L�#AK%�%K=�<K=�L#�"L#�&AN(�(N:�9N:)�_path_normpathc���tj|��}t|t��r5tjt tj|������pdSt |��pdS)�0Normalize path, eliminating double slashes, etc.r~r)rArBr4r5rNr�rOr6s r8rrs\���y����� �d�E� "� "� J��;�~�b�k�$�.?�.?�@�@�A�A�I�T� I��d�#�#�*�s�*r:c���tj|��}t|t��r d}d}d}d}nd}d}d}d}|�||��}t |��\}}|�|��r||z }|�|��}|�|��}d }|t|��kr�||r |||kr||=n\|||krK|d kr ||d z |kr||d z |d z�=|d z}n*|d kr|� |��r||=n |d z }n|d z }|t|��k��|s|s|� |��||� |��zS) r�rRrSr~�..rrrrrrU) rArBr4r5rFr rV�lstriprro�endswith�appendr )r7r#r&r!r"�prefix�compsrzs r8rr�s����y����� �d�E� "� "� ��C��F��F��F�F��C��F��F��F��|�|�F�C�(�(��!�$�'�'� ��� �?�?�3� � � $� �c�M�F��;�;�s�#�#�D�� � �3���� ���#�e�*�*�n�n���8� �u�Q�x�6�1�1��!�H�H��q��V�#�#��q�5�5�U�1�Q�3�Z�6�1�1��a��c�!�A�#�g����F�A�A��!�V�V����� 4� 4�V��a�����F�A�A��Q����#�e�*�*�n�n�� !�e� !� �L�L�� � � ��������'�'r:c���tj|��}t|��sLt|t��rtj��}ntj��}t||��}t|��S)z�Return the absolute version of a path as a fallback function in case `nt._getfullpathname` is not available or raises OSError. See bpo-31047 for more. ) rArBr r4r5�getcwdb�getcwdr r)r7�cwds r8�_abspath_fallbackr�#sb�� �9�T�?�?�D� ��;�;�� �d�E� "� "� ��*�,�,�C�C��)�+�+�C��C����� �D�>�>�r:)�_getfullpathnamec�� tt|����S#ttf$rt |��cYSwxYw)z&Return the absolute version of a path.)r�rr�r�r�r6s r8r r ;sO�� +�#�H�T�N�N�3�3� 3����$� +� +� +�$�T�*�*� *� *� *� +���s�� A�A)�_getfinalpathname�readlinkc��d}t��}t|��|vr�|�t|���� |}t|��}t |��s�*>�!?�!?�?�?�$�}�@��F�'�J�#�N��)�+�+�C���~�~��'�!2�!2�2�2�#�|��_�_�V�,�,� � �]� "� "�-�M��F�F� � $��M�M�#�M�� #�%��+�+� #���T�?�?�D� L�$�T�*�*�D� � � ��� "� "� "� � 1��c�"�g�g�&�&�D�0��D�>�>�D�D�D�D�D�D������ L� L� L�!�{� �.�t�=J�L�L�L�D�D�D�D�D�D����� L����� !�d�o�o�f�5�5� !����z�*�*� +�&��c�*�o�o�.>�.>�)?�?����S��[�[�\�\�*�� !�$�U�+�+�t�3�3� �D���� � � ����������� !� !� !��;�"2�2�2� �D����������  !���� � sB�D � F�*.E�F�%F�F�)G?�? H2� H2� H-�-H2c� �t|��S�N)r )r7r�s r8r)r)Fs���t�}�}�r:�getwindowsversionrTrkc��tj|��}t|t��rd}d}d}nd}d}d}|�|}|st d���tj|��} t t |����}t t |����}t|��\}}t|��\} } t|��t| ��krt d | �d |�����d �|� |��D��} d �| � |��D��} d } t| | ��D],\}}t|��t|��krn| dz } �-|gt| ��| z z| | d�z}|s|St|�S#ttttt f$rt#jd||���wxYw)z#Return a relative version of a pathrRr~r�rrrNzno path specifiedzpath is on mount z, start on mount c��g|]}|�|��Sr�r���.0r�s r8� zrelpath.. s��<�<�<�A�!�<�a�<�<�. s��:�:�:�1��:�Q�:�:�:r:rrUr+)rArBr4r5r�r rr r r�zipror r]r^r_�DeprecationWarningr`ra)r7rtr#r!r"� start_abs�path_abs� start_drive� start_rest� path_drive� path_rest� start_list� path_listrz�e1�e2�rel_lists r8r+r+�s�� �9�T�?�?�D��$������������������ �}��� �.��,�-�-�-� �I�e� � �E���H�U�O�O�,�,� ��8�D�>�>�*�*��",�Y�"7�"7�� �Z� *�8� 4� 4�� �I� �K� � �H�Z�$8�$8� 8� 8��*�� � �K�K�)�*�*� *�=�<��!1�!1�#�!6�!6�<�<�<� �:�:� ���� 4� 4�:�:�:� � ���*�i�0�0� � �F�B����|�|�x��|�|�+�+��� ��F�A�A��8�s�:���q�0�1�I�a�b�b�M�A��� ��M��X���� �z�>�<�AS� T�����$�Y��e�<�<�<� ����s�!D2F�F�;Gc�� � ��|std���tttj|����}t |dt ��rd�d� d� nd�d� d� � �fd �|D��}�fd �|D��} t�fd �|D����\}n#t$rtd ��d �wxYwttd�|D������dkrtd���t|d� � �����\}}|� ���}� fd�|D��}� fd�|D��}t|��}t|��}t|��D]\} } | || kr |d | �}n�|d t|���}|r|�zn|} | ��|��zS#t t"f$rt%jdg|�R��wxYw)zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencerrRrSr~rrrc�z��g|]7}t|������������8Sr�)r rFrP)r�rgr&r#s ��r8rzcommonpath..9s;���Q�Q�Q�a�z�!�)�)�F�C�"8�"8�">�">�"@�"@�A�A�Q�Q�Qr:c�@��g|]\}}|������Sr�r��r�ryrgr#s �r8rzcommonpath..:s'���<�<�<���1�q�w�w�s�|�|�<�<�zcommonpath..=s3�����>�>�$�!�Q��2�A�2��#��>�>�>�>�>�>r:z%Can't mix absolute and relative pathsNc3� K�|] \}}|V�� dSr�r�)r�ryrgs r8rzcommonpath..Ds&����-�-���A�1�-�-�-�-�-�-r:rUzPaths don't have the same drivec�$��g|] }|�|�k� |�� Sr�r��r�r�r!s �r8rzcommonpath..Is#���9�9�9��q�9�Q�&�[�[�!�[�[�[r:c�,��g|]}�fd�|D����S)c�$��g|] }|�|�k� |�� Sr�r�rs �r8rz)commonpath...Ks#���:�:�:�a��:�a�6�k�k��k�k�kr:r�)r�rKr!s �r8rzcommonpath..Ks.���P�P�P�q�:�:�:�:�1�:�:�:�P�P�Pr:r/)r��tupler\rArBr4r5r�ror rFr�min�max� enumerater r]r^r`ra)rb� drivesplits� split_pathsr r�r7�common�s1�s2rzr�r�r&r!r#s @@@r8r/r/(sw����� �B��@�A�A�A� �#�b�i��'�'� (� (�E��%��(�E�"�"���������������!�Q�Q�Q�Q�Q�5�Q�Q�Q� �<�<�<�<� �<�<�<� � P��>�>�>�>�+�>�>�>�>�>�F�E�E��� P� P� P��D�E�E�4� O� P���� �s�-�-��-�-�-�-�-� .� .�!� 3� 3��>�?�?� ?� ��q��!1�!1�&�#�!>�!>�?�?� ��t����C����9�9�9�9�V�9�9�9��P�P�P�P�K�P�P�P� � �� � �� �� � ���b�M�M� &� &�D�A�q��B�q�E�z�z�����������H�S��W�W�H�%�F� %�0�����5�������(�(�(�(�� �~� &�����$�\�:�E�:�:�:�:� ����s%�%G�B!� G�!B<�r*s8���� �� �� �� �� �� �� �� �� � � � � � � � � � � � ��������� � � �����!,�-�-�-�-�-�-�-�-�-�-� 8�8�8�8��$� ,� ,� ,�,�,�,�,�,� ,����$���()�)�)�^.�.�.�l���.8�8�8� �(�0��� ������$�$�$����$�%�%�%�%�%�%�%�����������������:-�-�-�zj�j�j�`3+�!�!�!�!�!�!�Z+�+�+�+��W�((�((�((�'(�'(�'(�'(�'(�((����f���" +�#�#�#�#�#�#� +�+�+�+�� � � � ��G�G�G� ����g�>�>�>�>�>�>�>�>� ,3�(�(�(�(�T9@�0�0�0�0�d"'�D�D�D�D�D�D��C����!&������������R&�g�c�+>�?�?�>�3�c�3�5�5�a�8�A�=��+�+�+�+�p1�1�1�h � #�"�"�"�"�"�"�"��� � � ��D�D� ���si� =�A�A�8A?�?B �B �B � B+�*B+�2B<�<C�C� C#�# C1�0C1�!D)�)D2�1D2