#
tokens: 47405/50000 3/808 files (page 55/168)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 55 of 168. Use http://codebase.md/romanshablio/mcp_server?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .DS_Store
├── .venv
│   ├── __pycache__
│   │   └── hello.cpython-312.pyc
│   ├── bin
│   │   ├── activate
│   │   ├── activate.csh
│   │   ├── activate.fish
│   │   ├── Activate.ps1
│   │   ├── flask
│   │   ├── normalizer
│   │   ├── pip
│   │   ├── pip3
│   │   ├── pip3.12
│   │   ├── python
│   │   ├── python3
│   │   └── python3.12
│   ├── hello.py
│   ├── lib
│   │   └── python3.12
│   │       └── site-packages
│   │           ├── beautifulsoup4-4.12.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   ├── AUTHORS
│   │           │   │   └── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── blinker
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _utilities.cpython-312.pyc
│   │           │   │   └── base.cpython-312.pyc
│   │           │   ├── _utilities.py
│   │           │   ├── base.py
│   │           │   └── py.typed
│   │           ├── blinker-1.8.2.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── bs4
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── css.cpython-312.pyc
│   │           │   │   ├── dammit.cpython-312.pyc
│   │           │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   ├── element.cpython-312.pyc
│   │           │   │   └── formatter.cpython-312.pyc
│   │           │   ├── builder
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _html5lib.cpython-312.pyc
│   │           │   │   │   ├── _htmlparser.cpython-312.pyc
│   │           │   │   │   └── _lxml.cpython-312.pyc
│   │           │   │   ├── _html5lib.py
│   │           │   │   ├── _htmlparser.py
│   │           │   │   └── _lxml.py
│   │           │   ├── css.py
│   │           │   ├── dammit.py
│   │           │   ├── diagnose.py
│   │           │   ├── element.py
│   │           │   ├── formatter.py
│   │           │   └── tests
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── test_builder_registry.cpython-312.pyc
│   │           │       │   ├── test_builder.cpython-312.pyc
│   │           │       │   ├── test_css.cpython-312.pyc
│   │           │       │   ├── test_dammit.cpython-312.pyc
│   │           │       │   ├── test_docs.cpython-312.pyc
│   │           │       │   ├── test_element.cpython-312.pyc
│   │           │       │   ├── test_formatter.cpython-312.pyc
│   │           │       │   ├── test_fuzz.cpython-312.pyc
│   │           │       │   ├── test_html5lib.cpython-312.pyc
│   │           │       │   ├── test_htmlparser.cpython-312.pyc
│   │           │       │   ├── test_lxml.cpython-312.pyc
│   │           │       │   ├── test_navigablestring.cpython-312.pyc
│   │           │       │   ├── test_pageelement.cpython-312.pyc
│   │           │       │   ├── test_soup.cpython-312.pyc
│   │           │       │   ├── test_tag.cpython-312.pyc
│   │           │       │   └── test_tree.cpython-312.pyc
│   │           │       ├── fuzz
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4670634698080256.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4818336571064320.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-4999465949331456.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5000587759190016.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5167584867909632.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5270998950477824.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5375146639360000.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5492400320282624.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5703933063462912.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5843991618256896.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-5984173902397440.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6124268085182464.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6241471367348224.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6306874195312640.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6450958476902400.testcase
│   │           │       │   ├── clusterfuzz-testcase-minimized-bs4_fuzzer-6600557255327744.testcase
│   │           │       │   ├── crash-0d306a50c8ed8bcd0785b67000fcd5dea1d33f08.testcase
│   │           │       │   └── crash-ffbdfa8a2b26f13537b68d3794b0478a4090ee4a.testcase
│   │           │       ├── test_builder_registry.py
│   │           │       ├── test_builder.py
│   │           │       ├── test_css.py
│   │           │       ├── test_dammit.py
│   │           │       ├── test_docs.py
│   │           │       ├── test_element.py
│   │           │       ├── test_formatter.py
│   │           │       ├── test_fuzz.py
│   │           │       ├── test_html5lib.py
│   │           │       ├── test_htmlparser.py
│   │           │       ├── test_lxml.py
│   │           │       ├── test_navigablestring.py
│   │           │       ├── test_pageelement.py
│   │           │       ├── test_soup.py
│   │           │       ├── test_tag.py
│   │           │       └── test_tree.py
│   │           ├── certifi
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── core.cpython-312.pyc
│   │           │   ├── cacert.pem
│   │           │   ├── core.py
│   │           │   └── py.typed
│   │           ├── certifi-2024.8.30.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── charset_normalizer
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── cd.cpython-312.pyc
│   │           │   │   ├── constant.cpython-312.pyc
│   │           │   │   ├── legacy.cpython-312.pyc
│   │           │   │   ├── md.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── version.cpython-312.pyc
│   │           │   ├── api.py
│   │           │   ├── cd.py
│   │           │   ├── cli
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __main__.py
│   │           │   │   └── __pycache__
│   │           │   │       ├── __init__.cpython-312.pyc
│   │           │   │       └── __main__.cpython-312.pyc
│   │           │   ├── constant.py
│   │           │   ├── legacy.py
│   │           │   ├── md__mypyc.cpython-312-darwin.so
│   │           │   ├── md.cpython-312-darwin.so
│   │           │   ├── md.py
│   │           │   ├── models.py
│   │           │   ├── py.typed
│   │           │   ├── utils.py
│   │           │   └── version.py
│   │           ├── charset_normalizer-3.4.0.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── click
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _compat.cpython-312.pyc
│   │           │   │   ├── _termui_impl.cpython-312.pyc
│   │           │   │   ├── _textwrap.cpython-312.pyc
│   │           │   │   ├── _winconsole.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── decorators.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formatting.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── shell_completion.cpython-312.pyc
│   │           │   │   ├── termui.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── types.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── _compat.py
│   │           │   ├── _termui_impl.py
│   │           │   ├── _textwrap.py
│   │           │   ├── _winconsole.py
│   │           │   ├── core.py
│   │           │   ├── decorators.py
│   │           │   ├── exceptions.py
│   │           │   ├── formatting.py
│   │           │   ├── globals.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── shell_completion.py
│   │           │   ├── termui.py
│   │           │   ├── testing.py
│   │           │   ├── types.py
│   │           │   └── utils.py
│   │           ├── click-8.1.7.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.rst
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── fake_useragent
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── errors.cpython-312.pyc
│   │           │   │   ├── fake.cpython-312.pyc
│   │           │   │   ├── log.cpython-312.pyc
│   │           │   │   ├── settings.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── data
│   │           │   │   └── browsers.json
│   │           │   ├── errors.py
│   │           │   ├── fake.py
│   │           │   ├── log.py
│   │           │   ├── settings.py
│   │           │   └── utils.py
│   │           ├── fake_useragent-1.5.1.dist-info
│   │           │   ├── AUTHORS
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── flask
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   ├── app.cpython-312.pyc
│   │           │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   ├── cli.cpython-312.pyc
│   │           │   │   ├── config.cpython-312.pyc
│   │           │   │   ├── ctx.cpython-312.pyc
│   │           │   │   ├── debughelpers.cpython-312.pyc
│   │           │   │   ├── globals.cpython-312.pyc
│   │           │   │   ├── helpers.cpython-312.pyc
│   │           │   │   ├── logging.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── signals.cpython-312.pyc
│   │           │   │   ├── templating.cpython-312.pyc
│   │           │   │   ├── testing.cpython-312.pyc
│   │           │   │   ├── typing.cpython-312.pyc
│   │           │   │   ├── views.cpython-312.pyc
│   │           │   │   └── wrappers.cpython-312.pyc
│   │           │   ├── app.py
│   │           │   ├── blueprints.py
│   │           │   ├── cli.py
│   │           │   ├── config.py
│   │           │   ├── ctx.py
│   │           │   ├── debughelpers.py
│   │           │   ├── globals.py
│   │           │   ├── helpers.py
│   │           │   ├── json
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── provider.cpython-312.pyc
│   │           │   │   │   └── tag.cpython-312.pyc
│   │           │   │   ├── provider.py
│   │           │   │   └── tag.py
│   │           │   ├── logging.py
│   │           │   ├── py.typed
│   │           │   ├── sansio
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── app.cpython-312.pyc
│   │           │   │   │   ├── blueprints.cpython-312.pyc
│   │           │   │   │   └── scaffold.cpython-312.pyc
│   │           │   │   ├── app.py
│   │           │   │   ├── blueprints.py
│   │           │   │   ├── README.md
│   │           │   │   └── scaffold.py
│   │           │   ├── sessions.py
│   │           │   ├── signals.py
│   │           │   ├── templating.py
│   │           │   ├── testing.py
│   │           │   ├── typing.py
│   │           │   ├── views.py
│   │           │   └── wrappers.py
│   │           ├── flask-3.0.3.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   └── WHEEL
│   │           ├── idna
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── codec.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── core.cpython-312.pyc
│   │           │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   ├── intranges.cpython-312.pyc
│   │           │   │   ├── package_data.cpython-312.pyc
│   │           │   │   └── uts46data.cpython-312.pyc
│   │           │   ├── codec.py
│   │           │   ├── compat.py
│   │           │   ├── core.py
│   │           │   ├── idnadata.py
│   │           │   ├── intranges.py
│   │           │   ├── package_data.py
│   │           │   ├── py.typed
│   │           │   └── uts46data.py
│   │           ├── idna-3.10.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── itsdangerous
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _json.cpython-312.pyc
│   │           │   │   ├── encoding.cpython-312.pyc
│   │           │   │   ├── exc.cpython-312.pyc
│   │           │   │   ├── serializer.cpython-312.pyc
│   │           │   │   ├── signer.cpython-312.pyc
│   │           │   │   ├── timed.cpython-312.pyc
│   │           │   │   └── url_safe.cpython-312.pyc
│   │           │   ├── _json.py
│   │           │   ├── encoding.py
│   │           │   ├── exc.py
│   │           │   ├── py.typed
│   │           │   ├── serializer.py
│   │           │   ├── signer.py
│   │           │   ├── timed.py
│   │           │   └── url_safe.py
│   │           ├── itsdangerous-2.2.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── jinja2
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _identifier.cpython-312.pyc
│   │           │   │   ├── async_utils.cpython-312.pyc
│   │           │   │   ├── bccache.cpython-312.pyc
│   │           │   │   ├── compiler.cpython-312.pyc
│   │           │   │   ├── constants.cpython-312.pyc
│   │           │   │   ├── debug.cpython-312.pyc
│   │           │   │   ├── defaults.cpython-312.pyc
│   │           │   │   ├── environment.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── ext.cpython-312.pyc
│   │           │   │   ├── filters.cpython-312.pyc
│   │           │   │   ├── idtracking.cpython-312.pyc
│   │           │   │   ├── lexer.cpython-312.pyc
│   │           │   │   ├── loaders.cpython-312.pyc
│   │           │   │   ├── meta.cpython-312.pyc
│   │           │   │   ├── nativetypes.cpython-312.pyc
│   │           │   │   ├── nodes.cpython-312.pyc
│   │           │   │   ├── optimizer.cpython-312.pyc
│   │           │   │   ├── parser.cpython-312.pyc
│   │           │   │   ├── runtime.cpython-312.pyc
│   │           │   │   ├── sandbox.cpython-312.pyc
│   │           │   │   ├── tests.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── visitor.cpython-312.pyc
│   │           │   ├── _identifier.py
│   │           │   ├── async_utils.py
│   │           │   ├── bccache.py
│   │           │   ├── compiler.py
│   │           │   ├── constants.py
│   │           │   ├── debug.py
│   │           │   ├── defaults.py
│   │           │   ├── environment.py
│   │           │   ├── exceptions.py
│   │           │   ├── ext.py
│   │           │   ├── filters.py
│   │           │   ├── idtracking.py
│   │           │   ├── lexer.py
│   │           │   ├── loaders.py
│   │           │   ├── meta.py
│   │           │   ├── nativetypes.py
│   │           │   ├── nodes.py
│   │           │   ├── optimizer.py
│   │           │   ├── parser.py
│   │           │   ├── py.typed
│   │           │   ├── runtime.py
│   │           │   ├── sandbox.py
│   │           │   ├── tests.py
│   │           │   ├── utils.py
│   │           │   └── visitor.py
│   │           ├── jinja2-3.1.4.dist-info
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── lxml
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _elementpath.cpython-312.pyc
│   │           │   │   ├── builder.cpython-312.pyc
│   │           │   │   ├── cssselect.cpython-312.pyc
│   │           │   │   ├── doctestcompare.cpython-312.pyc
│   │           │   │   ├── ElementInclude.cpython-312.pyc
│   │           │   │   ├── pyclasslookup.cpython-312.pyc
│   │           │   │   ├── sax.cpython-312.pyc
│   │           │   │   └── usedoctest.cpython-312.pyc
│   │           │   ├── _elementpath.cpython-312-darwin.so
│   │           │   ├── _elementpath.py
│   │           │   ├── apihelpers.pxi
│   │           │   ├── builder.cpython-312-darwin.so
│   │           │   ├── builder.py
│   │           │   ├── classlookup.pxi
│   │           │   ├── cleanup.pxi
│   │           │   ├── cssselect.py
│   │           │   ├── debug.pxi
│   │           │   ├── docloader.pxi
│   │           │   ├── doctestcompare.py
│   │           │   ├── dtd.pxi
│   │           │   ├── ElementInclude.py
│   │           │   ├── etree_api.h
│   │           │   ├── etree.cpython-312-darwin.so
│   │           │   ├── etree.h
│   │           │   ├── etree.pyx
│   │           │   ├── extensions.pxi
│   │           │   ├── html
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── _diffcommand.cpython-312.pyc
│   │           │   │   │   ├── _html5builder.cpython-312.pyc
│   │           │   │   │   ├── _setmixin.cpython-312.pyc
│   │           │   │   │   ├── builder.cpython-312.pyc
│   │           │   │   │   ├── clean.cpython-312.pyc
│   │           │   │   │   ├── defs.cpython-312.pyc
│   │           │   │   │   ├── diff.cpython-312.pyc
│   │           │   │   │   ├── ElementSoup.cpython-312.pyc
│   │           │   │   │   ├── formfill.cpython-312.pyc
│   │           │   │   │   ├── html5parser.cpython-312.pyc
│   │           │   │   │   ├── soupparser.cpython-312.pyc
│   │           │   │   │   └── usedoctest.cpython-312.pyc
│   │           │   │   ├── _diffcommand.py
│   │           │   │   ├── _html5builder.py
│   │           │   │   ├── _setmixin.py
│   │           │   │   ├── builder.py
│   │           │   │   ├── clean.py
│   │           │   │   ├── defs.py
│   │           │   │   ├── diff.cpython-312-darwin.so
│   │           │   │   ├── diff.py
│   │           │   │   ├── ElementSoup.py
│   │           │   │   ├── formfill.py
│   │           │   │   ├── html5parser.py
│   │           │   │   ├── soupparser.py
│   │           │   │   └── usedoctest.py
│   │           │   ├── includes
│   │           │   │   ├── __init__.pxd
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   ├── c14n.pxd
│   │           │   │   ├── config.pxd
│   │           │   │   ├── dtdvalid.pxd
│   │           │   │   ├── etree_defs.h
│   │           │   │   ├── etreepublic.pxd
│   │           │   │   ├── extlibs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── libcharset.h
│   │           │   │   │   ├── localcharset.h
│   │           │   │   │   ├── zconf.h
│   │           │   │   │   └── zlib.h
│   │           │   │   ├── htmlparser.pxd
│   │           │   │   ├── libexslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── exslt.h
│   │           │   │   │   ├── exsltconfig.h
│   │           │   │   │   └── exsltexports.h
│   │           │   │   ├── libxml
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── c14n.h
│   │           │   │   │   ├── catalog.h
│   │           │   │   │   ├── chvalid.h
│   │           │   │   │   ├── debugXML.h
│   │           │   │   │   ├── dict.h
│   │           │   │   │   ├── encoding.h
│   │           │   │   │   ├── entities.h
│   │           │   │   │   ├── globals.h
│   │           │   │   │   ├── hash.h
│   │           │   │   │   ├── HTMLparser.h
│   │           │   │   │   ├── HTMLtree.h
│   │           │   │   │   ├── list.h
│   │           │   │   │   ├── nanoftp.h
│   │           │   │   │   ├── nanohttp.h
│   │           │   │   │   ├── parser.h
│   │           │   │   │   ├── parserInternals.h
│   │           │   │   │   ├── relaxng.h
│   │           │   │   │   ├── SAX.h
│   │           │   │   │   ├── SAX2.h
│   │           │   │   │   ├── schemasInternals.h
│   │           │   │   │   ├── schematron.h
│   │           │   │   │   ├── threads.h
│   │           │   │   │   ├── tree.h
│   │           │   │   │   ├── uri.h
│   │           │   │   │   ├── valid.h
│   │           │   │   │   ├── xinclude.h
│   │           │   │   │   ├── xlink.h
│   │           │   │   │   ├── xmlautomata.h
│   │           │   │   │   ├── xmlerror.h
│   │           │   │   │   ├── xmlexports.h
│   │           │   │   │   ├── xmlIO.h
│   │           │   │   │   ├── xmlmemory.h
│   │           │   │   │   ├── xmlmodule.h
│   │           │   │   │   ├── xmlreader.h
│   │           │   │   │   ├── xmlregexp.h
│   │           │   │   │   ├── xmlsave.h
│   │           │   │   │   ├── xmlschemas.h
│   │           │   │   │   ├── xmlschemastypes.h
│   │           │   │   │   ├── xmlstring.h
│   │           │   │   │   ├── xmlunicode.h
│   │           │   │   │   ├── xmlversion.h
│   │           │   │   │   ├── xmlwriter.h
│   │           │   │   │   ├── xpath.h
│   │           │   │   │   ├── xpathInternals.h
│   │           │   │   │   └── xpointer.h
│   │           │   │   ├── libxslt
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   │   ├── attributes.h
│   │           │   │   │   ├── documents.h
│   │           │   │   │   ├── extensions.h
│   │           │   │   │   ├── extra.h
│   │           │   │   │   ├── functions.h
│   │           │   │   │   ├── imports.h
│   │           │   │   │   ├── keys.h
│   │           │   │   │   ├── namespaces.h
│   │           │   │   │   ├── numbersInternals.h
│   │           │   │   │   ├── pattern.h
│   │           │   │   │   ├── preproc.h
│   │           │   │   │   ├── security.h
│   │           │   │   │   ├── templates.h
│   │           │   │   │   ├── transform.h
│   │           │   │   │   ├── variables.h
│   │           │   │   │   ├── xslt.h
│   │           │   │   │   ├── xsltconfig.h
│   │           │   │   │   ├── xsltexports.h
│   │           │   │   │   ├── xsltInternals.h
│   │           │   │   │   ├── xsltlocale.h
│   │           │   │   │   └── xsltutils.h
│   │           │   │   ├── lxml-version.h
│   │           │   │   ├── relaxng.pxd
│   │           │   │   ├── schematron.pxd
│   │           │   │   ├── tree.pxd
│   │           │   │   ├── uri.pxd
│   │           │   │   ├── xinclude.pxd
│   │           │   │   ├── xmlerror.pxd
│   │           │   │   ├── xmlparser.pxd
│   │           │   │   ├── xmlschema.pxd
│   │           │   │   ├── xpath.pxd
│   │           │   │   └── xslt.pxd
│   │           │   ├── isoschematron
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   └── __init__.cpython-312.pyc
│   │           │   │   └── resources
│   │           │   │       ├── rng
│   │           │   │       │   └── iso-schematron.rng
│   │           │   │       └── xsl
│   │           │   │           ├── iso-schematron-xslt1
│   │           │   │           │   ├── iso_abstract_expand.xsl
│   │           │   │           │   ├── iso_dsdl_include.xsl
│   │           │   │           │   ├── iso_schematron_message.xsl
│   │           │   │           │   ├── iso_schematron_skeleton_for_xslt1.xsl
│   │           │   │           │   ├── iso_svrl_for_xslt1.xsl
│   │           │   │           │   └── readme.txt
│   │           │   │           ├── RNG2Schtrn.xsl
│   │           │   │           └── XSD2Schtrn.xsl
│   │           │   ├── iterparse.pxi
│   │           │   ├── lxml.etree_api.h
│   │           │   ├── lxml.etree.h
│   │           │   ├── nsclasses.pxi
│   │           │   ├── objectify.cpython-312-darwin.so
│   │           │   ├── objectify.pyx
│   │           │   ├── objectpath.pxi
│   │           │   ├── parser.pxi
│   │           │   ├── parsertarget.pxi
│   │           │   ├── proxy.pxi
│   │           │   ├── public-api.pxi
│   │           │   ├── pyclasslookup.py
│   │           │   ├── readonlytree.pxi
│   │           │   ├── relaxng.pxi
│   │           │   ├── sax.cpython-312-darwin.so
│   │           │   ├── sax.py
│   │           │   ├── saxparser.pxi
│   │           │   ├── schematron.pxi
│   │           │   ├── serializer.pxi
│   │           │   ├── usedoctest.py
│   │           │   ├── xinclude.pxi
│   │           │   ├── xmlerror.pxi
│   │           │   ├── xmlid.pxi
│   │           │   ├── xmlschema.pxi
│   │           │   ├── xpath.pxi
│   │           │   ├── xslt.pxi
│   │           │   └── xsltext.pxi
│   │           ├── lxml-5.3.0.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── LICENSES.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── markupsafe
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   └── _native.cpython-312.pyc
│   │           │   ├── _native.py
│   │           │   ├── _speedups.c
│   │           │   ├── _speedups.cpython-312-darwin.so
│   │           │   ├── _speedups.pyi
│   │           │   └── py.typed
│   │           ├── MarkupSafe-3.0.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── pip
│   │           │   ├── __init__.py
│   │           │   ├── __main__.py
│   │           │   ├── __pip-runner__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __main__.cpython-312.pyc
│   │           │   │   └── __pip-runner__.cpython-312.pyc
│   │           │   ├── _internal
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── build_env.cpython-312.pyc
│   │           │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   ├── pyproject.cpython-312.pyc
│   │           │   │   │   ├── self_outdated_check.cpython-312.pyc
│   │           │   │   │   └── wheel_builder.cpython-312.pyc
│   │           │   │   ├── build_env.py
│   │           │   │   ├── cache.py
│   │           │   │   ├── cli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── autocompletion.cpython-312.pyc
│   │           │   │   │   │   ├── base_command.cpython-312.pyc
│   │           │   │   │   │   ├── cmdoptions.cpython-312.pyc
│   │           │   │   │   │   ├── command_context.cpython-312.pyc
│   │           │   │   │   │   ├── index_command.cpython-312.pyc
│   │           │   │   │   │   ├── main_parser.cpython-312.pyc
│   │           │   │   │   │   ├── main.cpython-312.pyc
│   │           │   │   │   │   ├── parser.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bars.cpython-312.pyc
│   │           │   │   │   │   ├── req_command.cpython-312.pyc
│   │           │   │   │   │   ├── spinners.cpython-312.pyc
│   │           │   │   │   │   └── status_codes.cpython-312.pyc
│   │           │   │   │   ├── autocompletion.py
│   │           │   │   │   ├── base_command.py
│   │           │   │   │   ├── cmdoptions.py
│   │           │   │   │   ├── command_context.py
│   │           │   │   │   ├── index_command.py
│   │           │   │   │   ├── main_parser.py
│   │           │   │   │   ├── main.py
│   │           │   │   │   ├── parser.py
│   │           │   │   │   ├── progress_bars.py
│   │           │   │   │   ├── req_command.py
│   │           │   │   │   ├── spinners.py
│   │           │   │   │   └── status_codes.py
│   │           │   │   ├── commands
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── completion.cpython-312.pyc
│   │           │   │   │   │   ├── configuration.cpython-312.pyc
│   │           │   │   │   │   ├── debug.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   ├── hash.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── inspect.cpython-312.pyc
│   │           │   │   │   │   ├── install.cpython-312.pyc
│   │           │   │   │   │   ├── list.cpython-312.pyc
│   │           │   │   │   │   ├── search.cpython-312.pyc
│   │           │   │   │   │   ├── show.cpython-312.pyc
│   │           │   │   │   │   ├── uninstall.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── completion.py
│   │           │   │   │   ├── configuration.py
│   │           │   │   │   ├── debug.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── hash.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── inspect.py
│   │           │   │   │   ├── install.py
│   │           │   │   │   ├── list.py
│   │           │   │   │   ├── search.py
│   │           │   │   │   ├── show.py
│   │           │   │   │   ├── uninstall.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── configuration.py
│   │           │   │   ├── distributions
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   ├── installed.cpython-312.pyc
│   │           │   │   │   │   ├── sdist.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── installed.py
│   │           │   │   │   ├── sdist.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── index
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── collector.cpython-312.pyc
│   │           │   │   │   │   ├── package_finder.cpython-312.pyc
│   │           │   │   │   │   └── sources.cpython-312.pyc
│   │           │   │   │   ├── collector.py
│   │           │   │   │   ├── package_finder.py
│   │           │   │   │   └── sources.py
│   │           │   │   ├── locations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _distutils.cpython-312.pyc
│   │           │   │   │   │   ├── _sysconfig.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── _distutils.py
│   │           │   │   │   ├── _sysconfig.py
│   │           │   │   │   └── base.py
│   │           │   │   ├── main.py
│   │           │   │   ├── metadata
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _json.cpython-312.pyc
│   │           │   │   │   │   ├── base.cpython-312.pyc
│   │           │   │   │   │   └── pkg_resources.cpython-312.pyc
│   │           │   │   │   ├── _json.py
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── importlib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   │   ├── _dists.cpython-312.pyc
│   │           │   │   │   │   │   └── _envs.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.py
│   │           │   │   │   │   ├── _dists.py
│   │           │   │   │   │   └── _envs.py
│   │           │   │   │   └── pkg_resources.py
│   │           │   │   ├── models
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── candidate.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url.cpython-312.pyc
│   │           │   │   │   │   ├── format_control.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── installation_report.cpython-312.pyc
│   │           │   │   │   │   ├── link.cpython-312.pyc
│   │           │   │   │   │   ├── scheme.cpython-312.pyc
│   │           │   │   │   │   ├── search_scope.cpython-312.pyc
│   │           │   │   │   │   ├── selection_prefs.cpython-312.pyc
│   │           │   │   │   │   ├── target_python.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── candidate.py
│   │           │   │   │   ├── direct_url.py
│   │           │   │   │   ├── format_control.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── installation_report.py
│   │           │   │   │   ├── link.py
│   │           │   │   │   ├── scheme.py
│   │           │   │   │   ├── search_scope.py
│   │           │   │   │   ├── selection_prefs.py
│   │           │   │   │   ├── target_python.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── network
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── download.cpython-312.pyc
│   │           │   │   │   │   ├── lazy_wheel.cpython-312.pyc
│   │           │   │   │   │   ├── session.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── xmlrpc.cpython-312.pyc
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── download.py
│   │           │   │   │   ├── lazy_wheel.py
│   │           │   │   │   ├── session.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── xmlrpc.py
│   │           │   │   ├── operations
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── check.cpython-312.pyc
│   │           │   │   │   │   ├── freeze.cpython-312.pyc
│   │           │   │   │   │   └── prepare.cpython-312.pyc
│   │           │   │   │   ├── build
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── build_tracker.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata_legacy.cpython-312.pyc
│   │           │   │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_editable.cpython-312.pyc
│   │           │   │   │   │   │   ├── wheel_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── build_tracker.py
│   │           │   │   │   │   ├── metadata_editable.py
│   │           │   │   │   │   ├── metadata_legacy.py
│   │           │   │   │   │   ├── metadata.py
│   │           │   │   │   │   ├── wheel_editable.py
│   │           │   │   │   │   ├── wheel_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   ├── check.py
│   │           │   │   │   ├── freeze.py
│   │           │   │   │   ├── install
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── editable_legacy.cpython-312.pyc
│   │           │   │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   │   ├── editable_legacy.py
│   │           │   │   │   │   └── wheel.py
│   │           │   │   │   └── prepare.py
│   │           │   │   ├── pyproject.py
│   │           │   │   ├── req
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── constructors.cpython-312.pyc
│   │           │   │   │   │   ├── req_file.cpython-312.pyc
│   │           │   │   │   │   ├── req_install.cpython-312.pyc
│   │           │   │   │   │   ├── req_set.cpython-312.pyc
│   │           │   │   │   │   └── req_uninstall.cpython-312.pyc
│   │           │   │   │   ├── constructors.py
│   │           │   │   │   ├── req_file.py
│   │           │   │   │   ├── req_install.py
│   │           │   │   │   ├── req_set.py
│   │           │   │   │   └── req_uninstall.py
│   │           │   │   ├── resolution
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   └── base.cpython-312.pyc
│   │           │   │   │   ├── base.py
│   │           │   │   │   ├── legacy
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── resolver.cpython-312.pyc
│   │           │   │   │   │   └── resolver.py
│   │           │   │   │   └── resolvelib
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── base.cpython-312.pyc
│   │           │   │   │       │   ├── candidates.cpython-312.pyc
│   │           │   │   │       │   ├── factory.cpython-312.pyc
│   │           │   │   │       │   ├── found_candidates.cpython-312.pyc
│   │           │   │   │       │   ├── provider.cpython-312.pyc
│   │           │   │   │       │   ├── reporter.cpython-312.pyc
│   │           │   │   │       │   ├── requirements.cpython-312.pyc
│   │           │   │   │       │   └── resolver.cpython-312.pyc
│   │           │   │   │       ├── base.py
│   │           │   │   │       ├── candidates.py
│   │           │   │   │       ├── factory.py
│   │           │   │   │       ├── found_candidates.py
│   │           │   │   │       ├── provider.py
│   │           │   │   │       ├── reporter.py
│   │           │   │   │       ├── requirements.py
│   │           │   │   │       └── resolver.py
│   │           │   │   ├── self_outdated_check.py
│   │           │   │   ├── utils
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _jaraco_text.cpython-312.pyc
│   │           │   │   │   │   ├── _log.cpython-312.pyc
│   │           │   │   │   │   ├── appdirs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── compatibility_tags.cpython-312.pyc
│   │           │   │   │   │   ├── datetime.cpython-312.pyc
│   │           │   │   │   │   ├── deprecation.cpython-312.pyc
│   │           │   │   │   │   ├── direct_url_helpers.cpython-312.pyc
│   │           │   │   │   │   ├── egg_link.cpython-312.pyc
│   │           │   │   │   │   ├── encoding.cpython-312.pyc
│   │           │   │   │   │   ├── entrypoints.cpython-312.pyc
│   │           │   │   │   │   ├── filesystem.cpython-312.pyc
│   │           │   │   │   │   ├── filetypes.cpython-312.pyc
│   │           │   │   │   │   ├── glibc.cpython-312.pyc
│   │           │   │   │   │   ├── hashes.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── misc.cpython-312.pyc
│   │           │   │   │   │   ├── packaging.cpython-312.pyc
│   │           │   │   │   │   ├── retry.cpython-312.pyc
│   │           │   │   │   │   ├── setuptools_build.cpython-312.pyc
│   │           │   │   │   │   ├── subprocess.cpython-312.pyc
│   │           │   │   │   │   ├── temp_dir.cpython-312.pyc
│   │           │   │   │   │   ├── unpacking.cpython-312.pyc
│   │           │   │   │   │   ├── urls.cpython-312.pyc
│   │           │   │   │   │   ├── virtualenv.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── _jaraco_text.py
│   │           │   │   │   ├── _log.py
│   │           │   │   │   ├── appdirs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── compatibility_tags.py
│   │           │   │   │   ├── datetime.py
│   │           │   │   │   ├── deprecation.py
│   │           │   │   │   ├── direct_url_helpers.py
│   │           │   │   │   ├── egg_link.py
│   │           │   │   │   ├── encoding.py
│   │           │   │   │   ├── entrypoints.py
│   │           │   │   │   ├── filesystem.py
│   │           │   │   │   ├── filetypes.py
│   │           │   │   │   ├── glibc.py
│   │           │   │   │   ├── hashes.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── misc.py
│   │           │   │   │   ├── packaging.py
│   │           │   │   │   ├── retry.py
│   │           │   │   │   ├── setuptools_build.py
│   │           │   │   │   ├── subprocess.py
│   │           │   │   │   ├── temp_dir.py
│   │           │   │   │   ├── unpacking.py
│   │           │   │   │   ├── urls.py
│   │           │   │   │   ├── virtualenv.py
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── vcs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── bazaar.cpython-312.pyc
│   │           │   │   │   │   ├── git.cpython-312.pyc
│   │           │   │   │   │   ├── mercurial.cpython-312.pyc
│   │           │   │   │   │   ├── subversion.cpython-312.pyc
│   │           │   │   │   │   └── versioncontrol.cpython-312.pyc
│   │           │   │   │   ├── bazaar.py
│   │           │   │   │   ├── git.py
│   │           │   │   │   ├── mercurial.py
│   │           │   │   │   ├── subversion.py
│   │           │   │   │   └── versioncontrol.py
│   │           │   │   └── wheel_builder.py
│   │           │   ├── _vendor
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   └── typing_extensions.cpython-312.pyc
│   │           │   │   ├── cachecontrol
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _cmd.cpython-312.pyc
│   │           │   │   │   │   ├── adapter.cpython-312.pyc
│   │           │   │   │   │   ├── cache.cpython-312.pyc
│   │           │   │   │   │   ├── controller.cpython-312.pyc
│   │           │   │   │   │   ├── filewrapper.cpython-312.pyc
│   │           │   │   │   │   ├── heuristics.cpython-312.pyc
│   │           │   │   │   │   ├── serialize.cpython-312.pyc
│   │           │   │   │   │   └── wrapper.cpython-312.pyc
│   │           │   │   │   ├── _cmd.py
│   │           │   │   │   ├── adapter.py
│   │           │   │   │   ├── cache.py
│   │           │   │   │   ├── caches
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── file_cache.cpython-312.pyc
│   │           │   │   │   │   │   └── redis_cache.cpython-312.pyc
│   │           │   │   │   │   ├── file_cache.py
│   │           │   │   │   │   └── redis_cache.py
│   │           │   │   │   ├── controller.py
│   │           │   │   │   ├── filewrapper.py
│   │           │   │   │   ├── heuristics.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── serialize.py
│   │           │   │   │   └── wrapper.py
│   │           │   │   ├── certifi
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── core.cpython-312.pyc
│   │           │   │   │   ├── cacert.pem
│   │           │   │   │   ├── core.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── distlib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── database.cpython-312.pyc
│   │           │   │   │   │   ├── index.cpython-312.pyc
│   │           │   │   │   │   ├── locators.cpython-312.pyc
│   │           │   │   │   │   ├── manifest.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── resources.cpython-312.pyc
│   │           │   │   │   │   ├── scripts.cpython-312.pyc
│   │           │   │   │   │   ├── util.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── wheel.cpython-312.pyc
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── database.py
│   │           │   │   │   ├── index.py
│   │           │   │   │   ├── locators.py
│   │           │   │   │   ├── manifest.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── resources.py
│   │           │   │   │   ├── scripts.py
│   │           │   │   │   ├── t32.exe
│   │           │   │   │   ├── t64-arm.exe
│   │           │   │   │   ├── t64.exe
│   │           │   │   │   ├── util.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   ├── w32.exe
│   │           │   │   │   ├── w64-arm.exe
│   │           │   │   │   ├── w64.exe
│   │           │   │   │   └── wheel.py
│   │           │   │   ├── distro
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   └── distro.cpython-312.pyc
│   │           │   │   │   ├── distro.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── idna
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── codec.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── core.cpython-312.pyc
│   │           │   │   │   │   ├── idnadata.cpython-312.pyc
│   │           │   │   │   │   ├── intranges.cpython-312.pyc
│   │           │   │   │   │   ├── package_data.cpython-312.pyc
│   │           │   │   │   │   └── uts46data.cpython-312.pyc
│   │           │   │   │   ├── codec.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── core.py
│   │           │   │   │   ├── idnadata.py
│   │           │   │   │   ├── intranges.py
│   │           │   │   │   ├── package_data.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   └── uts46data.py
│   │           │   │   ├── msgpack
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── ext.cpython-312.pyc
│   │           │   │   │   │   └── fallback.cpython-312.pyc
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── ext.py
│   │           │   │   │   └── fallback.py
│   │           │   │   ├── packaging
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _elffile.cpython-312.pyc
│   │           │   │   │   │   ├── _manylinux.cpython-312.pyc
│   │           │   │   │   │   ├── _musllinux.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _structures.cpython-312.pyc
│   │           │   │   │   │   ├── _tokenizer.cpython-312.pyc
│   │           │   │   │   │   ├── markers.cpython-312.pyc
│   │           │   │   │   │   ├── metadata.cpython-312.pyc
│   │           │   │   │   │   ├── requirements.cpython-312.pyc
│   │           │   │   │   │   ├── specifiers.cpython-312.pyc
│   │           │   │   │   │   ├── tags.cpython-312.pyc
│   │           │   │   │   │   ├── utils.cpython-312.pyc
│   │           │   │   │   │   └── version.cpython-312.pyc
│   │           │   │   │   ├── _elffile.py
│   │           │   │   │   ├── _manylinux.py
│   │           │   │   │   ├── _musllinux.py
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _structures.py
│   │           │   │   │   ├── _tokenizer.py
│   │           │   │   │   ├── markers.py
│   │           │   │   │   ├── metadata.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── requirements.py
│   │           │   │   │   ├── specifiers.py
│   │           │   │   │   ├── tags.py
│   │           │   │   │   ├── utils.py
│   │           │   │   │   └── version.py
│   │           │   │   ├── pkg_resources
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   └── __pycache__
│   │           │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   ├── platformdirs
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── android.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── macos.cpython-312.pyc
│   │           │   │   │   │   ├── unix.cpython-312.pyc
│   │           │   │   │   │   ├── version.cpython-312.pyc
│   │           │   │   │   │   └── windows.cpython-312.pyc
│   │           │   │   │   ├── android.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── macos.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── unix.py
│   │           │   │   │   ├── version.py
│   │           │   │   │   └── windows.py
│   │           │   │   ├── pygments
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── cmdline.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── filter.cpython-312.pyc
│   │           │   │   │   │   ├── formatter.cpython-312.pyc
│   │           │   │   │   │   ├── lexer.cpython-312.pyc
│   │           │   │   │   │   ├── modeline.cpython-312.pyc
│   │           │   │   │   │   ├── plugin.cpython-312.pyc
│   │           │   │   │   │   ├── regexopt.cpython-312.pyc
│   │           │   │   │   │   ├── scanner.cpython-312.pyc
│   │           │   │   │   │   ├── sphinxext.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── token.cpython-312.pyc
│   │           │   │   │   │   ├── unistring.cpython-312.pyc
│   │           │   │   │   │   └── util.cpython-312.pyc
│   │           │   │   │   ├── cmdline.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── filter.py
│   │           │   │   │   ├── filters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   └── __pycache__
│   │           │   │   │   │       └── __init__.cpython-312.pyc
│   │           │   │   │   ├── formatter.py
│   │           │   │   │   ├── formatters
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   ├── bbcode.cpython-312.pyc
│   │           │   │   │   │   │   ├── groff.cpython-312.pyc
│   │           │   │   │   │   │   ├── html.cpython-312.pyc
│   │           │   │   │   │   │   ├── img.cpython-312.pyc
│   │           │   │   │   │   │   ├── irc.cpython-312.pyc
│   │           │   │   │   │   │   ├── latex.cpython-312.pyc
│   │           │   │   │   │   │   ├── other.cpython-312.pyc
│   │           │   │   │   │   │   ├── pangomarkup.cpython-312.pyc
│   │           │   │   │   │   │   ├── rtf.cpython-312.pyc
│   │           │   │   │   │   │   ├── svg.cpython-312.pyc
│   │           │   │   │   │   │   ├── terminal.cpython-312.pyc
│   │           │   │   │   │   │   └── terminal256.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   ├── bbcode.py
│   │           │   │   │   │   ├── groff.py
│   │           │   │   │   │   ├── html.py
│   │           │   │   │   │   ├── img.py
│   │           │   │   │   │   ├── irc.py
│   │           │   │   │   │   ├── latex.py
│   │           │   │   │   │   ├── other.py
│   │           │   │   │   │   ├── pangomarkup.py
│   │           │   │   │   │   ├── rtf.py
│   │           │   │   │   │   ├── svg.py
│   │           │   │   │   │   ├── terminal.py
│   │           │   │   │   │   └── terminal256.py
│   │           │   │   │   ├── lexer.py
│   │           │   │   │   ├── lexers
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _mapping.cpython-312.pyc
│   │           │   │   │   │   │   └── python.cpython-312.pyc
│   │           │   │   │   │   ├── _mapping.py
│   │           │   │   │   │   └── python.py
│   │           │   │   │   ├── modeline.py
│   │           │   │   │   ├── plugin.py
│   │           │   │   │   ├── regexopt.py
│   │           │   │   │   ├── scanner.py
│   │           │   │   │   ├── sphinxext.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styles
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── _mapping.cpython-312.pyc
│   │           │   │   │   │   └── _mapping.py
│   │           │   │   │   ├── token.py
│   │           │   │   │   ├── unistring.py
│   │           │   │   │   └── util.py
│   │           │   │   ├── pyproject_hooks
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _compat.cpython-312.pyc
│   │           │   │   │   │   └── _impl.cpython-312.pyc
│   │           │   │   │   ├── _compat.py
│   │           │   │   │   ├── _impl.py
│   │           │   │   │   └── _in_process
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   └── _in_process.cpython-312.pyc
│   │           │   │   │       └── _in_process.py
│   │           │   │   ├── requests
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __version__.cpython-312.pyc
│   │           │   │   │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   │   │   ├── adapters.cpython-312.pyc
│   │           │   │   │   │   ├── api.cpython-312.pyc
│   │           │   │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   │   ├── certs.cpython-312.pyc
│   │           │   │   │   │   ├── compat.cpython-312.pyc
│   │           │   │   │   │   ├── cookies.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── help.cpython-312.pyc
│   │           │   │   │   │   ├── hooks.cpython-312.pyc
│   │           │   │   │   │   ├── models.cpython-312.pyc
│   │           │   │   │   │   ├── packages.cpython-312.pyc
│   │           │   │   │   │   ├── sessions.cpython-312.pyc
│   │           │   │   │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   │   │   ├── structures.cpython-312.pyc
│   │           │   │   │   │   └── utils.cpython-312.pyc
│   │           │   │   │   ├── __version__.py
│   │           │   │   │   ├── _internal_utils.py
│   │           │   │   │   ├── adapters.py
│   │           │   │   │   ├── api.py
│   │           │   │   │   ├── auth.py
│   │           │   │   │   ├── certs.py
│   │           │   │   │   ├── compat.py
│   │           │   │   │   ├── cookies.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── help.py
│   │           │   │   │   ├── hooks.py
│   │           │   │   │   ├── models.py
│   │           │   │   │   ├── packages.py
│   │           │   │   │   ├── sessions.py
│   │           │   │   │   ├── status_codes.py
│   │           │   │   │   ├── structures.py
│   │           │   │   │   └── utils.py
│   │           │   │   ├── resolvelib
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── providers.cpython-312.pyc
│   │           │   │   │   │   ├── reporters.cpython-312.pyc
│   │           │   │   │   │   ├── resolvers.cpython-312.pyc
│   │           │   │   │   │   └── structs.cpython-312.pyc
│   │           │   │   │   ├── compat
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── collections_abc.cpython-312.pyc
│   │           │   │   │   │   └── collections_abc.py
│   │           │   │   │   ├── providers.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── reporters.py
│   │           │   │   │   ├── resolvers.py
│   │           │   │   │   └── structs.py
│   │           │   │   ├── rich
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __main__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── __main__.cpython-312.pyc
│   │           │   │   │   │   ├── _cell_widths.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_codes.cpython-312.pyc
│   │           │   │   │   │   ├── _emoji_replace.cpython-312.pyc
│   │           │   │   │   │   ├── _export_format.cpython-312.pyc
│   │           │   │   │   │   ├── _extension.cpython-312.pyc
│   │           │   │   │   │   ├── _fileno.cpython-312.pyc
│   │           │   │   │   │   ├── _inspect.cpython-312.pyc
│   │           │   │   │   │   ├── _log_render.cpython-312.pyc
│   │           │   │   │   │   ├── _loop.cpython-312.pyc
│   │           │   │   │   │   ├── _null_file.cpython-312.pyc
│   │           │   │   │   │   ├── _palettes.cpython-312.pyc
│   │           │   │   │   │   ├── _pick.cpython-312.pyc
│   │           │   │   │   │   ├── _ratio.cpython-312.pyc
│   │           │   │   │   │   ├── _spinners.cpython-312.pyc
│   │           │   │   │   │   ├── _stack.cpython-312.pyc
│   │           │   │   │   │   ├── _timer.cpython-312.pyc
│   │           │   │   │   │   ├── _win32_console.cpython-312.pyc
│   │           │   │   │   │   ├── _windows_renderer.cpython-312.pyc
│   │           │   │   │   │   ├── _windows.cpython-312.pyc
│   │           │   │   │   │   ├── _wrap.cpython-312.pyc
│   │           │   │   │   │   ├── abc.cpython-312.pyc
│   │           │   │   │   │   ├── align.cpython-312.pyc
│   │           │   │   │   │   ├── ansi.cpython-312.pyc
│   │           │   │   │   │   ├── bar.cpython-312.pyc
│   │           │   │   │   │   ├── box.cpython-312.pyc
│   │           │   │   │   │   ├── cells.cpython-312.pyc
│   │           │   │   │   │   ├── color_triplet.cpython-312.pyc
│   │           │   │   │   │   ├── color.cpython-312.pyc
│   │           │   │   │   │   ├── columns.cpython-312.pyc
│   │           │   │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   │   ├── constrain.cpython-312.pyc
│   │           │   │   │   │   ├── containers.cpython-312.pyc
│   │           │   │   │   │   ├── control.cpython-312.pyc
│   │           │   │   │   │   ├── default_styles.cpython-312.pyc
│   │           │   │   │   │   ├── diagnose.cpython-312.pyc
│   │           │   │   │   │   ├── emoji.cpython-312.pyc
│   │           │   │   │   │   ├── errors.cpython-312.pyc
│   │           │   │   │   │   ├── file_proxy.cpython-312.pyc
│   │           │   │   │   │   ├── filesize.cpython-312.pyc
│   │           │   │   │   │   ├── highlighter.cpython-312.pyc
│   │           │   │   │   │   ├── json.cpython-312.pyc
│   │           │   │   │   │   ├── jupyter.cpython-312.pyc
│   │           │   │   │   │   ├── layout.cpython-312.pyc
│   │           │   │   │   │   ├── live_render.cpython-312.pyc
│   │           │   │   │   │   ├── live.cpython-312.pyc
│   │           │   │   │   │   ├── logging.cpython-312.pyc
│   │           │   │   │   │   ├── markup.cpython-312.pyc
│   │           │   │   │   │   ├── measure.cpython-312.pyc
│   │           │   │   │   │   ├── padding.cpython-312.pyc
│   │           │   │   │   │   ├── pager.cpython-312.pyc
│   │           │   │   │   │   ├── palette.cpython-312.pyc
│   │           │   │   │   │   ├── panel.cpython-312.pyc
│   │           │   │   │   │   ├── pretty.cpython-312.pyc
│   │           │   │   │   │   ├── progress_bar.cpython-312.pyc
│   │           │   │   │   │   ├── progress.cpython-312.pyc
│   │           │   │   │   │   ├── prompt.cpython-312.pyc
│   │           │   │   │   │   ├── protocol.cpython-312.pyc
│   │           │   │   │   │   ├── region.cpython-312.pyc
│   │           │   │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   │   ├── rule.cpython-312.pyc
│   │           │   │   │   │   ├── scope.cpython-312.pyc
│   │           │   │   │   │   ├── screen.cpython-312.pyc
│   │           │   │   │   │   ├── segment.cpython-312.pyc
│   │           │   │   │   │   ├── spinner.cpython-312.pyc
│   │           │   │   │   │   ├── status.cpython-312.pyc
│   │           │   │   │   │   ├── style.cpython-312.pyc
│   │           │   │   │   │   ├── styled.cpython-312.pyc
│   │           │   │   │   │   ├── syntax.cpython-312.pyc
│   │           │   │   │   │   ├── table.cpython-312.pyc
│   │           │   │   │   │   ├── terminal_theme.cpython-312.pyc
│   │           │   │   │   │   ├── text.cpython-312.pyc
│   │           │   │   │   │   ├── theme.cpython-312.pyc
│   │           │   │   │   │   ├── themes.cpython-312.pyc
│   │           │   │   │   │   ├── traceback.cpython-312.pyc
│   │           │   │   │   │   └── tree.cpython-312.pyc
│   │           │   │   │   ├── _cell_widths.py
│   │           │   │   │   ├── _emoji_codes.py
│   │           │   │   │   ├── _emoji_replace.py
│   │           │   │   │   ├── _export_format.py
│   │           │   │   │   ├── _extension.py
│   │           │   │   │   ├── _fileno.py
│   │           │   │   │   ├── _inspect.py
│   │           │   │   │   ├── _log_render.py
│   │           │   │   │   ├── _loop.py
│   │           │   │   │   ├── _null_file.py
│   │           │   │   │   ├── _palettes.py
│   │           │   │   │   ├── _pick.py
│   │           │   │   │   ├── _ratio.py
│   │           │   │   │   ├── _spinners.py
│   │           │   │   │   ├── _stack.py
│   │           │   │   │   ├── _timer.py
│   │           │   │   │   ├── _win32_console.py
│   │           │   │   │   ├── _windows_renderer.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   ├── _wrap.py
│   │           │   │   │   ├── abc.py
│   │           │   │   │   ├── align.py
│   │           │   │   │   ├── ansi.py
│   │           │   │   │   ├── bar.py
│   │           │   │   │   ├── box.py
│   │           │   │   │   ├── cells.py
│   │           │   │   │   ├── color_triplet.py
│   │           │   │   │   ├── color.py
│   │           │   │   │   ├── columns.py
│   │           │   │   │   ├── console.py
│   │           │   │   │   ├── constrain.py
│   │           │   │   │   ├── containers.py
│   │           │   │   │   ├── control.py
│   │           │   │   │   ├── default_styles.py
│   │           │   │   │   ├── diagnose.py
│   │           │   │   │   ├── emoji.py
│   │           │   │   │   ├── errors.py
│   │           │   │   │   ├── file_proxy.py
│   │           │   │   │   ├── filesize.py
│   │           │   │   │   ├── highlighter.py
│   │           │   │   │   ├── json.py
│   │           │   │   │   ├── jupyter.py
│   │           │   │   │   ├── layout.py
│   │           │   │   │   ├── live_render.py
│   │           │   │   │   ├── live.py
│   │           │   │   │   ├── logging.py
│   │           │   │   │   ├── markup.py
│   │           │   │   │   ├── measure.py
│   │           │   │   │   ├── padding.py
│   │           │   │   │   ├── pager.py
│   │           │   │   │   ├── palette.py
│   │           │   │   │   ├── panel.py
│   │           │   │   │   ├── pretty.py
│   │           │   │   │   ├── progress_bar.py
│   │           │   │   │   ├── progress.py
│   │           │   │   │   ├── prompt.py
│   │           │   │   │   ├── protocol.py
│   │           │   │   │   ├── py.typed
│   │           │   │   │   ├── region.py
│   │           │   │   │   ├── repr.py
│   │           │   │   │   ├── rule.py
│   │           │   │   │   ├── scope.py
│   │           │   │   │   ├── screen.py
│   │           │   │   │   ├── segment.py
│   │           │   │   │   ├── spinner.py
│   │           │   │   │   ├── status.py
│   │           │   │   │   ├── style.py
│   │           │   │   │   ├── styled.py
│   │           │   │   │   ├── syntax.py
│   │           │   │   │   ├── table.py
│   │           │   │   │   ├── terminal_theme.py
│   │           │   │   │   ├── text.py
│   │           │   │   │   ├── theme.py
│   │           │   │   │   ├── themes.py
│   │           │   │   │   ├── traceback.py
│   │           │   │   │   └── tree.py
│   │           │   │   ├── tomli
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _parser.cpython-312.pyc
│   │           │   │   │   │   ├── _re.cpython-312.pyc
│   │           │   │   │   │   └── _types.cpython-312.pyc
│   │           │   │   │   ├── _parser.py
│   │           │   │   │   ├── _re.py
│   │           │   │   │   ├── _types.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── truststore
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _api.cpython-312.pyc
│   │           │   │   │   │   ├── _macos.cpython-312.pyc
│   │           │   │   │   │   ├── _openssl.cpython-312.pyc
│   │           │   │   │   │   ├── _ssl_constants.cpython-312.pyc
│   │           │   │   │   │   └── _windows.cpython-312.pyc
│   │           │   │   │   ├── _api.py
│   │           │   │   │   ├── _macos.py
│   │           │   │   │   ├── _openssl.py
│   │           │   │   │   ├── _ssl_constants.py
│   │           │   │   │   ├── _windows.py
│   │           │   │   │   └── py.typed
│   │           │   │   ├── typing_extensions.py
│   │           │   │   ├── urllib3
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── _collections.cpython-312.pyc
│   │           │   │   │   │   ├── _version.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   │   ├── fields.cpython-312.pyc
│   │           │   │   │   │   ├── filepost.cpython-312.pyc
│   │           │   │   │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── _collections.py
│   │           │   │   │   ├── _version.py
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── connectionpool.py
│   │           │   │   │   ├── contrib
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   ├── _appengine_environ.cpython-312.pyc
│   │           │   │   │   │   │   ├── appengine.cpython-312.pyc
│   │           │   │   │   │   │   ├── ntlmpool.cpython-312.pyc
│   │           │   │   │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   │   │   ├── securetransport.cpython-312.pyc
│   │           │   │   │   │   │   └── socks.cpython-312.pyc
│   │           │   │   │   │   ├── _appengine_environ.py
│   │           │   │   │   │   ├── _securetransport
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── bindings.cpython-312.pyc
│   │           │   │   │   │   │   │   └── low_level.cpython-312.pyc
│   │           │   │   │   │   │   ├── bindings.py
│   │           │   │   │   │   │   └── low_level.py
│   │           │   │   │   │   ├── appengine.py
│   │           │   │   │   │   ├── ntlmpool.py
│   │           │   │   │   │   ├── pyopenssl.py
│   │           │   │   │   │   ├── securetransport.py
│   │           │   │   │   │   └── socks.py
│   │           │   │   │   ├── exceptions.py
│   │           │   │   │   ├── fields.py
│   │           │   │   │   ├── filepost.py
│   │           │   │   │   ├── packages
│   │           │   │   │   │   ├── __init__.py
│   │           │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   └── six.cpython-312.pyc
│   │           │   │   │   │   ├── backports
│   │           │   │   │   │   │   ├── __init__.py
│   │           │   │   │   │   │   ├── __pycache__
│   │           │   │   │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   │   │   ├── makefile.cpython-312.pyc
│   │           │   │   │   │   │   │   └── weakref_finalize.cpython-312.pyc
│   │           │   │   │   │   │   ├── makefile.py
│   │           │   │   │   │   │   └── weakref_finalize.py
│   │           │   │   │   │   └── six.py
│   │           │   │   │   ├── poolmanager.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   ├── response.py
│   │           │   │   │   └── util
│   │           │   │   │       ├── __init__.py
│   │           │   │   │       ├── __pycache__
│   │           │   │   │       │   ├── __init__.cpython-312.pyc
│   │           │   │   │       │   ├── connection.cpython-312.pyc
│   │           │   │   │       │   ├── proxy.cpython-312.pyc
│   │           │   │   │       │   ├── queue.cpython-312.pyc
│   │           │   │   │       │   ├── request.cpython-312.pyc
│   │           │   │   │       │   ├── response.cpython-312.pyc
│   │           │   │   │       │   ├── retry.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_.cpython-312.pyc
│   │           │   │   │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │   │   │       │   ├── ssltransport.cpython-312.pyc
│   │           │   │   │       │   ├── timeout.cpython-312.pyc
│   │           │   │   │       │   ├── url.cpython-312.pyc
│   │           │   │   │       │   └── wait.cpython-312.pyc
│   │           │   │   │       ├── connection.py
│   │           │   │   │       ├── proxy.py
│   │           │   │   │       ├── queue.py
│   │           │   │   │       ├── request.py
│   │           │   │   │       ├── response.py
│   │           │   │   │       ├── retry.py
│   │           │   │   │       ├── ssl_.py
│   │           │   │   │       ├── ssl_match_hostname.py
│   │           │   │   │       ├── ssltransport.py
│   │           │   │   │       ├── timeout.py
│   │           │   │   │       ├── url.py
│   │           │   │   │       └── wait.py
│   │           │   │   └── vendor.txt
│   │           │   └── py.typed
│   │           ├── pip-24.2.dist-info
│   │           │   ├── AUTHORS.txt
│   │           │   ├── entry_points.txt
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── requests
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __version__.cpython-312.pyc
│   │           │   │   ├── _internal_utils.cpython-312.pyc
│   │           │   │   ├── adapters.cpython-312.pyc
│   │           │   │   ├── api.cpython-312.pyc
│   │           │   │   ├── auth.cpython-312.pyc
│   │           │   │   ├── certs.cpython-312.pyc
│   │           │   │   ├── compat.cpython-312.pyc
│   │           │   │   ├── cookies.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── help.cpython-312.pyc
│   │           │   │   ├── hooks.cpython-312.pyc
│   │           │   │   ├── models.cpython-312.pyc
│   │           │   │   ├── packages.cpython-312.pyc
│   │           │   │   ├── sessions.cpython-312.pyc
│   │           │   │   ├── status_codes.cpython-312.pyc
│   │           │   │   ├── structures.cpython-312.pyc
│   │           │   │   └── utils.cpython-312.pyc
│   │           │   ├── __version__.py
│   │           │   ├── _internal_utils.py
│   │           │   ├── adapters.py
│   │           │   ├── api.py
│   │           │   ├── auth.py
│   │           │   ├── certs.py
│   │           │   ├── compat.py
│   │           │   ├── cookies.py
│   │           │   ├── exceptions.py
│   │           │   ├── help.py
│   │           │   ├── hooks.py
│   │           │   ├── models.py
│   │           │   ├── packages.py
│   │           │   ├── sessions.py
│   │           │   ├── status_codes.py
│   │           │   ├── structures.py
│   │           │   └── utils.py
│   │           ├── requests-2.32.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── soupsieve
│   │           │   ├── __init__.py
│   │           │   ├── __meta__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── __meta__.cpython-312.pyc
│   │           │   │   ├── css_match.cpython-312.pyc
│   │           │   │   ├── css_parser.cpython-312.pyc
│   │           │   │   ├── css_types.cpython-312.pyc
│   │           │   │   ├── pretty.cpython-312.pyc
│   │           │   │   └── util.cpython-312.pyc
│   │           │   ├── css_match.py
│   │           │   ├── css_parser.py
│   │           │   ├── css_types.py
│   │           │   ├── pretty.py
│   │           │   ├── py.typed
│   │           │   └── util.py
│   │           ├── soupsieve-2.6.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.md
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── urllib3
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _base_connection.cpython-312.pyc
│   │           │   │   ├── _collections.cpython-312.pyc
│   │           │   │   ├── _request_methods.cpython-312.pyc
│   │           │   │   ├── _version.cpython-312.pyc
│   │           │   │   ├── connection.cpython-312.pyc
│   │           │   │   ├── connectionpool.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── fields.cpython-312.pyc
│   │           │   │   ├── filepost.cpython-312.pyc
│   │           │   │   ├── poolmanager.cpython-312.pyc
│   │           │   │   └── response.cpython-312.pyc
│   │           │   ├── _base_connection.py
│   │           │   ├── _collections.py
│   │           │   ├── _request_methods.py
│   │           │   ├── _version.py
│   │           │   ├── connection.py
│   │           │   ├── connectionpool.py
│   │           │   ├── contrib
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── pyopenssl.cpython-312.pyc
│   │           │   │   │   └── socks.cpython-312.pyc
│   │           │   │   ├── emscripten
│   │           │   │   │   ├── __init__.py
│   │           │   │   │   ├── __pycache__
│   │           │   │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   │   ├── fetch.cpython-312.pyc
│   │           │   │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   │   └── response.cpython-312.pyc
│   │           │   │   │   ├── connection.py
│   │           │   │   │   ├── emscripten_fetch_worker.js
│   │           │   │   │   ├── fetch.py
│   │           │   │   │   ├── request.py
│   │           │   │   │   └── response.py
│   │           │   │   ├── pyopenssl.py
│   │           │   │   └── socks.py
│   │           │   ├── exceptions.py
│   │           │   ├── fields.py
│   │           │   ├── filepost.py
│   │           │   ├── http2
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── connection.cpython-312.pyc
│   │           │   │   │   └── probe.cpython-312.pyc
│   │           │   │   ├── connection.py
│   │           │   │   └── probe.py
│   │           │   ├── poolmanager.py
│   │           │   ├── py.typed
│   │           │   ├── response.py
│   │           │   └── util
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   ├── __init__.cpython-312.pyc
│   │           │       │   ├── connection.cpython-312.pyc
│   │           │       │   ├── proxy.cpython-312.pyc
│   │           │       │   ├── request.cpython-312.pyc
│   │           │       │   ├── response.cpython-312.pyc
│   │           │       │   ├── retry.cpython-312.pyc
│   │           │       │   ├── ssl_.cpython-312.pyc
│   │           │       │   ├── ssl_match_hostname.cpython-312.pyc
│   │           │       │   ├── ssltransport.cpython-312.pyc
│   │           │       │   ├── timeout.cpython-312.pyc
│   │           │       │   ├── url.cpython-312.pyc
│   │           │       │   ├── util.cpython-312.pyc
│   │           │       │   └── wait.cpython-312.pyc
│   │           │       ├── connection.py
│   │           │       ├── proxy.py
│   │           │       ├── request.py
│   │           │       ├── response.py
│   │           │       ├── retry.py
│   │           │       ├── ssl_.py
│   │           │       ├── ssl_match_hostname.py
│   │           │       ├── ssltransport.py
│   │           │       ├── timeout.py
│   │           │       ├── url.py
│   │           │       ├── util.py
│   │           │       └── wait.py
│   │           ├── urllib3-2.2.3.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── licenses
│   │           │   │   └── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   └── WHEEL
│   │           ├── useragent
│   │           │   ├── __init__.py
│   │           │   ├── __init__.pyc
│   │           │   ├── __pycache__
│   │           │   │   └── __init__.cpython-312.pyc
│   │           │   ├── resources
│   │           │   │   └── user_agent_data.json
│   │           │   └── test
│   │           │       ├── __init__.py
│   │           │       ├── __pycache__
│   │           │       │   └── __init__.cpython-312.pyc
│   │           │       ├── test_additional_os.json
│   │           │       ├── test_browser.json
│   │           │       ├── test_device.json
│   │           │       ├── test_firefox.json
│   │           │       ├── test_os.json
│   │           │       └── test_pgts_browser.json
│   │           ├── useragent-0.1.1.dist-info
│   │           │   ├── INSTALLER
│   │           │   ├── LICENSE.txt
│   │           │   ├── METADATA
│   │           │   ├── RECORD
│   │           │   ├── REQUESTED
│   │           │   ├── top_level.txt
│   │           │   └── WHEEL
│   │           ├── werkzeug
│   │           │   ├── __init__.py
│   │           │   ├── __pycache__
│   │           │   │   ├── __init__.cpython-312.pyc
│   │           │   │   ├── _internal.cpython-312.pyc
│   │           │   │   ├── _reloader.cpython-312.pyc
│   │           │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   ├── formparser.cpython-312.pyc
│   │           │   │   ├── http.cpython-312.pyc
│   │           │   │   ├── local.cpython-312.pyc
│   │           │   │   ├── security.cpython-312.pyc
│   │           │   │   ├── serving.cpython-312.pyc
│   │           │   │   ├── test.cpython-312.pyc
│   │           │   │   ├── testapp.cpython-312.pyc
│   │           │   │   ├── urls.cpython-312.pyc
│   │           │   │   ├── user_agent.cpython-312.pyc
│   │           │   │   ├── utils.cpython-312.pyc
│   │           │   │   └── wsgi.cpython-312.pyc
│   │           │   ├── _internal.py
│   │           │   ├── _reloader.py
│   │           │   ├── datastructures
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── accept.cpython-312.pyc
│   │           │   │   │   ├── auth.cpython-312.pyc
│   │           │   │   │   ├── cache_control.cpython-312.pyc
│   │           │   │   │   ├── csp.cpython-312.pyc
│   │           │   │   │   ├── etag.cpython-312.pyc
│   │           │   │   │   ├── file_storage.cpython-312.pyc
│   │           │   │   │   ├── headers.cpython-312.pyc
│   │           │   │   │   ├── mixins.cpython-312.pyc
│   │           │   │   │   ├── range.cpython-312.pyc
│   │           │   │   │   └── structures.cpython-312.pyc
│   │           │   │   ├── accept.py
│   │           │   │   ├── accept.pyi
│   │           │   │   ├── auth.py
│   │           │   │   ├── cache_control.py
│   │           │   │   ├── cache_control.pyi
│   │           │   │   ├── csp.py
│   │           │   │   ├── csp.pyi
│   │           │   │   ├── etag.py
│   │           │   │   ├── etag.pyi
│   │           │   │   ├── file_storage.py
│   │           │   │   ├── file_storage.pyi
│   │           │   │   ├── headers.py
│   │           │   │   ├── headers.pyi
│   │           │   │   ├── mixins.py
│   │           │   │   ├── mixins.pyi
│   │           │   │   ├── range.py
│   │           │   │   ├── range.pyi
│   │           │   │   ├── structures.py
│   │           │   │   └── structures.pyi
│   │           │   ├── debug
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── console.cpython-312.pyc
│   │           │   │   │   ├── repr.cpython-312.pyc
│   │           │   │   │   └── tbtools.cpython-312.pyc
│   │           │   │   ├── console.py
│   │           │   │   ├── repr.py
│   │           │   │   ├── shared
│   │           │   │   │   ├── console.png
│   │           │   │   │   ├── debugger.js
│   │           │   │   │   ├── ICON_LICENSE.md
│   │           │   │   │   ├── less.png
│   │           │   │   │   ├── more.png
│   │           │   │   │   └── style.css
│   │           │   │   └── tbtools.py
│   │           │   ├── exceptions.py
│   │           │   ├── formparser.py
│   │           │   ├── http.py
│   │           │   ├── local.py
│   │           │   ├── middleware
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── dispatcher.cpython-312.pyc
│   │           │   │   │   ├── http_proxy.cpython-312.pyc
│   │           │   │   │   ├── lint.cpython-312.pyc
│   │           │   │   │   ├── profiler.cpython-312.pyc
│   │           │   │   │   ├── proxy_fix.cpython-312.pyc
│   │           │   │   │   └── shared_data.cpython-312.pyc
│   │           │   │   ├── dispatcher.py
│   │           │   │   ├── http_proxy.py
│   │           │   │   ├── lint.py
│   │           │   │   ├── profiler.py
│   │           │   │   ├── proxy_fix.py
│   │           │   │   └── shared_data.py
│   │           │   ├── py.typed
│   │           │   ├── routing
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── converters.cpython-312.pyc
│   │           │   │   │   ├── exceptions.cpython-312.pyc
│   │           │   │   │   ├── map.cpython-312.pyc
│   │           │   │   │   ├── matcher.cpython-312.pyc
│   │           │   │   │   └── rules.cpython-312.pyc
│   │           │   │   ├── converters.py
│   │           │   │   ├── exceptions.py
│   │           │   │   ├── map.py
│   │           │   │   ├── matcher.py
│   │           │   │   └── rules.py
│   │           │   ├── sansio
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── http.cpython-312.pyc
│   │           │   │   │   ├── multipart.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   ├── response.cpython-312.pyc
│   │           │   │   │   └── utils.cpython-312.pyc
│   │           │   │   ├── http.py
│   │           │   │   ├── multipart.py
│   │           │   │   ├── request.py
│   │           │   │   ├── response.py
│   │           │   │   └── utils.py
│   │           │   ├── security.py
│   │           │   ├── serving.py
│   │           │   ├── test.py
│   │           │   ├── testapp.py
│   │           │   ├── urls.py
│   │           │   ├── user_agent.py
│   │           │   ├── utils.py
│   │           │   ├── wrappers
│   │           │   │   ├── __init__.py
│   │           │   │   ├── __pycache__
│   │           │   │   │   ├── __init__.cpython-312.pyc
│   │           │   │   │   ├── request.cpython-312.pyc
│   │           │   │   │   └── response.cpython-312.pyc
│   │           │   │   ├── request.py
│   │           │   │   └── response.py
│   │           │   └── wsgi.py
│   │           └── werkzeug-3.0.4.dist-info
│   │               ├── INSTALLER
│   │               ├── LICENSE.txt
│   │               ├── METADATA
│   │               ├── RECORD
│   │               └── WHEEL
│   ├── pyvenv.cfg
│   ├── static
│   │   └── styles.css
│   ├── templates
│   │   └── index.html
│   └── test.py
├── cline_config.json
├── mcp_server.py
├── README.md
├── search_results.json
├── settings.json
└── test_files
    ├── text1.txt
    └── text2.txt
