ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ „ 	 ( %!1!%)+//.383,7(-.+



-%%-////---/-.+/--+------/------/--0+--/-/-----.-----ÿÀ  ¥2" ÿÄ               ÿÄ J  	     ! 1AQ"aq2‘#BR‚¡ÁÑ3br’¢±Âð$CSƒ²á4c“%DsÓñÿÄ              ÿÄ *        !1AQa‘"2q3±ð#b¡ÿÚ   ? ¼QxJQaÍuò¸Zö Úü8,ÐÚú
"SSn<rçù–´âE—^ªBÖ9À\†¸ÔÁT­ÃÛ5
ëd´³Í#Ý;Þ38œî ¶H£M:wÎ3…³…âpÔF&‚FK¸9„â4àGEõªfÿ ‘ñ(ßw­pŽF|È¥ù®häðÍÑ¶¹‘[ÒinÙW¶ùñY˜Q{›K"išÒ[Ú8žë\F¹@-?v"ÔU”,ìöžkÿ {I‡£šÍ?e
ríV
..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     o
    0ixm                     @   s(  d Z dZdZdZdZdZdZdZdZdd	l	Z	dd	l
Z
dd	lZdd	lZdd
lT g dZdd ZzddlmZmZmZ dd ZW n eyK   dd ZY nw dd Zdd Zdd Zdd Zdd Zejj e_ dd Zdd Zd d! Z d"d# Z!zdd$l"m#Z# W n ey   d	Z#Y nw d%d& Z$d'd( Z%d)Z&d	a'd	a(d*d+ Z)d,d- Z*d.d/ Z+zdd0l"m,Z, W n ey   e+Z-Y nw d1d2 Z-z
dd3l"m.Z.m/Z0 W n ey   d4d5d6d7Z1Y nw e2fd8d9Z3e2fd:d;Z4d4d5d<d7Z1e5e
d=oe
6 d> d?kZ7dEd@dAZ8dBdC Z9z	ddDl"m:Z; W d	S  ey   Y d	S w )FzCommon pathname manipulations, WindowsNT/95 version.

Instead of importing this module directly, import os and refer to this
module as os.path.
...\;/z.;C:\binZ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                 C   s   t | trdS dS )N   \/\/)
isinstancebytespath r5   -/opt/alt/python310/lib64/python3.10/ntpath.py_get_bothseps$   s   
r7   )LCMapStringExLOCALE_NAME_INVARIANTLCMAP_LOWERCASEc                 C   sd   t | } | s	| S t| tr(t }| |ddd} tt	t
| } | |dS tt	t
| ddS )nNormalize case of pathname.

        Makes all characters lowercase and all slashes into backslashes.
        surrogateescaper   r   )osfspathr1   r2   sysgetfilesystemencodingdecodereplace_LCMapStringEx_LOCALE_NAME_INVARIANT_LCMAP_LOWERCASEencode)sencodingr5   r5   r6   r   4   s   


r   c                 C   s@   t | } t| trt t | dd S | dd S )r;   r   r   )r=   r>   r1   r2   fsencodefsdecoderB   lowerrG   r5   r5   r6   r   G   s   

c                 C   sj   t | } t| tr| dddrdS n| dddr!dS t| d } t| d	ko4| d	 t| v S )
zTest whether a path is absolute   /   \   \\?\Tr   r   \\?\   r   )	r=   r>   r1   r2   rB   
startswithr   lenr7   rL   r5   r5   r6   r	   X   s   

r	   c           
   
   G   s@  t | } t| trd}d}d}nd}d}d}zs|s"| d d |  t| \}}tt j|D ]>}t|\}}	|	rG|	d |v rG|sB|sD|}|	}q.|r\||kr\| | krZ|}|	}q.|}|rh|d |vrh|| }||	 }q.|r|d |vr|r|dd  |kr|| | W S || W S  ttt	fy   t
jd	| g|R    w )
NrN   r/      :r   r0   :r   r
   )r=   r>   r1   r2   r   maprK   	TypeErrorAttributeErrorBytesWarninggenericpath_check_arg_types)
r4   pathsr!   sepscolonZresult_driveZresult_pathpZp_driveZp_pathr5   r5   r6   r
   h   sL   



r
   c                 C   s  t | } t| dkrt| trd}d}d}nd}d}d}| ||}|dd |d krq|dd	 |krq||d}|d
krG| dd | fS |||d }||d kr]| dd | fS |d
kret| }| d| | |d fS |dd |kr| dd | dd fS | dd | fS )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.

       rN   rM   rT   r   r   rU   r      rV   NrQ   )r=   r>   rS   r1   r2   rB   find)r`   r!   r$   r_   ZnormpindexZindex2r5   r5   r6   r      s.   

$r   c                 C   s   t | } t| }t| \}} t| }|r+| |d  |vr+|d8 }|r+| |d  |vs| d| | |d }}||p>|}|| |fS )z~Split a pathname.

    Return tuple (head, tail) where tail is everything after the final slash.
    Either part may be empty.rQ   N)r=   r>   r7   r   rS   rstrip)r`   r^   diheadtailr5   r5   r6   r      s   
