<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
U
    .ec                     @   s  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlm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 d d	lmZ d d
lmZ d dlm Z  d dl!m"Z"m#Z#m$Z$m%Z% d dl&m'Z'm(Z(m)Z)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 er8d dlm2Z3 nd dlm3Z3 e.rd dl4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> d dl?m@Z@ e<eAeAeAf ZBndd Z>dddddddddd d!d"d#d$gZCeDeEZFd%d& ZGd'd( ZHd)d" ZId*d  ZJed+d,d-dd/dZKd0d1 ZLd2d3 ZMd4d ZNdd6dZOd7d8 ZPd9d: ZQd;d ZRd<d= ZSd>d? ZTd@d ZUdAd ZVejWfdBdCZXddEdZYdFd ZZdGd Z[dHdI Z\dJdK Z]dLdM Z^dNdO Z_dPdQ Z`dRdS ZadDe)dDd.d.dfdTdUZbdVdW ZcdXdY ZddZd[ Zed\d] ZfG d^d_ d_egZhG d`da dae3Ziejjdbdc Zkddd! Zldedf ZmG dgdh dhegZnddid#Zodjdk Zpdldm Zqdndo ZrddqdrZsdsdt Ztdudv Zudwdx Zvdydz Zwd{d| Zxd}d~ Zydd Zzdd$ Z{dd Z|G dd degZ}dd Z~dd Zdd Zdd ZdS )    )absolute_importNdeque)pkg_resources)retry)PY2	text_type)input)parse)unquote)__version__)CommandError)distutils_schemeget_major_minor_versionsite_packages	user_site)WINDOWS
expanduserstdlib_pkgsstr_to_display)write_delete_marker_file)MYPY_CHECK_RUNNING)running_under_virtualenvvirtualenv_no_global)BytesIO)StringIO)
AnyAnyStr	ContainerIterableListOptionalTextTupleUnioncast)Distributionc                 C   s   |S N )Ztype_valuer(   r(   </usr/lib/python3.8/site-packages/pip/_internal/utils/misc.pyr%   A   s    r%   rmtreedisplay_path
backup_dirasksplitextformat_sizeis_installable_dirnormalize_pathrenamesget_progcaptured_stdout
ensure_dirget_installed_versionremove_auth_from_urlc                  C   s4   t jt jtdd} t j| } dt| t S )Nz..zpip {} from {} (python {}))	ospathjoindirname__file__abspathformatr   r   )Zpip_pkg_dirr(   r(   r*   get_pip_versionQ   s      r@   c                 C   sD   t | dk r"| dt |  d 7 } nt | dkr:| dd } td| S )ax  
    Convert a tuple of ints representing a Python version to one of length
    three.

    :param py_version_info: a tuple of ints representing a Python version,
        or None to specify no version. The tuple can have any length.

    :return: a tuple of length three if `py_version_info` is non-None.
        Otherwise, return `py_version_info` unchanged (i.e. None).
       )r   NVersionInfo)lenr%   )Zpy_version_infor(   r(   r*   normalize_version_info]   s
    rD   c              
   C   sD   zt |  W n0 tk
r> } z|jtjkr. W 5 d}~X Y nX dS )z os.path.makedirs without EEXIST.N)r9   makedirsOSErrorerrnoZEEXIST)r:   er(   r(   r*   r6   q   s
    c               
   C   sP   z0t jtjd } | dkr(dtj W S | W S W n tttfk
rJ   Y nX dS )Nr   )z__main__.pyz-cz	%s -m pippip)	r9   r:   basenamesysargv
executableAttributeError	TypeError
IndexError)progr(   r(   r*   r4   {   s    
i  i  )Zstop_max_delayZ
wait_fixedFc                 C   s   t j| |td d S )N)ignore_errorsonerror)shutilr+   rmtree_errorhandler)dirrR   r(   r(   r*   r+      s    c              	   C   sX   zt |jtj@  }W n ttfk
r2   Y dS X |rRt |tj | | dS  dS )zOn Windows, the files in .svn are read-only, so when rmtree() tries to
    remove them, an exception is thrown.  We catch that here, remove the
    read-only attribute, and hopefully continue without problems.N)r9   statst_modeS_IWRITEIOErrorrF   chmod)funcr:   exc_infoZhas_attr_readonlyr(   r(   r*   rU      s    rU   c                 C   sd   | dkrdS t | tr| S z| t d}W n0 tk
r^   trRtd| }nt	| }Y nX |S )z
    Convert a bytes (or text) path to text (unicode in Python 2) for display
    and logging purposes.

    This function should never error out. Also, this function is mainly needed
    for Python 2 since in Python 3 str paths are already text.
    Nstrictzb{!r})