```

# Files

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_vendor/packaging/version.py:
--------------------------------------------------------------------------------

```python
  1 | # This file is dual licensed under the terms of the Apache License, Version
  2 | # 2.0, and the BSD License. See the LICENSE file in the root of this repository
  3 | # for complete details.
  4 | """
  5 | .. testsetup::
  6 | 
  7 |     from pip._vendor.packaging.version import parse, Version
  8 | """
  9 | 
 10 | from __future__ import annotations
 11 | 
 12 | import itertools
 13 | import re
 14 | from typing import Any, Callable, NamedTuple, SupportsInt, Tuple, Union
 15 | 
 16 | from ._structures import Infinity, InfinityType, NegativeInfinity, NegativeInfinityType
 17 | 
 18 | __all__ = ["VERSION_PATTERN", "parse", "Version", "InvalidVersion"]
 19 | 
 20 | LocalType = Tuple[Union[int, str], ...]
 21 | 
 22 | CmpPrePostDevType = Union[InfinityType, NegativeInfinityType, Tuple[str, int]]
 23 | CmpLocalType = Union[
 24 |     NegativeInfinityType,
 25 |     Tuple[Union[Tuple[int, str], Tuple[NegativeInfinityType, Union[int, str]]], ...],
 26 | ]
 27 | CmpKey = Tuple[
 28 |     int,
 29 |     Tuple[int, ...],
 30 |     CmpPrePostDevType,
 31 |     CmpPrePostDevType,
 32 |     CmpPrePostDevType,
 33 |     CmpLocalType,
 34 | ]
 35 | VersionComparisonMethod = Callable[[CmpKey, CmpKey], bool]
 36 | 
 37 | 
 38 | class _Version(NamedTuple):
 39 |     epoch: int
 40 |     release: tuple[int, ...]
 41 |     dev: tuple[str, int] | None
 42 |     pre: tuple[str, int] | None
 43 |     post: tuple[str, int] | None
 44 |     local: LocalType | None
 45 | 
 46 | 
 47 | def parse(version: str) -> Version:
 48 |     """Parse the given version string.
 49 | 
 50 |     >>> parse('1.0.dev1')
 51 |     <Version('1.0.dev1')>
 52 | 
 53 |     :param version: The version string to parse.
 54 |     :raises InvalidVersion: When the version string is not a valid version.
 55 |     """
 56 |     return Version(version)
 57 | 
 58 | 
 59 | class InvalidVersion(ValueError):
 60 |     """Raised when a version string is not a valid version.
 61 | 
 62 |     >>> Version("invalid")
 63 |     Traceback (most recent call last):
 64 |         ...
 65 |     packaging.version.InvalidVersion: Invalid version: 'invalid'
 66 |     """
 67 | 
 68 | 
 69 | class _BaseVersion:
 70 |     _key: tuple[Any, ...]
 71 | 
 72 |     def __hash__(self) -> int:
 73 |         return hash(self._key)
 74 | 
 75 |     # Please keep the duplicated `isinstance` check
 76 |     # in the six comparisons hereunder
 77 |     # unless you find a way to avoid adding overhead function calls.
 78 |     def __lt__(self, other: _BaseVersion) -> bool:
 79 |         if not isinstance(other, _BaseVersion):
 80 |             return NotImplemented
 81 | 
 82 |         return self._key < other._key
 83 | 
 84 |     def __le__(self, other: _BaseVersion) -> bool:
 85 |         if not isinstance(other, _BaseVersion):
 86 |             return NotImplemented
 87 | 
 88 |         return self._key <= other._key
 89 | 
 90 |     def __eq__(self, other: object) -> bool:
 91 |         if not isinstance(other, _BaseVersion):
 92 |             return NotImplemented
 93 | 
 94 |         return self._key == other._key
 95 | 
 96 |     def __ge__(self, other: _BaseVersion) -> bool:
 97 |         if not isinstance(other, _BaseVersion):
 98 |             return NotImplemented
 99 | 