r   c                 C   s4   t | } t| trt| dddS t| dddS )NrN   rM      .r   r   r   )r=   r>   r1   r2   r[   	_splitextr`   r5   r5   r6   r      s   

r   c                 C      t | d S )z)Returns the final component of a pathnamerQ   r   rl   r5   r5   r6   r         r   c                 C   rm   )z-Returns the directory component of a pathnamer   rn   rl   r5   r5   r6   r      ro   r   c              
   C   s6   zt | }W n tttfy   Y dS w t|jS )zhTest whether a path is a symbolic link.
    This will always return false for Windows prior to 6.0.
    F)r=   lstatOSError
ValueErrorrY   statS_ISLNKst_moder4   str5   r5   r6   r      s   r   c              	   C   s*   zt | }W dS  ttfy   Y dS w )zCTest whether a path exists.  Returns True for broken symbolic linksFT)r=   rp   rq   rr   rv   r5   r5   r6   r     s   r   )_getvolumepathnamec                 C   sp   t | } t| }t| } t| \}}|r"|d |v r"| p!||v S ||v r(dS tr6| |t| |kS dS )zaTest whether a path is a mount point (a drive root, the root of a
    share, or a mounted volume)r   TF)r=   r>   r7   r   r   rx   re   )r4   r^   rootrestr5   r5   r6   r   !  s   
r   c                 C   sJ  t | } t| trd}nd}| |s| S dt| }}||k r9| | t| vr9|d7 }||k r9| | t| vs)dt jv rDt jd }n"dt jvrK| S zt jd }W n ty]   d}Y nw t	|t jd }|dkr| d| }t|trzt 
|}t jd}||kr|t|kr| S t	t||}t| trt |}|| |d	  S )
zLExpand ~ and ~user constructs.

    If user or $HOME is unknown, do nothing.   ~~rQ   ZUSERPROFILEZHOMEPATHZ	HOMEDRIVE ZUSERNAMEN)r=   r>   r1   r2   rR   rS   r7   environKeyErrorr
   rJ   getr   r   rI   )r4   tilderg   nuserhomedriveZtarget_userZcurrent_userr5   r5   r6   r   <  s@   








r   z.'[^']*'?|%(%|[^%]*%?)|\$(\$|[-\w]+|\{[^}]*\}?)c                    s   t | } t| tr5d| vrd| vr| S ts$ddl}|t |j	j
at}dd ddtt ddn%d| vr?d	| vr?| S tsMddl}|t|j	j
at}d	d
 ddt j fdd}||| S )zfExpand shell variables of the forms $var, ${var} and %var%.

    Unknown variables are left unchanged.   $   %r   N   {   }environb$%{}c                    s   | j }|d u r| d S | | }|dkr)|kr|S |s"| d S |d d }n|kr/|S | rC|s=| d S |dd }zd u rTttjt| W S | W S  tye   | d  Y S w )Nr   rQ   rV   )	lastindexendswithrR   r=   rI   r~   rJ   r   )mr   nameZbraceZdollarr~   ZpercentZrbracer5   r6   repl  s.   



zexpandvars.<locals>.repl)r=   r>   r1   r2   _varsubbrecompile_varpatternrF   ASCIIsubgetattr_varsubr~   )r4   r   r   r   r5   r   r6   r   }  s4   


r   c           	      C   sN  t | } t| trd}d}d}d}d}n
d}d}d}d	}d
}| |r&| S | ||} t| \}} | |r@||7 }| |} | |}d}|t	|k r|| rW|| |kr[||= n6|| |kr|dkr{||d  |kr{||d |d = |d8 }n|dkr|
|r||= n	|d7 }n|d7 }|t	|k sM|s|s|| ||| S )z0Normalize path, eliminating double slashes, etc.rN   rM   rj      ..)s   \\.\rO   r   r   r   r   )z\\.\rP   r   rQ   )r=   r>   r1   r2   rR   rB   r   lstripr   rS   r   appendr
   )	r4   r!   r$   r   r    Zspecial_prefixesprefixcompsrg   r5   r5   r6   r     sH   








r   c                 C   s@   t | } t| st| trt  }nt  }t|| } t| S )zReturn 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.

    )	r=   r>   r	   r1   r2   getcwdbgetcwdr
   r   )r4   cwdr5   r5   r6   _abspath_fallback  s   



r   )_getfullpathnamec              	   C   s.   zt t| W S  ttfy   t|  Y S w )z&Return the absolute version of a path.)r   r   rq   rr   r   r3   r5   r5   r6   r     s
   r   )_getfinalpathnamereadlinkF)strictc                C   s   t | S N)r   )r4   r   r5   r5   r6   r'     s   r'   c              
   C   s   d}t  }t| |vrY|t|  z| }t| } t| s/t|s&|} W | S ttt|| } W n" |yI } z|j	|v rDW Y d }~| S  d }~w t
yR   Y | S w t| |vs| S )N)rQ   ra   rb             2   C   W   i&  i(  i)  )setr   add_nt_readlinkr	   r   r   r
   r   winerrorrr   )r4   ignored_errorallowed_winerrorseenZold_pathexr5   r5   r6   _readlink_deep  s4   	

r   c                 C   s   d}d}| rszt | } |rt| |W S | W S  |yp } zO|j|vr# zt| |d}|| kr>|r5t||n|W W  Y d }~S W n	 |yH   Y nw t| \} }| r]|s]| | W  Y d }~S |rdt||n|}W Y d }~nd }~ww | s|S )N)rQ   ra   rb   r   r   r   r   5   A   r   r   {      i  i  r}   r   )r   r
   r   r   r   )r4   r   r   ri   r   new_pathr   r5   r5   r6   _getfinalpathname_nonstrict@  s6   
 r   c             
   C   s  t | } t| tr!d}d}d}t }t| tttkr dS nd}d}d}t }t| ttkr5dS | 	|}|t
u rCt}d	}n|rHd
}nt}|sUt| sUt|| } zt| } d}W n |yx }	 z|	j}t| |d} W Y d }	~	nd }	~	ww |s| 	|r| 	|r|| t|d   }
n| t|d  }
zt|
| kr|
} W | S W | S  ty }	 z|	j|kr|
} W Y d }	~	| S W Y d }	~	| S d }	~	ww | S )NrO   s   \\?\UNC\s   \\s   \\.\NULrP   z\\?\UNC\z\\z\\.\NULTr5   r   r   )r   r1   r2   r=   r   r   rI   r&   r   rR   r.   FileNotFoundErrorrq   r	   r
   r   r   r   rS   )r4   r   r   Z
unc_prefixZnew_unc_prefixr   Z
had_prefixr   Zinitial_winerrorr   Zspathr5   r5   r6   r'   r  sj   





getwindowsversionrb   ra   c                 C   sX  t | } t| trd}d}d}nd}d}d}|du r|}| s#tdt |}zott|}tt| }t|\}}t|\}	}
t|t|	krQtd	|	|f d
d |	|D }dd |
	|D }d}t
||D ]\}}t|t|krz n|d7 }ql|gt||  ||d  }|s|W S t| W S  tttttfy   td| |  w )z#Return a relative version of a pathrN   rj   r   r   r   r   Nzno path specifiedz&path is on mount %r, start on mount %rc                 S      g | ]}|r|qS r5   r5   .0xr5   r5   r6   
<listcomp>      zrelpath.<locals>.<listcomp>c                 S   r   r5   r5   r   r5   r5   r6   r     r   r   rQ   r)   )r=   r>   r1   r2   rr   r   r   r   r   r   ziprS   r
   rX   rY   rZ   DeprecationWarningr[   r\   )r4   startr!   r   r    Z	start_absZpath_absZstart_driveZ
start_restZ
path_driveZ	path_rest
start_list	path_listrg   Ze1Ze2rel_listr5   r5   r6   r)     sJ   




r)   c              	      s  | st dtttj| } t| d trdd dndd dz fd	d
| D }fdd
|D }ztfdd|D \}W n t yP   t ddw ttdd |D dkrbt dt	| d 
 \}}|}fdd
|D }fdd
|D }t|}t|}t|D ]\}	}
|
||	 kr|d|	 } n	q|dt| }|r| n|}|| W S  ttfy   tjdg| R    w )zDGiven a sequence of path names, returns the longest common sub-path.z%commonpath() arg is an empty sequencer   rN   rM   rj   r   r   r   c                    s    g | ]}t |  qS r5   )r   rB   rK   )r   r`   )r$   r!   r5   r6   r     s     zcommonpath.<locals>.<listcomp>c                    s   g | ]	\}}|  qS r5   rn   r   rf   r`   r!   r5   r6   r     s    c                 3   s$    | ]\}}|d d  kV  qd S )NrQ   r5   r   r   r5   r6   	<genexpr>  s   " zcommonpath.<locals>.<genexpr>z%Can't mix absolute and relative pathsNc                 s   s    | ]\}}|V  qd S r   r5   r   r5   r5   r6   r     s    rQ   zPaths don't have the same drivec                       g | ]
}|r| kr|qS r5   r5   r   cr   r5   r6   r   
      c                    s   g | ]} fd d|D qS )c                    r   r5   r5   r   r   r5   r6   r     r   z)commonpath.<locals>.<listcomp>.<listcomp>r5   )r   rG   r   r5   r6   r     s    r-   )rr   tuplerW   r=   r>   r1   r2   r   rS   r   rB   r   minmax	enumerater
   rX   rY   r[   r\   )r]   Zdrivesplitssplit_pathsr	   r   r4   commons1s2rg   r   r   r5   )r$   r   r!   r6   r-     sL   

r-   )_isdirr   )<__doc__r   r    r%   r!   r"   r$   r#   r&   r=   r?   rs   r[   __all__r7   Z_winapir8   rC   r9   rD   r:   rE   r   ImportErrorr	   r
   r   r   r   rk   r   r   r   r   ntrx   r   r   r   r   r   r   r   r   r   r   r   r   r   r'   rq   r   r   hasattrr   r(   r)   r-   r   r   r5   r5   r5   r6   <module>   s   		
/8
=A2*2
<
84