isinstancer   decoderK   getfilesystemencodingUnicodeDecodeErrorr   r   r?   ascii)r:   r,   r(   r(   r*   path_to_display   s    	
rd   c                 C   st   t jt j| } tjd dkrB| t d} | t	 d} | 
t  t jj rpd| tt  d  } | S )zTGives the display value for a given path, making it relative to cwd
    if possible.r      replace.N)r9   r:   normcaser>   rK   version_infor`   ra   encodegetdefaultencoding
startswithgetcwdseprC   r:   r(   r(   r*   r,      s    .bakc                 C   s6   d}|}t j| | r.|d7 }|t| }q| | S )z\Figure out the name of a directory to back up the given dir to
    (adding .bak, .bak2, etc)   )r9   r:   existsstr)rV   extn	extensionr(   r(   r*   r-      s    c                 C   s2   t jdd D ]}||kr|  S qt| |S )NZPIP_EXISTS_ACTION )r9   environgetsplitr.   )messageoptionsactionr(   r(   r*   ask_path_exists   s    
r~   c                 C   s   t jdrtd|  dS )z&Raise an error if no input is allowed.ZPIP_NO_INPUTz7No input was expected ($PIP_NO_INPUT set); question: %sN)r9   rx   ry   	Exceptionr{   r(   r(   r*   _check_no_input   s    r   c                 C   sF   t |  t| }|  }||kr<td|d|f  q |S q dS )z@Ask the message interactively, with the given possible responsesz<Your response (%r) was not one of the expected responses: %sz, N)r   r	   striplowerprintr;   )r{   r|   Zresponser(   r(   r*   r.      s    c                 C   s   t |  t| S )zAsk for input interactively.)r   r	   r   r(   r(   r*   	ask_input  s    r   c                 C   s   t |  t| S )z!Ask for a password interactively.)r   getpassr   r(   r(   r*   ask_password  s    r   c                 C   sL   | dkrd| d d  S | dkr,d| d  S | dkr@d| d  S d|  S d S )	Ni@B z%.1fMBg     @@i  i'  z%ikBz%.1fkBz%ibytesr(   )bytesr(   r(   r*   r0     s    c                 C   sP   t j| sdS t j| d}t j|r.dS t j| d}t j|rLdS dS )zBIs path is a directory containing setup.py or pyproject.toml?
    Fzsetup.pyTzpyproject.toml)r9   r:   isdirr;   isfile)r:   Zsetup_pyZpyproject_tomlr(   r(   r*   r1     s    c                 c   s   |  |}|sq|V  q dS )z7Yield pieces of data from a file-like object until EOF.N)read)filesizechunkr(   r(   r*   read_chunks*  s    
r   Tc                 C   s2   t | } |rtj| } ntj| } tj| S )zN
    Convert a path to its canonical, case-normalized, absolute version.

    )r   r9   r:   realpathr>   rh   )r:   Zresolve_symlinksr(   r(   r*   r2   3  s
    c                 C   s@   t | \}}| dr8|dd | }|dd }||fS )z,Like os.path.splitext, but take off .tar tooz.tarN)	posixpathr/   r   endswith)r:   basert   r(   r(   r*   r/   A  s
    c                 C   sz   t j|\}}|r.|r.t j|s.t | t| | t j| \}}|rv|rvzt | W n tk
rt   Y nX dS )z7Like os.renames(), but handles renaming across devices.N)	r9   r:   rz   rr   rE   rT   Zmove
removedirsrF   )oldnewheadtailr(   r(   r*   r3   K  s    
c                 C   s   t  s
dS | ttjS )z
    Return True if path is within sys.prefix, if we're running in a virtualenv.

    If we're not in a virtualenv, all paths are considered "local."

    Caution: this function assumes the head of path has been normalized
    with normalize_path.
    T)r   rl   r2   rK   prefixro   r(   r(   r*   is_local]  s    
r   c                 C   s   t t| S )z
    Return True if given Distribution object is installed locally
    (i.e. within current virtualenv).

    Always True if we're not in a virtualenv.

    )r   dist_locationdistr(   r(   r*   dist_is_locall  s    	r   c                 C   s   t | ttS )zF
    Return True if given Distribution is installed in user site.
    )r   rl   r2   r   r   r(   r(   r*   dist_in_usersitex  s    r   c                 C   s   t | ttS )z[
    Return True if given Distribution is installed in
    sysconfig.get_python_lib().
    )r   rl   r2   r   r   r(   r(   r*   dist_in_site_packages  s    r   c                 C   s,   t t| }|t tdd dd S )zf
    Return True if given Distribution is installed in
    path matching distutils_scheme layout.
    rw   Zpurelibpythonr   )r2   r   rl   r   rz   )r   Z	norm_pathr(   r(   r*   dist_in_install_path  s    r   c                 C   s6   t jD ]*}tj|| jd }tj|r dS qdS )zC
    Return True if given Distribution is an editable install.
    	.egg-linkTF)rK   r:   r9   r;   project_namer   )r   Z	path_itemegg_linkr(   r(   r*   dist_is_editable  s
    
r   c                    s   |rt |}nt j}| r tndd |r6dd  ndd  |rLdd ndd |r^tnd	d
  fdd|D S )a^  
    Return a list of installed Distribution objects.

    If ``local_only`` is True (default), only return installations
    local to the current virtualenv, if in a virtualenv.

    ``skip`` argument is an iterable of lower-case project names to
    ignore; defaults to stdlib_pkgs

    If ``include_editables`` is False, don't report editables.

    If ``editables_only`` is True , only report editables.

    If ``user_only`` is True , only report installations in the user
    site directory.

    If ``paths`` is set, only report the distributions present at the
    specified list of locations.
    c                 S   s   dS NTr(   dr(   r(   r*   
local_test  s    z/get_installed_distributions.<locals>.local_testc                 S   s   dS r   r(   r   r(   r(   r*   editable_test  s    z2get_installed_distributions.<locals>.editable_testc                 S   s
   t |  S r'   r   r   r(   r(   r*   r     s    c                 S   s   t | S r'   r   r   r(   r(   r*   editables_only_test  s    z8get_installed_distributions.<locals>.editables_only_testc                 S   s   dS r   r(   r   r(   r(   r*   r     s    c                 S   s   dS r   r(   r   r(   r(   r*   	user_test  s    z.get_installed_distributions.<locals>.user_testc                    s:   g | ]2}|r|j kr |r|r|r|qS r(   )key).0r   r   r   r   skipr   r(   r*   
<listcomp>  s    
z/get_installed_distributions.<locals>.<listcomp>)r   
WorkingSetworking_setr   r   )Z
local_onlyr   Zinclude_editablesZeditables_onlyZ	user_onlypathsr   r(   r   r*   get_installed_distributions  s     

r   c                 C   sx   g }t  r*|t t sBtrB|t ntr8|t |t |D ],}tj|| jd }tj	|rF|  S qFdS )a  
    Return the path for the .egg-link file if it exists, otherwise, None.

    There's 3 scenarios:
    1) not in a virtualenv
       try to find in site.USER_SITE, then site_packages
    2) in a no-global virtualenv
       try to find in site_packages
    3) in a yes-global virtualenv
       try to find in site_packages, then site.USER_SITE
       (don't look in global location)

    For #1 and #3, there could be odd cases, where there's an egg-link in 2
    locations.

    This method will just return the first one found.
    r   N)
r   appendr   r   r   r9   r:   r;   r   r   )r   ZsitesZsiteZegglinkr(   r(   r*   egg_link_path  s    




r   c                 C   s   t | }|rt|S t| jS )aO  
    Get the site-packages location of this distribution. Generally
    this is dist.location, except in the case of develop-installed
    packages, where dist.location is the source code location, and we
    want to know where the egg-link file is.

    The returned location is normalized (in particular, with symlinks removed).
    )r   r2   location)r   r   r(   r(   r*   r     s    
r   c                 G   s   t j| f|  d S r'   )loggerinfo)msgargsr(   r(   r*   write_output  s    r   c                 C   s   t |  t|  d S r'   )r9   rE   r   )Z	build_dirr(   r(   r*   _make_build_dir  s    
r   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	FakeFilezQWrap a list of lines in an object with readline() to make
    ConfigParser happy.c                 C   s   dd |D | _ d S )Nc                 s   s   | ]
}|V  qd S r'   r(   )r   lr(   r(   r*   	<genexpr>&  s     z$FakeFile.__init__.<locals>.<genexpr>_gen)selflinesr(   r(   r*   __init__%  s    zFakeFile.__init__c                 C   sP   z4zt | jW W S  tk
r0   | j   Y W S X W n tk
rJ   Y dS X d S )Nrw   )nextr   	NameErrorStopIterationr   r(   r(   r*   readline(  s    zFakeFile.readlinec                 C   s   | j S r'   r   r   r(   r(   r*   __iter__1  s    zFakeFile.__iter__N)__name__
__module____qualname____doc__r   r   r   r(   r(   r(   r*   r   "  s   	r   c                   @   s$   e Zd Zedd Zedd ZdS )StreamWrapperc                 C   s   || _ |  S r'   )orig_stream)clsr   r(   r(   r*   from_stream7  s    zStreamWrapper.from_streamc                 C   s   | j jS r'   )r   encodingr   r(   r(   r*   r   =  s    zStreamWrapper.encodingN)r   r   r   classmethodr   propertyr   r(   r(   r(   r*   r   5  s   
r   c              
   c   s@   t t| }tt| t| zt t| V  W 5 tt| | X dS )zReturn a context manager used by captured_stdout/stdin/stderr
    that temporarily replaces the sys stream *stream_name* with a StringIO.

    Taken from Lib/support/__init__.py in the CPython repo.
    N)getattrrK   setattrr   r   )Zstream_nameZorig_stdoutr(   r(   r*   captured_outputB  s
    
r   c                   C   s   t dS )zCapture the output of sys.stdout:

       with captured_stdout() as stdout:
           print('hello')
       self.assertEqual(stdout.getvalue(), 'hello
')

    Taken from Lib/support/__init__.py in the CPython repo.
    stdoutr   r(   r(   r(   r*   r5   Q  s    	c                   C   s   t dS )z 
    See captured_stdout().
    stderrr   r(   r(   r(   r*   captured_stderr]  s    r   c                   @   s    e Zd ZdZdd Zdd ZdS )cached_propertyzA property that is only computed once per instance and then replaces
       itself with an ordinary attribute. Deleting the attribute resets the
       property.

       Source: https://github.com/bottlepy/bottle/blob/0.11.5/bottle.py#L175
    c                 C   s   t |d| _|| _d S )Nr   )r   r   r\   )r   r\   r(   r(   r*   r   l  s    zcached_property.__init__c                 C   s(   |d kr| S |  | }|j| j j< |S r'   )r\   __dict__r   )r   objr   r)   r(   r(   r*   __get__p  s    zcached_property.__get__N)r   r   r   r   r   r   r(   r(   r(   r*   r   d  s   r   c                 C   s4   t j| }|dkrt  }||}|r0|jS dS )zCGet the installed version of dist_name avoiding pkg_resources cacheN)r   ZRequirementr
   r   findversion)Z	dist_namer   Zreqr   r(   r(   r*   r7   x  s
    
c                 C   s   t | dd dS )zConsume an iterable at C speed.r   )maxlenNr   )iteratorr(   r(   r*   consume  s    r   c                  O   s@   t t| tt| f|}dd | D }||d< tdd|S )Nc                 S   s   i | ]\}}||qS r(   r(   )r   r   r)   r(   r(   r*   
<dictcomp>  s      zenum.<locals>.<dictcomp>Zreverse_mappingEnumr(   )dictziprangerC   itemstype)Z
sequentialZnamedZenumsreverser(   r(   r*   enum  s    r   c                 C   s*   |dkr| S d| krd | } d | |S )z.
    Build a netloc from a host-port pair
    N:[{}]z{}:{})r?   )Zhostportr(   r(   r*   build_netloc  s
    
r   httpsc                 C   s4   |  ddkr(d| kr(d| kr(d| } d|| S )z)
    Build a full URL from a netloc.
    r   re   @[r   z{}://{})countr?   )netlocschemer(   r(   r*   build_url_from_netloc  s    
r   c                 C   s   t | }t|}|j|jfS )z2
    Return the host-port pair from a netloc.
    )r   urllib_parseZurlparseZhostnamer   )r   urlZparsedr(   r(   r*   parse_netloc  s    
r  c                 C   sX   d| kr| dfS |  dd\}} d|kr6|dd}n|df}tdd |D }| |fS )zp
    Parse out and remove the auth information from a netloc.

    Returns: (netloc, (username, password)).
    r   )NNrq   r   Nc                 s   s"   | ]}|d krd nt |V  qd S r'   )urllib_unquote)r   xr(   r(   r*   r     s    z)split_auth_from_netloc.<locals>.<genexpr>)rsplitrz   tuple)r   authZ	user_passr(   r(   r*   split_auth_from_netloc  s    r  c                 C   sL   t | \} \}}|dkr| S |dkr.d}d}nt|}d}dj||| dS )z
    Replace the sensitive data in a netloc with "****", if it exists.

    For example:
        - "user:pass@example.com" returns "user:****@example.com"
        - "accesstoken@example.com" returns "****@example.com"
    N****rw   z:****z{user}{password}@{netloc})userpasswordr   )r  r   Zquoter?   )r   r	  r
  r(   r(   r*   redact_netloc  s    	
r  c                 C   s@   t | }||j}|j|d |j|j|jf}t |}||fS )aR  Transform and replace netloc in a url.

    transform_netloc is a function taking the netloc and returning a
    tuple. The first element of this tuple is the new netloc. The
    entire tuple is returned.

    Returns a tuple containing the transformed url as item 0 and the
    original tuple returned by transform_netloc as item 1.
    r   )r   Zurlsplitr   r   r:   ZqueryZfragmentZ
urlunsplit)r   Ztransform_netlocZpurlZnetloc_tupleZ
url_piecesZsurlr(   r(   r*   _transform_url  s    


    
r  c                 C   s   t | S r'   )r  r   r(   r(   r*   _get_netloc   s    r  c                 C   s
   t | fS r'   )r  r  r(   r(   r*   _redact_netloc  s    r  c                 C   s   t | t\}\}}|||fS )z
    Parse a url into separate netloc, auth, and url with no auth.

    Returns: (url_without_auth, netloc, (username, password))
    r  r  )r   Zurl_without_authr   r  r(   r(   r*   split_auth_netloc_from_url  s    r  c                 C   s   t | td S )z7Return a copy of url with 'username:password@' removed.r   r  r   r(   r(   r*   r8     s    c                 C   s   t | td S )z.Replace the password in a given url with ****.r   )r  r  r  r(   r(   r*   redact_auth_from_url  s    r  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )
HiddenTextc                 C   s   || _ || _d S r'   )secretredacted)r   r  r  r(   r(   r*   r   "  s    zHiddenText.__init__c                 C   s   d t| S )Nz<HiddenText {!r}>)r?   rs   r   r(   r(   r*   __repr__+  s    zHiddenText.__repr__c                 C   s   | j S r'   r  r   r(   r(   r*   __str__/  s    zHiddenText.__str__c                 C   s    t | t |krdS | j|jkS )NF)r   r  r   otherr(   r(   r*   __eq__4  s    zHiddenText.__eq__c                 C   s
   | |k S r'   r(   r  r(   r(   r*   __ne__?  s    zHiddenText.__ne__N)r   r   r   r   r  r  r  r  r(   r(   r(   r*   r  !  s
   	r  c                 C   s   t | ddS )Nr  r  )r  )r)   r(   r(   r*   
hide_valueD  s    r  c                 C   s   t | }t| |dS )Nr  )r  r  )r   r  r(   r(   r*   hide_urlI  s    r  c                 C   s   t  }dD ]P}|dj|d |djtjd |d |djtjdd d	|i q
| oxtoxtjtj	d |k}|rtj
d
dgtj	dd  }tdd|dS )zProtection of pip.exe from modification on Windows

    On Windows, any operation modifying pip should be run as:
        python -m pip ...
    )rw   z.exezpip{ext})rt   z
pip{}{ext}r   zpip{}.{}{ext}Nre   rt   z-mrI   rq   z3To modify pip, please run the following command:
{} )setaddr?   rK   ri   r   r9   r:   rJ   rL   rM   r   r;   )Zmodifying_pipZ	pip_namesrt   Zshould_show_use_python_msgZnew_commandr(   r(   r*   (protect_pip_from_modification_on_windowsO  s,    "  r#  c                   C   s   t jdk	ot j S )z!Is this console interactive?
    N)rK   stdinisattyr(   r(   r(   r*   is_console_interactivem  s    r&  )F)rp   )T)N)r   )Z
__future__r   
contextlibrG   r   ioZloggingr9   r   rT   rW   rK   collectionsr   Zpip._vendorr   Zpip._vendor.retryingr   Zpip._vendor.sixr   r   Zpip._vendor.six.movesr	   Zpip._vendor.six.moves.urllibr
   r   Z"pip._vendor.six.moves.urllib.parser   r  rI   r   Zpip._internal.exceptionsr   Zpip._internal.locationsr   r   r   r   Zpip._internal.utils.compatr   r   r   r   Z pip._internal.utils.marker_filesr   Zpip._internal.utils.typingr   Zpip._internal.utils.virtualenvr   r   r   r   typingr   r   r   r   r    r!   r"   r#   r$   r%   Zpip._vendor.pkg_resourcesr&   intrB   __all__Z	getLoggerr   r   r@   rD   r6   r4   r+   rU   rd   r,   r-   r~   r   r.   r   r   r0   r1   DEFAULT_BUFFER_SIZEr   r2   r/   r3   r   r   r   r   r   r   r   r   r   r   r   objectr   r   contextmanagerr   r5   r   r   r7   r   r   r   r   r  r  r  r  r  r  r  r8   r  r  r  r  r#  r&  r(   r(   r(   r*   <module>   s   0     	


"

	

	

E$



#