100 |         return self._key >= other._key
101 | 
102 |     def __gt__(self, other: _BaseVersion) -> bool:
103 |         if not isinstance(other, _BaseVersion):
104 |             return NotImplemented
105 | 
106 |         return self._key > other._key
107 | 
108 |     def __ne__(self, other: object) -> bool:
109 |         if not isinstance(other, _BaseVersion):
110 |             return NotImplemented
111 | 
112 |         return self._key != other._key
113 | 
114 | 
115 | # Deliberately not anchored to the start and end of the string, to make it
116 | # easier for 3rd party code to reuse
117 | _VERSION_PATTERN = r"""
118 |     v?
119 |     (?:
120 |         (?:(?P<epoch>[0-9]+)!)?                           # epoch
121 |         (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
122 |         (?P<pre>                                          # pre-release
123 |             [-_\.]?
124 |             (?P<pre_l>alpha|a|beta|b|preview|pre|c|rc)
125 |             [-_\.]?
126 |             (?P<pre_n>[0-9]+)?
127 |         )?
128 |         (?P<post>                                         # post release
129 |             (?:-(?P<post_n1>[0-9]+))
130 |             |
131 |             (?:
132 |                 [-_\.]?
133 |                 (?P<post_l>post|rev|r)
134 |                 [-_\.]?
135 |                 (?P<post_n2>[0-9]+)?
136 |             )
137 |         )?
138 |         (?P<dev>                                          # dev release
139 |             [-_\.]?
140 |             (?P<dev_l>dev)
141 |             [-_\.]?
142 |             (?P<dev_n>[0-9]+)?
143 |         )?
144 |     )
145 |     (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
146 | """
147 | 
148 | VERSION_PATTERN = _VERSION_PATTERN
149 | """
150 | A string containing the regular expression used to match a valid version.
151 | 
152 | The pattern is not anchored at either end, and is intended for embedding in larger
153 | expressions (for example, matching a version number as part of a file name). The
154 | regular expression should be compiled with the ``re.VERBOSE`` and ``re.IGNORECASE``
155 | flags set.
156 | 
157 | :meta hide-value:
158 | """
159 | 
160 | 
161 | class Version(_BaseVersion):
162 |     """This class abstracts handling of a project's versions.
163 | 
164 |     A :class:`Version` instance is comparison aware and can be compared and
165 |     sorted using the standard Python interfaces.
166 | 
167 |     >>> v1 = Version("1.0a5")
168 |     >>> v2 = Version("1.0")
169 |     >>> v1
170 |     <Version('1.0a5')>
171 |     >>> v2
172 |     <Version('1.0')>
173 |     >>> v1 < v2
174 |     True
175 |     >>> v1 == v2
176 |     False
177 |     >>> v1 > v2
178 |     False
179 |     >>> v1 >= v2
180 |     False
181 |     >>> v1 <= v2
182 |     True
183 |     """
184 | 
185 |     _regex = re.compile(r"^\s*" + VERSION_PATTERN + r"\s*$", re.VERBOSE | re.IGNORECASE)
186 |     _key: CmpKey
187 | 
188 |     def __init__(self, version: str) -> None:
189 |         """Initialize a Version object.
190 | 
191 |         :param version:
192 |             The string representation of a version which will be parsed and normalized
193 |             before use.
194 |         :raises InvalidVersion:
195 |             If the ``version`` does not conform to PEP 440 in any way then this
196 |             exception will be raised.
197 |         """
198 | 
199 |         # Validate the version and parse it into pieces
200 |         match = self._regex.search(version)
201 |         if not match:
202 |             raise InvalidVersion(f"Invalid version: '{version}'")
203 | 
204 |         # Store the parsed out pieces of the version
205 |         self._version = _Version(
206 |             epoch=int(match.group("epoch")) if match.group("epoch") else 0,
207 |             release=tuple(int(i) for i in match.group("release").split(".")),
208 |             pre=_parse_letter_version(match.group("pre_l"), match.group("pre_n")),
209 |             post=_parse_letter_version(
210 |                 match.group("post_l"), match.group("post_n1") or match.group("post_n2")
211 |             ),
212 |             dev=_parse_letter_version(match.group("dev_l"), match.group("dev_n")),
213 |             local=_parse_local_version(match.group("local")),
214 |         )
215 | 
216 |         # Generate a key which will be used for sorting
217 |         self._key = _cmpkey(
218 |             self._version.epoch,
219 |             self._version.release,
220 |             self._version.pre,
221 |             self._version.post,
222 |             self._version.dev,
223 |             self._version.local,
224 |         )
225 | 
226 |     def __repr__(self) -> str:
227 |         """A representation of the Version that shows all internal state.
228 | 
229 |         >>> Version('1.0.0')
230 |         <Version('1.0.0')>
231 |         """
232 |         return f"<Version('{self}')>"
233 | 
234 |     def __str__(self) -> str:
235 |         """A string representation of the version that can be rounded-tripped.
236 | 
237 |         >>> str(Version("1.0a5"))
238 |         '1.0a5'
239 |         """
240 |         parts = []
241 | 
242 |         # Epoch
243 |         if self.epoch != 0:
244 |             parts.append(f"{self.epoch}!")
245 | 
246 |         # Release segment
247 |         parts.append(".".join(str(x) for x in self.release))
248 | 
249 |         # Pre-release
250 |         if self.pre is not None:
251 |             parts.append("".join(str(x) for x in self.pre))
252 | 
253 |         # Post-release
254 |         if self.post is not None:
255 |             parts.append(f".post{self.post}")
256 | 
257 |         # Development release
258 |         if self.dev is not None:
259 |             parts.append(f".dev{self.dev}")
260 | 
261 |         # Local version segment
262 |         if self.local is not None:
263 |             parts.append(f"+{self.local}")
264 | 
265 |         return "".join(parts)
266 | 
267 |     @property
268 |     def epoch(self) -> int:
269 |         """The epoch of the version.
270 | 
271 |         >>> Version("2.0.0").epoch
272 |         0
273 |         >>> Version("1!2.0.0").epoch
274 |         1
275 |         """
276 |         return self._version.epoch
277 | 
278 |     @property
279 |     def release(self) -> tuple[int, ...]:
280 |         """The components of the "release" segment of the version.
281 | 
282 |         >>> Version("1.2.3").release
283 |         (1, 2, 3)
284 |         >>> Version("2.0.0").release
285 |         (2, 0, 0)
286 |         >>> Version("1!2.0.0.post0").release
287 |         (2, 0, 0)
288 | 
289 |         Includes trailing zeroes but not the epoch or any pre-release / development /
290 |         post-release suffixes.
291 |         """
292 |         return self._version.release
293 | 
294 |     @property
295 |     def pre(self) -> tuple[str, int] | None:
296 |         """The pre-release segment of the version.
297 | 
298 |         >>> print(Version("1.2.3").pre)
299 |         None
300 |         >>> Version("1.2.3a1").pre
301 |         ('a', 1)
302 |         >>> Version("1.2.3b1").pre
303 |         ('b', 1)
304 |         >>> Version("1.2.3rc1").pre
305 |         ('rc', 1)
306 |         """
307 |         return self._version.pre
308 | 
309 |     @property
310 |     def post(self) -> int | None:
311 |         """The post-release number of the version.
312 | 
313 |         >>> print(Version("1.2.3").post)
314 |         None
315 |         >>> Version("1.2.3.post1").post
316 |         1
317 |         """
318 |         return self._version.post[1] if self._version.post else None
319 | 
320 |     @property
321 |     def dev(self) -> int | None:
322 |         """The development number of the version.
323 | 
324 |         >>> print(Version("1.2.3").dev)
325 |         None
326 |         >>> Version("1.2.3.dev1").dev
327 |         1
328 |         """
329 |         return self._version.dev[1] if self._version.dev else None
330 | 
331 |     @property
332 |     def local(self) -> str | None:
333 |         """The local version segment of the version.
334 | 
335 |         >>> print(Version("1.2.3").local)
336 |         None
337 |         >>> Version("1.2.3+abc").local
338 |         'abc'
339 |         """
340 |         if self._version.local:
341 |             return ".".join(str(x) for x in self._version.local)
342 |         else:
343 |             return None
344 | 
345 |     @property
346 |     def public(self) -> str:
347 |         """The public portion of the version.
348 | 
349 |         >>> Version("1.2.3").public
350 |         '1.2.3'
351 |         >>> Version("1.2.3+abc").public
352 |         '1.2.3'
353 |         >>> Version("1.2.3+abc.dev1").public
354 |         '1.2.3'
355 |         """
356 |         return str(self).split("+", 1)[0]
357 | 
358 |     @property
359 |     def base_version(self) -> str:
360 |         """The "base version" of the version.
361 | 
362 |         >>> Version("1.2.3").base_version
363 |         '1.2.3'
364 |         >>> Version("1.2.3+abc").base_version
365 |         '1.2.3'
366 |         >>> Version("1!1.2.3+abc.dev1").base_version
367 |         '1!1.2.3'
368 | 
369 |         The "base version" is the public version of the project without any pre or post
370 |         release markers.
371 |         """
372 |         parts = []
373 | 
374 |         # Epoch
375 |         if self.epoch != 0:
376 |             parts.append(f"{self.epoch}!")
377 | 
378 |         # Release segment
379 |         parts.append(".".join(str(x) for x in self.release))
380 | 
381 |         return "".join(parts)
382 | 
383 |     @property
384 |     def is_prerelease(self) -> bool:
385 |         """Whether this version is a pre-release.
386 | 
387 |         >>> Version("1.2.3").is_prerelease
388 |         False
389 |         >>> Version("1.2.3a1").is_prerelease
390 |         True
391 |         >>> Version("1.2.3b1").is_prerelease
392 |         True
393 |         >>> Version("1.2.3rc1").is_prerelease
394 |         True
395 |         >>> Version("1.2.3dev1").is_prerelease
396 |         True
397 |         """
398 |         return self.dev is not None or self.pre is not None
399 | 
400 |     @property
401 |     def is_postrelease(self) -> bool:
402 |         """Whether this version is a post-release.
403 | 
404 |         >>> Version("1.2.3").is_postrelease
405 |         False
406 |         >>> Version("1.2.3.post1").is_postrelease
407 |         True
408 |         """
409 |         return self.post is not None
410 | 
411 |     @property
412 |     def is_devrelease(self) -> bool:
413 |         """Whether this version is a development release.
414 | 
415 |         >>> Version("1.2.3").is_devrelease
416 |         False
417 |         >>> Version("1.2.3.dev1").is_devrelease
418 |         True
419 |         """
420 |         return self.dev is not None
421 | 
422 |     @property
423 |     def major(self) -> int:
424 |         """The first item of :attr:`release` or ``0`` if unavailable.
425 | 
426 |         >>> Version("1.2.3").major
427 |         1
428 |         """
429 |         return self.release[0] if len(self.release) >= 1 else 0
430 | 
431 |     @property
432 |     def minor(self) -> int:
433 |         """The second item of :attr:`release` or ``0`` if unavailable.
434 | 
435 |         >>> Version("1.2.3").minor
436 |         2
437 |         >>> Version("1").minor
438 |         0
439 |         """
440 |         return self.release[1] if len(self.release) >= 2 else 0
441 | 
442 |     @property
443 |     def micro(self) -> int:
444 |         """The third item of :attr:`release` or ``0`` if unavailable.
445 | 
446 |         >>> Version("1.2.3").micro
447 |         3
448 |         >>> Version("1").micro
449 |         0
450 |         """
451 |         return self.release[2] if len(self.release) >= 3 else 0
452 | 
453 | 
454 | def _parse_letter_version(
455 |     letter: str | None, number: str | bytes | SupportsInt | None
456 | ) -> tuple[str, int] | None:
457 |     if letter:
458 |         # We consider there to be an implicit 0 in a pre-release if there is
459 |         # not a numeral associated with it.
460 |         if number is None:
461 |             number = 0
462 | 
463 |         # We normalize any letters to their lower case form
464 |         letter = letter.lower()
465 | 
466 |         # We consider some words to be alternate spellings of other words and
467 |         # in those cases we want to normalize the spellings to our preferred
468 |         # spelling.
469 |         if letter == "alpha":
470 |             letter = "a"
471 |         elif letter == "beta":
472 |             letter = "b"
473 |         elif letter in ["c", "pre", "preview"]:
474 |             letter = "rc"
475 |         elif letter in ["rev", "r"]:
476 |             letter = "post"
477 | 
478 |         return letter, int(number)
479 |     if not letter and number:
480 |         # We assume if we are given a number, but we are not given a letter
481 |         # then this is using the implicit post release syntax (e.g. 1.0-1)
482 |         letter = "post"
483 | 
484 |         return letter, int(number)
485 | 
486 |     return None
487 | 
488 | 
489 | _local_version_separators = re.compile(r"[\._-]")
490 | 
491 | 
492 | def _parse_local_version(local: str | None) -> LocalType | None:
493 |     """
494 |     Takes a string like abc.1.twelve and turns it into ("abc", 1, "twelve").
495 |     """
496 |     if local is not None:
497 |         return tuple(
498 |             part.lower() if not part.isdigit() else int(part)
499 |             for part in _local_version_separators.split(local)
500 |         )
501 |     return None
502 | 
503 | 
504 | def _cmpkey(
505 |     epoch: int,
506 |     release: tuple[int, ...],
507 |     pre: tuple[str, int] | None,
508 |     post: tuple[str, int] | None,
509 |     dev: tuple[str, int] | None,
510 |     local: LocalType | None,
511 | ) -> CmpKey:
512 |     # When we compare a release version, we want to compare it with all of the
513 |     # trailing zeros removed. So we'll use a reverse the list, drop all the now
514 |     # leading zeros until we come to something non zero, then take the rest
515 |     # re-reverse it back into the correct order and make it a tuple and use
516 |     # that for our sorting key.
517 |     _release = tuple(
518 |         reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release))))
519 |     )
520 | 
521 |     # We need to "trick" the sorting algorithm to put 1.0.dev0 before 1.0a0.
522 |     # We'll do this by abusing the pre segment, but we _only_ want to do this
523 |     # if there is not a pre or a post segment. If we have one of those then
524 |     # the normal sorting rules will handle this case correctly.
525 |     if pre is None and post is None and dev is not None:
526 |         _pre: CmpPrePostDevType = NegativeInfinity
527 |     # Versions without a pre-release (except as noted above) should sort after
528 |     # those with one.
529 |     elif pre is None:
530 |         _pre = Infinity
531 |     else:
532 |         _pre = pre
533 | 
534 |     # Versions without a post segment should sort before those with one.
535 |     if post is None:
536 |         _post: CmpPrePostDevType = NegativeInfinity
537 | 
538 |     else:
539 |         _post = post
540 | 
541 |     # Versions without a development segment should sort after those with one.
542 |     if dev is None:
543 |         _dev: CmpPrePostDevType = Infinity
544 | 
545 |     else:
546 |         _dev = dev
547 | 
548 |     if local is None:
549 |         # Versions without a local segment should sort before those with one.
550 |         _local: CmpLocalType = NegativeInfinity
551 |     else:
552 |         # Versions with a local segment need that segment parsed to implement
553 |         # the sorting rules in PEP440.
554 |         # - Alpha numeric segments sort before numeric segments
555 |         # - Alpha numeric segments sort lexicographically
556 |         # - Numeric segments sort numerically
557 |         # - Shorter versions sort before longer versions when the prefixes
558 |         #   match exactly
559 |         _local = tuple(
560 |             (i, "") if isinstance(i, int) else (NegativeInfinity, i) for i in local
561 |         )
562 | 
563 |     return epoch, _release, _pre, _post, _dev, _local
564 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/pip/_internal/index/collector.py:
--------------------------------------------------------------------------------

```python
  1 | """
  2 | The main purpose of this module is to expose LinkCollector.collect_sources().
  3 | """
  4 | 
  5 | import collections
  6 | import email.message
  7 | import functools
  8 | import itertools
  9 | import json
 10 | import logging
 11 | import os
 12 | import urllib.parse
 13 | import urllib.request
 14 | from dataclasses import dataclass
 15 | from html.parser import HTMLParser
 16 | from optparse import Values
 17 | from typing import (
 18 |     Callable,
 19 |     Dict,
 20 |     Iterable,
 21 |     List,
 22 |     MutableMapping,
 23 |     NamedTuple,
 24 |     Optional,
 25 |     Protocol,
 26 |     Sequence,
 27 |     Tuple,
 28 |     Union,
 29 | )
 30 | 
 31 | from pip._vendor import requests
 32 | from pip._vendor.requests import Response
 33 | from pip._vendor.requests.exceptions import RetryError, SSLError
 34 | 
 35 | from pip._internal.exceptions import NetworkConnectionError
 36 | from pip._internal.models.link import Link
 37 | from pip._internal.models.search_scope import SearchScope
 38 | from pip._internal.network.session import PipSession
 39 | from pip._internal.network.utils import raise_for_status
 40 | from pip._internal.utils.filetypes import is_archive_file
 41 | from pip._internal.utils.misc import redact_auth_from_url
 42 | from pip._internal.vcs import vcs
 43 | 
 44 | from .sources import CandidatesFromPage, LinkSource, build_source
 45 | 
 46 | logger = logging.getLogger(__name__)
 47 | 
 48 | ResponseHeaders = MutableMapping[str, str]
 49 | 
 50 | 
 51 | def _match_vcs_scheme(url: str) -> Optional[str]:
 52 |     """Look for VCS schemes in the URL.
 53 | 
 54 |     Returns the matched VCS scheme, or None if there's no match.
 55 |     """
 56 |     for scheme in vcs.schemes:
 57 |         if url.lower().startswith(scheme) and url[len(scheme)] in "+:":
 58 |             return scheme
 59 |     return None
 60 | 
 61 | 
 62 | class _NotAPIContent(Exception):
 63 |     def __init__(self, content_type: str, request_desc: str) -> None:
 64 |         super().__init__(content_type, request_desc)
 65 |         self.content_type = content_type
 66 |         self.request_desc = request_desc
 67 | 
 68 | 
 69 | def _ensure_api_header(response: Response) -> None:
 70 |     """
 71 |     Check the Content-Type header to ensure the response contains a Simple
 72 |     API Response.
 73 | 
 74 |     Raises `_NotAPIContent` if the content type is not a valid content-type.
 75 |     """
 76 |     content_type = response.headers.get("Content-Type", "Unknown")
 77 | 
 78 |     content_type_l = content_type.lower()
 79 |     if content_type_l.startswith(
 80 |         (
 81 |             "text/html",
 82 |             "application/vnd.pypi.simple.v1+html",
 83 |             "application/vnd.pypi.simple.v1+json",
 84 |         )
 85 |     ):
 86 |         return
 87 | 
 88 |     raise _NotAPIContent(content_type, response.request.method)
 89 | 
 90 | 
 91 | class _NotHTTP(Exception):
 92 |     pass
 93 | 
 94 | 
 95 | def _ensure_api_response(url: str, session: PipSession) -> None:
 96 |     """
 97 |     Send a HEAD request to the URL, and ensure the response contains a simple
 98 |     API Response.
 99 | 
100 |     Raises `_NotHTTP` if the URL is not available for a HEAD request, or
101 |     `_NotAPIContent` if the content type is not a valid content type.
102 |     """
103 |     scheme, netloc, path, query, fragment = urllib.parse.urlsplit(url)
104 |     if scheme not in {"http", "https"}:
105 |         raise _NotHTTP()
106 | 
107 |     resp = session.head(url, allow_redirects=True)
108 |     raise_for_status(resp)
109 | 
110 |     _ensure_api_header(resp)
111 | 
112 | 
113 | def _get_simple_response(url: str, session: PipSession) -> Response:
114 |     """Access an Simple API response with GET, and return the response.
115 | 
116 |     This consists of three parts:
117 | 
118 |     1. If the URL looks suspiciously like an archive, send a HEAD first to
119 |        check the Content-Type is HTML or Simple API, to avoid downloading a
120 |        large file. Raise `_NotHTTP` if the content type cannot be determined, or
121 |        `_NotAPIContent` if it is not HTML or a Simple API.
122 |     2. Actually perform the request. Raise HTTP exceptions on network failures.
123 |     3. Check the Content-Type header to make sure we got a Simple API response,
124 |        and raise `_NotAPIContent` otherwise.
125 |     """
126 |     if is_archive_file(Link(url).filename):
127 |         _ensure_api_response(url, session=session)
128 | 
129 |     logger.debug("Getting page %s", redact_auth_from_url(url))
130 | 
131 |     resp = session.get(
132 |         url,
133 |         headers={
134 |             "Accept": ", ".join(
135 |                 [
136 |                     "application/vnd.pypi.simple.v1+json",
137 |                     "application/vnd.pypi.simple.v1+html; q=0.1",
138 |                     "text/html; q=0.01",
139 |                 ]
140 |             ),
141 |             # We don't want to blindly returned cached data for
142 |             # /simple/, because authors generally expecting that
143 |             # twine upload && pip install will function, but if
144 |             # they've done a pip install in the last ~10 minutes
145 |             # it won't. Thus by setting this to zero we will not
146 |             # blindly use any cached data, however the benefit of
147 |             # using max-age=0 instead of no-cache, is that we will
148 |             # still support conditional requests, so we will still
149 |             # minimize traffic sent in cases where the page hasn't
150 |             # changed at all, we will just always incur the round
151 |             # trip for the conditional GET now instead of only
152 |             # once per 10 minutes.
153 |             # For more information, please see pypa/pip#5670.
154 |             "Cache-Control": "max-age=0",
155 |         },
156 |     )
157 |     raise_for_status(resp)
158 | 
159 |     # The check for archives above only works if the url ends with
160 |     # something that looks like an archive. However that is not a
161 |     # requirement of an url. Unless we issue a HEAD request on every
162 |     # url we cannot know ahead of time for sure if something is a
163 |     # Simple API response or not. However we can check after we've
164 |     # downloaded it.
165 |     _ensure_api_header(resp)
166 | 
167 |     logger.debug(
168 |         "Fetched page %s as %s",
169 |         redact_auth_from_url(url),
170 |         resp.headers.get("Content-Type", "Unknown"),
171 |     )
172 | 
173 |     return resp
174 | 
175 | 
176 | def _get_encoding_from_headers(headers: ResponseHeaders) -> Optional[str]:
177 |     """Determine if we have any encoding information in our headers."""
178 |     if headers and "Content-Type" in headers:
179 |         m = email.message.Message()
180 |         m["content-type"] = headers["Content-Type"]
181 |         charset = m.get_param("charset")
182 |         if charset:
183 |             return str(charset)
184 |     return None
185 | 
186 | 
187 | class CacheablePageContent:
188 |     def __init__(self, page: "IndexContent") -> None:
189 |         assert page.cache_link_parsing
190 |         self.page = page
191 | 
192 |     def __eq__(self, other: object) -> bool:
193 |         return isinstance(other, type(self)) and self.page.url == other.page.url
194 | 
195 |     def __hash__(self) -> int:
196 |         return hash(self.page.url)
197 | 
198 | 
199 | class ParseLinks(Protocol):
200 |     def __call__(self, page: "IndexContent") -> Iterable[Link]: ...
201 | 
202 | 
203 | def with_cached_index_content(fn: ParseLinks) -> ParseLinks:
204 |     """
205 |     Given a function that parses an Iterable[Link] from an IndexContent, cache the
206 |     function's result (keyed by CacheablePageContent), unless the IndexContent
207 |     `page` has `page.cache_link_parsing == False`.
208 |     """
209 | 
210 |     @functools.lru_cache(maxsize=None)
211 |     def wrapper(cacheable_page: CacheablePageContent) -> List[Link]:
212 |         return list(fn(cacheable_page.page))
213 | 
214 |     @functools.wraps(fn)
215 |     def wrapper_wrapper(page: "IndexContent") -> List[Link]:
216 |         if page.cache_link_parsing:
217 |             return wrapper(CacheablePageContent(page))
218 |         return list(fn(page))
219 | 
220 |     return wrapper_wrapper
221 | 
222 | 
223 | @with_cached_index_content
224 | def parse_links(page: "IndexContent") -> Iterable[Link]:
225 |     """
226 |     Parse a Simple API's Index Content, and yield its anchor elements as Link objects.
227 |     """
228 | 
229 |     content_type_l = page.content_type.lower()
230 |     if content_type_l.startswith("application/vnd.pypi.simple.v1+json"):
231 |         data = json.loads(page.content)
232 |         for file in data.get("files", []):
233 |             link = Link.from_json(file, page.url)
234 |             if link is None:
235 |                 continue
236 |             yield link
237 |         return
238 | 
239 |     parser = HTMLLinkParser(page.url)
240 |     encoding = page.encoding or "utf-8"
241 |     parser.feed(page.content.decode(encoding))
242 | 
243 |     url = page.url
244 |     base_url = parser.base_url or url
245 |     for anchor in parser.anchors:
246 |         link = Link.from_element(anchor, page_url=url, base_url=base_url)
247 |         if link is None:
248 |             continue
249 |         yield link
250 | 
251 | 
252 | @dataclass(frozen=True)
253 | class IndexContent:
254 |     """Represents one response (or page), along with its URL.
255 | 
256 |     :param encoding: the encoding to decode the given content.
257 |     :param url: the URL from which the HTML was downloaded.
258 |     :param cache_link_parsing: whether links parsed from this page's url
259 |                                should be cached. PyPI index urls should
260 |                                have this set to False, for example.
261 |     """
262 | 
263 |     content: bytes
264 |     content_type: str
265 |     encoding: Optional[str]
266 |     url: str
267 |     cache_link_parsing: bool = True
268 | 
269 |     def __str__(self) -> str:
270 |         return redact_auth_from_url(self.url)
271 | 
272 | 
273 | class HTMLLinkParser(HTMLParser):
274 |     """
275 |     HTMLParser that keeps the first base HREF and a list of all anchor
276 |     elements' attributes.
277 |     """
278 | 
279 |     def __init__(self, url: str) -> None:
280 |         super().__init__(convert_charrefs=True)
281 | 
282 |         self.url: str = url
283 |         self.base_url: Optional[str] = None
284 |         self.anchors: List[Dict[str, Optional[str]]] = []
285 | 
286 |     def handle_starttag(self, tag: str, attrs: List[Tuple[str, Optional[str]]]) -> None:
287 |         if tag == "base" and self.base_url is None:
288 |             href = self.get_href(attrs)
289 |             if href is not None:
290 |                 self.base_url = href
291 |         elif tag == "a":
292 |             self.anchors.append(dict(attrs))
293 | 
294 |     def get_href(self, attrs: List[Tuple[str, Optional[str]]]) -> Optional[str]:
295 |         for name, value in attrs:
296 |             if name == "href":
297 |                 return value
298 |         return None
299 | 
300 | 
301 | def _handle_get_simple_fail(
302 |     link: Link,
303 |     reason: Union[str, Exception],
304 |     meth: Optional[Callable[..., None]] = None,
305 | ) -> None:
306 |     if meth is None:
307 |         meth = logger.debug
308 |     meth("Could not fetch URL %s: %s - skipping", link, reason)
309 | 
310 | 
311 | def _make_index_content(
312 |     response: Response, cache_link_parsing: bool = True
313 | ) -> IndexContent:
314 |     encoding = _get_encoding_from_headers(response.headers)
315 |     return IndexContent(
316 |         response.content,
317 |         response.headers["Content-Type"],
318 |         encoding=encoding,
319 |         url=response.url,
320 |         cache_link_parsing=cache_link_parsing,
321 |     )
322 | 
323 | 
324 | def _get_index_content(link: Link, *, session: PipSession) -> Optional["IndexContent"]:
325 |     url = link.url.split("#", 1)[0]
326 | 
327 |     # Check for VCS schemes that do not support lookup as web pages.
328 |     vcs_scheme = _match_vcs_scheme(url)
329 |     if vcs_scheme:
330 |         logger.warning(
331 |             "Cannot look at %s URL %s because it does not support lookup as web pages.",
332 |             vcs_scheme,
333 |             link,
334 |         )
335 |         return None
336 | 
337 |     # Tack index.html onto file:// URLs that point to directories
338 |     scheme, _, path, _, _, _ = urllib.parse.urlparse(url)
339 |     if scheme == "file" and os.path.isdir(urllib.request.url2pathname(path)):
340 |         # add trailing slash if not present so urljoin doesn't trim
341 |         # final segment
342 |         if not url.endswith("/"):
343 |             url += "/"
344 |         # TODO: In the future, it would be nice if pip supported PEP 691
345 |         #       style responses in the file:// URLs, however there's no
346 |         #       standard file extension for application/vnd.pypi.simple.v1+json
347 |         #       so we'll need to come up with something on our own.
348 |         url = urllib.parse.urljoin(url, "index.html")
349 |         logger.debug(" file: URL is directory, getting %s", url)
350 | 
351 |     try:
352 |         resp = _get_simple_response(url, session=session)
353 |     except _NotHTTP:
354 |         logger.warning(
355 |             "Skipping page %s because it looks like an archive, and cannot "
356 |             "be checked by a HTTP HEAD request.",
357 |             link,
358 |         )
359 |     except _NotAPIContent as exc:
360 |         logger.warning(
361 |             "Skipping page %s because the %s request got Content-Type: %s. "
362 |             "The only supported Content-Types are application/vnd.pypi.simple.v1+json, "
363 |             "application/vnd.pypi.simple.v1+html, and text/html",
364 |             link,
365 |             exc.request_desc,
366 |             exc.content_type,
367 |         )
368 |     except NetworkConnectionError as exc:
369 |         _handle_get_simple_fail(link, exc)
370 |     except RetryError as exc:
371 |         _handle_get_simple_fail(link, exc)
372 |     except SSLError as exc:
373 |         reason = "There was a problem confirming the ssl certificate: "
374 |         reason += str(exc)
375 |         _handle_get_simple_fail(link, reason, meth=logger.info)
376 |     except requests.ConnectionError as exc:
377 |         _handle_get_simple_fail(link, f"connection error: {exc}")
378 |     except requests.Timeout:
379 |         _handle_get_simple_fail(link, "timed out")
380 |     else:
381 |         return _make_index_content(resp, cache_link_parsing=link.cache_link_parsing)
382 |     return None
383 | 
384 | 
385 | class CollectedSources(NamedTuple):
386 |     find_links: Sequence[Optional[LinkSource]]
387 |     index_urls: Sequence[Optional[LinkSource]]
388 | 
389 | 
390 | class LinkCollector:
391 |     """
392 |     Responsible for collecting Link objects from all configured locations,
393 |     making network requests as needed.
394 | 
395 |     The class's main method is its collect_sources() method.
396 |     """
397 | 
398 |     def __init__(
399 |         self,
400 |         session: PipSession,
401 |         search_scope: SearchScope,
402 |     ) -> None:
403 |         self.search_scope = search_scope
404 |         self.session = session
405 | 
406 |     @classmethod
407 |     def create(
408 |         cls,
409 |         session: PipSession,
410 |         options: Values,
411 |         suppress_no_index: bool = False,
412 |     ) -> "LinkCollector":
413 |         """
414 |         :param session: The Session to use to make requests.
415 |         :param suppress_no_index: Whether to ignore the --no-index option
416 |             when constructing the SearchScope object.
417 |         """
418 |         index_urls = [options.index_url] + options.extra_index_urls
419 |         if options.no_index and not suppress_no_index:
420 |             logger.debug(
421 |                 "Ignoring indexes: %s",
422 |                 ",".join(redact_auth_from_url(url) for url in index_urls),
423 |             )
424 |             index_urls = []
425 | 
426 |         # Make sure find_links is a list before passing to create().
427 |         find_links = options.find_links or []
428 | 
429 |         search_scope = SearchScope.create(
430 |             find_links=find_links,
431 |             index_urls=index_urls,
432 |             no_index=options.no_index,
433 |         )
434 |         link_collector = LinkCollector(
435 |             session=session,
436 |             search_scope=search_scope,
437 |         )
438 |         return link_collector
439 | 
440 |     @property
441 |     def find_links(self) -> List[str]:
442 |         return self.search_scope.find_links
443 | 
444 |     def fetch_response(self, location: Link) -> Optional[IndexContent]:
445 |         """
446 |         Fetch an HTML page containing package links.
447 |         """
448 |         return _get_index_content(location, session=self.session)
449 | 
450 |     def collect_sources(
451 |         self,
452 |         project_name: str,
453 |         candidates_from_page: CandidatesFromPage,
454 |     ) -> CollectedSources:
455 |         # The OrderedDict calls deduplicate sources by URL.
456 |         index_url_sources = collections.OrderedDict(
457 |             build_source(
458 |                 loc,
459 |                 candidates_from_page=candidates_from_page,
460 |                 page_validator=self.session.is_secure_origin,
461 |                 expand_dir=False,
462 |                 cache_link_parsing=False,
463 |                 project_name=project_name,
464 |             )
465 |             for loc in self.search_scope.get_index_urls_locations(project_name)
466 |         ).values()
467 |         find_links_sources = collections.OrderedDict(
468 |             build_source(
469 |                 loc,
470 |                 candidates_from_page=candidates_from_page,
471 |                 page_validator=self.session.is_secure_origin,
472 |                 expand_dir=True,
473 |                 cache_link_parsing=True,
474 |                 project_name=project_name,
475 |             )
476 |             for loc in self.find_links
477 |         ).values()
478 | 
479 |         if logger.isEnabledFor(logging.DEBUG):
480 |             lines = [
481 |                 f"* {s.link}"
482 |                 for s in itertools.chain(find_links_sources, index_url_sources)
483 |                 if s is not None and s.link is not None
484 |             ]
485 |             lines = [
486 |                 f"{len(lines)} location(s) to search "
487 |                 f"for versions of {project_name}:"
488 |             ] + lines
489 |             logger.debug("\n".join(lines))
490 | 
491 |         return CollectedSources(
492 |             find_links=list(find_links_sources),
493 |             index_urls=list(index_url_sources),
494 |         )
495 | 
```

--------------------------------------------------------------------------------
/.venv/lib/python3.12/site-packages/lxml/includes/libxml/xpath.h:
--------------------------------------------------------------------------------

```
  1 | /*
  2 |  * Summary: XML Path Language implementation
  3 |  * Description: API for the XML Path Language implementation
  4 |  *
  5 |  * XML Path Language implementation
  6 |  * XPath is a language for addressing parts of an XML document,
  7 |  * designed to be used by both XSLT and XPointer
  8 |  *     http://www.w3.org/TR/xpath
  9 |  *
 10 |  * Implements
 11 |  * W3C Recommendation 16 November 1999
 12 |  *     http://www.w3.org/TR/1999/REC-xpath-19991116
 13 |  *
 14 |  * Copy: See Copyright for the status of this software.
 15 |  *
 16 |  * Author: Daniel Veillard
 17 |  */
 18 | 
 19 | #ifndef __XML_XPATH_H__
 20 | #define __XML_XPATH_H__
 21 | 
 22 | #include <libxml/xmlversion.h>
 23 | 
 24 | #ifdef LIBXML_XPATH_ENABLED
 25 | 
 26 | #include <libxml/xmlerror.h>
 27 | #include <libxml/tree.h>
 28 | #include <libxml/hash.h>
 29 | #endif /* LIBXML_XPATH_ENABLED */
 30 | 
 31 | #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
 32 | #ifdef __cplusplus
 33 | extern "C" {
 34 | #endif
 35 | #endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED */
 36 | 
 37 | #ifdef LIBXML_XPATH_ENABLED
 38 | 
 39 | typedef struct _xmlXPathContext xmlXPathContext;
 40 | typedef xmlXPathContext *xmlXPathContextPtr;
 41 | typedef struct _xmlXPathParserContext xmlXPathParserContext;
 42 | typedef xmlXPathParserContext *xmlXPathParserContextPtr;
 43 | 
 44 | /**
 45 |  * The set of XPath error codes.
 46 |  */
 47 | 
 48 | typedef enum {
 49 |     XPATH_EXPRESSION_OK = 0,
 50 |     XPATH_NUMBER_ERROR,
 51 |     XPATH_UNFINISHED_LITERAL_ERROR,
 52 |     XPATH_START_LITERAL_ERROR,
 53 |     XPATH_VARIABLE_REF_ERROR,
 54 |     XPATH_UNDEF_VARIABLE_ERROR,
 55 |     XPATH_INVALID_PREDICATE_ERROR,
 56 |     XPATH_EXPR_ERROR,
 57 |     XPATH_UNCLOSED_ERROR,
 58 |     XPATH_UNKNOWN_FUNC_ERROR,
 59 |     XPATH_INVALID_OPERAND,
 60 |     XPATH_INVALID_TYPE,
 61 |     XPATH_INVALID_ARITY,
 62 |     XPATH_INVALID_CTXT_SIZE,
 63 |     XPATH_INVALID_CTXT_POSITION,
 64 |     XPATH_MEMORY_ERROR,
 65 |     XPTR_SYNTAX_ERROR,
 66 |     XPTR_RESOURCE_ERROR,
 67 |     XPTR_SUB_RESOURCE_ERROR,
 68 |     XPATH_UNDEF_PREFIX_ERROR,
 69 |     XPATH_ENCODING_ERROR,
 70 |     XPATH_INVALID_CHAR_ERROR,
 71 |     XPATH_INVALID_CTXT,
 72 |     XPATH_STACK_ERROR,
 73 |     XPATH_FORBID_VARIABLE_ERROR,
 74 |     XPATH_OP_LIMIT_EXCEEDED,
 75 |     XPATH_RECURSION_LIMIT_EXCEEDED
 76 | } xmlXPathError;
 77 | 
 78 | /*
 79 |  * A node-set (an unordered collection of nodes without duplicates).
 80 |  */
 81 | typedef struct _xmlNodeSet xmlNodeSet;
 82 | typedef xmlNodeSet *xmlNodeSetPtr;
 83 | struct _xmlNodeSet {
 84 |     int nodeNr;			/* number of nodes in the set */
 85 |     int nodeMax;		/* size of the array as allocated */
 86 |     xmlNodePtr *nodeTab;	/* array of nodes in no particular order */
 87 |     /* @@ with_ns to check whether namespace nodes should be looked at @@ */
 88 | };
 89 | 
 90 | /*
 91 |  * An expression is evaluated to yield an object, which
 92 |  * has one of the following four basic types:
 93 |  *   - node-set
 94 |  *   - boolean
 95 |  *   - number
 96 |  *   - string
 97 |  *
 98 |  * @@ XPointer will add more types !
 99 |  */
100 | 
101 | typedef enum {
102 |     XPATH_UNDEFINED = 0,
103 |     XPATH_NODESET = 1,
104 |     XPATH_BOOLEAN = 2,
105 |     XPATH_NUMBER = 3,
106 |     XPATH_STRING = 4,
107 | #ifdef LIBXML_XPTR_LOCS_ENABLED
108 |     XPATH_POINT = 5,
109 |     XPATH_RANGE = 6,
110 |     XPATH_LOCATIONSET = 7,
111 | #endif
112 |     XPATH_USERS = 8,
113 |     XPATH_XSLT_TREE = 9  /* An XSLT value tree, non modifiable */
114 | } xmlXPathObjectType;
115 | 
116 | #ifndef LIBXML_XPTR_LOCS_ENABLED
117 | /** DOC_DISABLE */
118 | #define XPATH_POINT 5
119 | #define XPATH_RANGE 6
120 | #define XPATH_LOCATIONSET 7
121 | /** DOC_ENABLE */
122 | #endif
123 | 
124 | typedef struct _xmlXPathObject xmlXPathObject;
125 | typedef xmlXPathObject *xmlXPathObjectPtr;
126 | struct _xmlXPathObject {
127 |     xmlXPathObjectType type;
128 |     xmlNodeSetPtr nodesetval;
129 |     int boolval;
130 |     double floatval;
131 |     xmlChar *stringval;
132 |     void *user;
133 |     int index;
134 |     void *user2;
135 |     int index2;
136 | };
137 | 
138 | /**
139 |  * xmlXPathConvertFunc:
140 |  * @obj:  an XPath object
141 |  * @type:  the number of the target type
142 |  *
143 |  * A conversion function is associated to a type and used to cast
144 |  * the new type to primitive values.
145 |  *
146 |  * Returns -1 in case of error, 0 otherwise
147 |  */
148 | typedef int (*xmlXPathConvertFunc) (xmlXPathObjectPtr obj, int type);
149 | 
150 | /*
151 |  * Extra type: a name and a conversion function.
152 |  */
153 | 
154 | typedef struct _xmlXPathType xmlXPathType;
155 | typedef xmlXPathType *xmlXPathTypePtr;
156 | struct _xmlXPathType {
157 |     const xmlChar         *name;		/* the type name */
158 |     xmlXPathConvertFunc func;		/* the conversion function */
159 | };
160 | 
161 | /*
162 |  * Extra variable: a name and a value.
163 |  */
164 | 
165 | typedef struct _xmlXPathVariable xmlXPathVariable;
166 | typedef xmlXPathVariable *xmlXPathVariablePtr;
167 | struct _xmlXPathVariable {
168 |     const xmlChar       *name;		/* the variable name */
169 |     xmlXPathObjectPtr value;		/* the value */
170 | };
171 | 
172 | /**
173 |  * xmlXPathEvalFunc:
174 |  * @ctxt: an XPath parser context
175 |  * @nargs: the number of arguments passed to the function
176 |  *
177 |  * An XPath evaluation function, the parameters are on the XPath context stack.
178 |  */
179 | 
180 | typedef void (*xmlXPathEvalFunc)(xmlXPathParserContextPtr ctxt,
181 | 	                         int nargs);
182 | 
183 | /*
184 |  * Extra function: a name and a evaluation function.
185 |  */
186 | 
187 | typedef struct _xmlXPathFunct xmlXPathFunct;
188 | typedef xmlXPathFunct *xmlXPathFuncPtr;
189 | struct _xmlXPathFunct {
190 |     const xmlChar      *name;		/* the function name */
191 |     xmlXPathEvalFunc func;		/* the evaluation function */
192 | };
193 | 
194 | /**
195 |  * xmlXPathAxisFunc:
196 |  * @ctxt:  the XPath interpreter context
197 |  * @cur:  the previous node being explored on that axis
198 |  *
199 |  * An axis traversal function. To traverse an axis, the engine calls
200 |  * the first time with cur == NULL and repeat until the function returns
201 |  * NULL indicating the end of the axis traversal.
202 |  *
203 |  * Returns the next node in that axis or NULL if at the end of the axis.
204 |  */
205 | 
206 | typedef xmlXPathObjectPtr (*xmlXPathAxisFunc) (xmlXPathParserContextPtr ctxt,
207 | 				 xmlXPathObjectPtr cur);
208 | 
209 | /*
210 |  * Extra axis: a name and an axis function.
211 |  */
212 | 
213 | typedef struct _xmlXPathAxis xmlXPathAxis;
214 | typedef xmlXPathAxis *xmlXPathAxisPtr;
215 | struct _xmlXPathAxis {
216 |     const xmlChar      *name;		/* the axis name */
217 |     xmlXPathAxisFunc func;		/* the search function */
218 | };
219 | 
220 | /**
221 |  * xmlXPathFunction:
222 |  * @ctxt:  the XPath interprestation context
223 |  * @nargs:  the number of arguments
224 |  *
225 |  * An XPath function.
226 |  * The arguments (if any) are popped out from the context stack
227 |  * and the result is pushed on the stack.
228 |  */
229 | 
230 | typedef void (*xmlXPathFunction) (xmlXPathParserContextPtr ctxt, int nargs);
231 | 
232 | /*
233 |  * Function and Variable Lookup.
234 |  */
235 | 
236 | /**
237 |  * xmlXPathVariableLookupFunc:
238 |  * @ctxt:  an XPath context
239 |  * @name:  name of the variable
240 |  * @ns_uri:  the namespace name hosting this variable
241 |  *
242 |  * Prototype for callbacks used to plug variable lookup in the XPath
243 |  * engine.
244 |  *
245 |  * Returns the XPath object value or NULL if not found.
246 |  */
247 | typedef xmlXPathObjectPtr (*xmlXPathVariableLookupFunc) (void *ctxt,
248 |                                          const xmlChar *name,
249 |                                          const xmlChar *ns_uri);
250 | 
251 | /**
252 |  * xmlXPathFuncLookupFunc:
253 |  * @ctxt:  an XPath context
254 |  * @name:  name of the function
255 |  * @ns_uri:  the namespace name hosting this function
256 |  *
257 |  * Prototype for callbacks used to plug function lookup in the XPath
258 |  * engine.
259 |  *
260 |  * Returns the XPath function or NULL if not found.
261 |  */
262 | typedef xmlXPathFunction (*xmlXPathFuncLookupFunc) (void *ctxt,
263 | 					 const xmlChar *name,
264 | 					 const xmlChar *ns_uri);
265 | 
266 | /**
267 |  * xmlXPathFlags:
268 |  * Flags for XPath engine compilation and runtime
269 |  */
270 | /**
271 |  * XML_XPATH_CHECKNS:
272 |  *
273 |  * check namespaces at compilation
274 |  */
275 | #define XML_XPATH_CHECKNS (1<<0)
276 | /**
277 |  * XML_XPATH_NOVAR:
278 |  *
279 |  * forbid variables in expression
280 |  */
281 | #define XML_XPATH_NOVAR	  (1<<1)
282 | 
283 | /**
284 |  * xmlXPathContext:
285 |  *
286 |  * Expression evaluation occurs with respect to a context.
287 |  * he context consists of:
288 |  *    - a node (the context node)
289 |  *    - a node list (the context node list)
290 |  *    - a set of variable bindings
291 |  *    - a function library
292 |  *    - the set of namespace declarations in scope for the expression
293 |  * Following the switch to hash tables, this need to be trimmed up at
294 |  * the next binary incompatible release.
295 |  * The node may be modified when the context is passed to libxml2
296 |  * for an XPath evaluation so you may need to initialize it again
297 |  * before the next call.
298 |  */
299 | 
300 | struct _xmlXPathContext {
301 |     xmlDocPtr doc;			/* The current document */
302 |     xmlNodePtr node;			/* The current node */
303 | 
304 |     int nb_variables_unused;		/* unused (hash table) */
305 |     int max_variables_unused;		/* unused (hash table) */
306 |     xmlHashTablePtr varHash;		/* Hash table of defined variables */
307 | 
308 |     int nb_types;			/* number of defined types */
309 |     int max_types;			/* max number of types */
310 |     xmlXPathTypePtr types;		/* Array of defined types */
311 | 
312 |     int nb_funcs_unused;		/* unused (hash table) */
313 |     int max_funcs_unused;		/* unused (hash table) */
314 |     xmlHashTablePtr funcHash;		/* Hash table of defined funcs */
315 | 
316 |     int nb_axis;			/* number of defined axis */
317 |     int max_axis;			/* max number of axis */
318 |     xmlXPathAxisPtr axis;		/* Array of defined axis */
319 | 
320 |     /* the namespace nodes of the context node */
321 |     xmlNsPtr *namespaces;		/* Array of namespaces */
322 |     int nsNr;				/* number of namespace in scope */
323 |     void *user;				/* function to free */
324 | 
325 |     /* extra variables */
326 |     int contextSize;			/* the context size */
327 |     int proximityPosition;		/* the proximity position */
328 | 
329 |     /* extra stuff for XPointer */
330 |     int xptr;				/* is this an XPointer context? */
331 |     xmlNodePtr here;			/* for here() */
332 |     xmlNodePtr origin;			/* for origin() */
333 | 
334 |     /* the set of namespace declarations in scope for the expression */
335 |     xmlHashTablePtr nsHash;		/* The namespaces hash table */
336 |     xmlXPathVariableLookupFunc varLookupFunc;/* variable lookup func */
337 |     void *varLookupData;		/* variable lookup data */
338 | 
339 |     /* Possibility to link in an extra item */
340 |     void *extra;                        /* needed for XSLT */
341 | 
342 |     /* The function name and URI when calling a function */
343 |     const xmlChar *function;
344 |     const xmlChar *functionURI;
345 | 
346 |     /* function lookup function and data */
347 |     xmlXPathFuncLookupFunc funcLookupFunc;/* function lookup func */
348 |     void *funcLookupData;		/* function lookup data */
349 | 
350 |     /* temporary namespace lists kept for walking the namespace axis */
351 |     xmlNsPtr *tmpNsList;		/* Array of namespaces */
352 |     int tmpNsNr;			/* number of namespaces in scope */
353 | 
354 |     /* error reporting mechanism */
355 |     void *userData;                     /* user specific data block */
356 |     xmlStructuredErrorFunc error;       /* the callback in case of errors */
357 |     xmlError lastError;			/* the last error */
358 |     xmlNodePtr debugNode;		/* the source node XSLT */
359 | 
360 |     /* dictionary */
361 |     xmlDictPtr dict;			/* dictionary if any */
362 | 
363 |     int flags;				/* flags to control compilation */
364 | 
365 |     /* Cache for reusal of XPath objects */
366 |     void *cache;
367 | 
368 |     /* Resource limits */
369 |     unsigned long opLimit;
370 |     unsigned long opCount;
371 |     int depth;
372 | };
373 | 
374 | /*
375 |  * The structure of a compiled expression form is not public.
376 |  */
377 | 
378 | typedef struct _xmlXPathCompExpr xmlXPathCompExpr;
379 | typedef xmlXPathCompExpr *xmlXPathCompExprPtr;
380 | 
381 | /**
382 |  * xmlXPathParserContext:
383 |  *
384 |  * An XPath parser context. It contains pure parsing information,
385 |  * an xmlXPathContext, and the stack of objects.
386 |  */
387 | struct _xmlXPathParserContext {
388 |     const xmlChar *cur;			/* the current char being parsed */
389 |     const xmlChar *base;			/* the full expression */
390 | 
391 |     int error;				/* error code */
392 | 
393 |     xmlXPathContextPtr  context;	/* the evaluation context */
394 |     xmlXPathObjectPtr     value;	/* the current value */
395 |     int                 valueNr;	/* number of values stacked */
396 |     int                valueMax;	/* max number of values stacked */
397 |     xmlXPathObjectPtr *valueTab;	/* stack of values */
398 | 
399 |     xmlXPathCompExprPtr comp;		/* the precompiled expression */
400 |     int xptr;				/* it this an XPointer expression */
401 |     xmlNodePtr         ancestor;	/* used for walking preceding axis */
402 | 
403 |     int              valueFrame;        /* always zero for compatibility */
404 | };
405 | 
406 | /************************************************************************
407 |  *									*
408 |  *			Public API					*
409 |  *									*
410 |  ************************************************************************/
411 | 
412 | /**
413 |  * Objects and Nodesets handling
414 |  */
415 | 
416 | XMLPUBVAR double xmlXPathNAN;
417 | XMLPUBVAR double xmlXPathPINF;
418 | XMLPUBVAR double xmlXPathNINF;
419 | 
420 | /* These macros may later turn into functions */
421 | /**
422 |  * xmlXPathNodeSetGetLength:
423 |  * @ns:  a node-set
424 |  *
425 |  * Implement a functionality similar to the DOM NodeList.length.
426 |  *
427 |  * Returns the number of nodes in the node-set.
428 |  */
429 | #define xmlXPathNodeSetGetLength(ns) ((ns) ? (ns)->nodeNr : 0)
430 | /**
431 |  * xmlXPathNodeSetItem:
432 |  * @ns:  a node-set
433 |  * @index:  index of a node in the set
434 |  *
435 |  * Implements a functionality similar to the DOM NodeList.item().
436 |  *
437 |  * Returns the xmlNodePtr at the given @index in @ns or NULL if
438 |  *         @index is out of range (0 to length-1)
439 |  */
440 | #define xmlXPathNodeSetItem(ns, index)				\
441 | 		((((ns) != NULL) &&				\
442 | 		  ((index) >= 0) && ((index) < (ns)->nodeNr)) ?	\
443 | 		 (ns)->nodeTab[(index)]				\
444 | 		 : NULL)
445 | /**
446 |  * xmlXPathNodeSetIsEmpty:
447 |  * @ns: a node-set
448 |  *
449 |  * Checks whether @ns is empty or not.
450 |  *
451 |  * Returns %TRUE if @ns is an empty node-set.
452 |  */
453 | #define xmlXPathNodeSetIsEmpty(ns)                                      \
454 |     (((ns) == NULL) || ((ns)->nodeNr == 0) || ((ns)->nodeTab == NULL))
455 | 
456 | 
457 | XMLPUBFUN void
458 | 		    xmlXPathFreeObject		(xmlXPathObjectPtr obj);
459 | XMLPUBFUN xmlNodeSetPtr
460 | 		    xmlXPathNodeSetCreate	(xmlNodePtr val);
461 | XMLPUBFUN void
462 | 		    xmlXPathFreeNodeSetList	(xmlXPathObjectPtr obj);
463 | XMLPUBFUN void
464 | 		    xmlXPathFreeNodeSet		(xmlNodeSetPtr obj);
465 | XMLPUBFUN xmlXPathObjectPtr
466 | 		    xmlXPathObjectCopy		(xmlXPathObjectPtr val);
467 | XMLPUBFUN int
468 | 		    xmlXPathCmpNodes		(xmlNodePtr node1,
469 | 						 xmlNodePtr node2);
470 | /**
471 |  * Conversion functions to basic types.
472 |  */
473 | XMLPUBFUN int
474 | 		    xmlXPathCastNumberToBoolean	(double val);
475 | XMLPUBFUN int
476 | 		    xmlXPathCastStringToBoolean	(const xmlChar * val);
477 | XMLPUBFUN int
478 | 		    xmlXPathCastNodeSetToBoolean(xmlNodeSetPtr ns);
479 | XMLPUBFUN int
480 | 		    xmlXPathCastToBoolean	(xmlXPathObjectPtr val);
481 | 
482 | XMLPUBFUN double
483 | 		    xmlXPathCastBooleanToNumber	(int val);
484 | XMLPUBFUN double
485 | 		    xmlXPathCastStringToNumber	(const xmlChar * val);
486 | XMLPUBFUN double
487 | 		    xmlXPathCastNodeToNumber	(xmlNodePtr node);
488 | XMLPUBFUN double
489 | 		    xmlXPathCastNodeSetToNumber	(xmlNodeSetPtr ns);
490 | XMLPUBFUN double
491 | 		    xmlXPathCastToNumber	(xmlXPathObjectPtr val);
492 | 
493 | XMLPUBFUN xmlChar *
494 | 		    xmlXPathCastBooleanToString	(int val);
495 | XMLPUBFUN xmlChar *
496 | 		    xmlXPathCastNumberToString	(double val);
497 | XMLPUBFUN xmlChar *
498 | 		    xmlXPathCastNodeToString	(xmlNodePtr node);
499 | XMLPUBFUN xmlChar *
500 | 		    xmlXPathCastNodeSetToString	(xmlNodeSetPtr ns);
501 | XMLPUBFUN xmlChar *
502 | 		    xmlXPathCastToString	(xmlXPathObjectPtr val);
503 | 
504 | XMLPUBFUN xmlXPathObjectPtr
505 | 		    xmlXPathConvertBoolean	(xmlXPathObjectPtr val);
506 | XMLPUBFUN xmlXPathObjectPtr
507 | 		    xmlXPathConvertNumber	(xmlXPathObjectPtr val);
508 | XMLPUBFUN xmlXPathObjectPtr
509 | 		    xmlXPathConvertString	(xmlXPathObjectPtr val);
510 | 
511 | /**
512 |  * Context handling.
513 |  */
514 | XMLPUBFUN xmlXPathContextPtr
515 | 		    xmlXPathNewContext		(xmlDocPtr doc);
516 | XMLPUBFUN void
517 | 		    xmlXPathFreeContext		(xmlXPathContextPtr ctxt);
518 | XMLPUBFUN int
519 | 		    xmlXPathContextSetCache(xmlXPathContextPtr ctxt,
520 | 				            int active,
521 | 					    int value,
522 | 					    int options);
523 | /**
524 |  * Evaluation functions.
525 |  */
526 | XMLPUBFUN long
527 | 		    xmlXPathOrderDocElems	(xmlDocPtr doc);
528 | XMLPUBFUN int
529 | 		    xmlXPathSetContextNode	(xmlNodePtr node,
530 | 						 xmlXPathContextPtr ctx);
531 | XMLPUBFUN xmlXPathObjectPtr
532 | 		    xmlXPathNodeEval		(xmlNodePtr node,
533 | 						 const xmlChar *str,
534 | 						 xmlXPathContextPtr ctx);
535 | XMLPUBFUN xmlXPathObjectPtr
536 | 		    xmlXPathEval		(const xmlChar *str,
537 | 						 xmlXPathContextPtr ctx);
538 | XMLPUBFUN xmlXPathObjectPtr
539 | 		    xmlXPathEvalExpression	(const xmlChar *str,
540 | 						 xmlXPathContextPtr ctxt);
541 | XMLPUBFUN int
542 | 		    xmlXPathEvalPredicate	(xmlXPathContextPtr ctxt,
543 | 						 xmlXPathObjectPtr res);
544 | /**
545 |  * Separate compilation/evaluation entry points.
546 |  */
547 | XMLPUBFUN xmlXPathCompExprPtr
548 | 		    xmlXPathCompile		(const xmlChar *str);
549 | XMLPUBFUN xmlXPathCompExprPtr
550 | 		    xmlXPathCtxtCompile		(xmlXPathContextPtr ctxt,
551 | 						 const xmlChar *str);
552 | XMLPUBFUN xmlXPathObjectPtr
553 | 		    xmlXPathCompiledEval	(xmlXPathCompExprPtr comp,
554 | 						 xmlXPathContextPtr ctx);
555 | XMLPUBFUN int
556 | 		    xmlXPathCompiledEvalToBoolean(xmlXPathCompExprPtr comp,
557 | 						 xmlXPathContextPtr ctxt);
558 | XMLPUBFUN void
559 | 		    xmlXPathFreeCompExpr	(xmlXPathCompExprPtr comp);
560 | #endif /* LIBXML_XPATH_ENABLED */
561 | #if defined(LIBXML_XPATH_ENABLED) || defined(LIBXML_SCHEMAS_ENABLED)
562 | XML_DEPRECATED
563 | XMLPUBFUN void
564 | 		    xmlXPathInit		(void);
565 | XMLPUBFUN int
566 | 		xmlXPathIsNaN	(double val);
567 | XMLPUBFUN int
568 | 		xmlXPathIsInf	(double val);
569 | 
570 | #ifdef __cplusplus
571 | }
572 | #endif
573 | 
574 | #endif /* LIBXML_XPATH_ENABLED or LIBXML_SCHEMAS_ENABLED*/
575 | #endif /* ! __XML_XPATH_H__ */
576 | 
```
Page 55/168FirstPrevNextLast