hdiffpatch


Namehdiffpatch JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/BrianPugh/hdiffpatch-python
SummaryPython wrapper around HDiffPatch C++ library for efficient binary diff/patch operations.
upload_time2025-07-16 02:43:03
maintainerNone
docs_urlNone
authorBrian Pugh
requires_python<4.0,>=3.9
licenseApache-2.0
keywords binary diff patch compression hdiffpatch delta update
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            **hdiffpatch-python** is a Python wrapper around the [HDiffPatch](https://github.com/sisong/HDiffPatch) C++ library, providing binary diff and patch operations with compression support.

<div align="center">

![Python compat](https://img.shields.io/badge/%3E=python-3.9-blue.svg)
[![PyPi](https://img.shields.io/pypi/v/hdiffpatch-python.svg)](https://pypi.python.org/pypi/hdiffpatch-python)
[![GHA Status](https://github.com/BrianPugh/hdiffpatch-python/actions/workflows/tests.yaml/badge.svg?branch=main)](https://github.com/BrianPugh/hdiffpatch-python/actions?query=workflow%3Atests)
[![Coverage](https://codecov.io/github/BrianPugh/hdiffpatch-python/coverage.svg?branch=main)](https://codecov.io/github/BrianPugh/hdiffpatch-python?branch=main)

</div>

## Installation

**hdiffpatch** requires Python `>=3.9` and can be installed via:

```bash
pip install hdiffpatch
```

For development installation:

```bash
git clone https://github.com/BrianPugh/hdiffpatch-python.git
cd hdiffpatch-python
poetry install
```

## Quick Start

**hdiffpatch** primarily provides 2 simple functions:

* `diff` for creating a patch.
* `apply` for applying a patch.

### Basic Usage

```python
import hdiffpatch

# Create binary data
old_data = b"Hello, world!"
new_data = b"Hello, HDiffPatch!"

# Create a diff
diff = hdiffpatch.diff(old_data, new_data)

# Apply the diff
result = hdiffpatch.apply(old_data, diff)
assert result == new_data
```

### With Simple Compression

```python
import hdiffpatch

old_data = b"Large binary data..." * 1000
new_data = b"Modified binary data..." * 1000

# Create a compressed diff
diff = hdiffpatch.diff(old_data, new_data, compression="zlib")

# Apply patch
result = hdiffpatch.apply(old_data, diff)
assert result == new_data
```

### With Advanced Compression Configuration

```python
import hdiffpatch

old_data = b"Large binary data..." * 1000
new_data = b"Modified binary data..." * 1000

# Use configuration classes for fine-grained control
config = hdiffpatch.ZlibConfig(level=9, window=12)

diff = hdiffpatch.diff(old_data, new_data, compression=config)
result = hdiffpatch.apply(old_data, diff)
assert result == new_data
```

### Recompressing Diffs

```python
import hdiffpatch

old_data = b"Large binary data..." * 1000
new_data = b"Modified binary data..." * 1000

# Create a diff with zlib compression
diff_zlib = hdiffpatch.diff(old_data, new_data, compression="zlib")

# Recompress the same diff with zstd
diff_zstd = hdiffpatch.recompress(diff_zlib, compression="zstd")

# Remove compression entirely
diff_uncompressed = hdiffpatch.recompress(diff_zlib, compression="none")

# Both diffs produce the same result when applied
result1 = hdiffpatch.apply(old_data, diff_zlib)
result2 = hdiffpatch.apply(old_data, diff_zstd)
assert result1 == result2 == new_data
```

## API Reference

### Core Functions

```python
def diff(old_data, new_data, compression="none", *, validate=True) -> bytes
```

Create a binary diff between two byte sequences.

**Parameters:**

* `old_data` (bytes): Original data.
* `new_data` (bytes): Modified data.
* `compression` (str or config object): Compression type as string (`"none"`, `"zlib"`, `"lzma"`, `"lzma2"`, `"zstd"`, `"bzip2"`, `"tamp"`) or a compression configuration object.
* `validate` (bool): Test that the patch successfully converts `old_data` to `new_data`. This is a computationally inexpensive operation. Defaults to `True`.

**Returns:** `bytes` - Binary diff data that can be used with `apply()` and `old_data` to generate `new_data`.

---

```python
def apply(old_data, diff_data) -> bytes
```

Apply a binary patch to reconstruct new data.

**Parameters:**

* `old_data` (bytes): Original data.
* `diff_data` (bytes): Patch data from `diff()`.

**Returns:** `bytes` - Reconstructed data. The `new_data` that was passed to `diff()`.

---

```python
def recompress(diff_data, compression=None) -> bytes
```

Recompress a diff with a different compression algorithm.

**Parameters:**

* `diff_data` (bytes): The diff data to recompress.
* `compression` (str or config object, optional): Target compression type as string (`"none"`, `"zlib"`, `"lzma"`, `"lzma2"`, `"zstd"`, `"bzip2"`, `"tamp"`) or a compression configuration object. If None, removes compression.

**Returns:** `bytes` - The recompressed diff data

### Compression Configuration

For advanced compression control, **hdiffpatch** provides configuration classes for each compression algorithm:

#### ZStdConfig

Fine-grained control over Zstandard compression:

```python
# Basic configuration
config = hdiffpatch.ZStdConfig(level=15, window=20, workers=2)

# Preset configurations
config = hdiffpatch.ZStdConfig.fast()             # Optimized for speed
config = hdiffpatch.ZStdConfig.balanced()         # Balanced speed/compression
config = hdiffpatch.ZStdConfig.best_compression() # Maximum compression
config = hdiffpatch.ZStdConfig.minimal_memory()   # Minimal memory usage

# Use with diff
diff = hdiffpatch.diff(old_data, new_data, compression=config)
```

**Parameters:**

* `level` (1-22): Compression level, higher = better compression
* `window` (10-27): Window size as log2, larger = better compression
* `workers` (0-200): Number of threads, 0 = single-threaded

#### ZlibConfig

Fine-grained control over zlib compression:

```python
# Basic configuration
config = hdiffpatch.ZlibConfig(
    level=9,
    memory_level=8,
    window=15,
    strategy=hdiffpatch.ZlibStrategy.DEFAULT
)

# Preset configurations
config = hdiffpatch.ZlibConfig.fast()
config = hdiffpatch.ZlibConfig.balanced()
config = hdiffpatch.ZlibConfig.best_compression()
config = hdiffpatch.ZlibConfig.minimal_memory()
config = hdiffpatch.ZlibConfig.png_optimized()    # Optimized for PNG-like data
```

**Parameters:**

* `level` (0-9): Compression level
* `memory_level` (1-9): Memory usage level
* `window` (9-15): Window size as power of 2
* `strategy`: Compression strategy (`DEFAULT`, `FILTERED`, `HUFFMAN_ONLY`, `RLE`, `FIXED`)

#### LzmaConfig and Lzma2Config

Fine-grained control over LZMA compression:

```python
# LZMA configuration
config = hdiffpatch.LzmaConfig(level=9, window=23, thread_num=1)

# LZMA2 configuration (supports more threads)
config = hdiffpatch.Lzma2Config(level=9, window=23, thread_num=4)

# Preset configurations available for both
config = hdiffpatch.LzmaConfig.fast()
config = hdiffpatch.LzmaConfig.balanced()
config = hdiffpatch.LzmaConfig.best_compression()
config = hdiffpatch.LzmaConfig.minimal_memory()
```

**Parameters:**

* `level` (0-9): Compression level
* `window` (12-30): Window size as log2
* `thread_num`: Number of threads (1-2 for LZMA, 1-64 for LZMA2)

#### BZip2Config

Fine-grained control over bzip2 compression:

```python
config = hdiffpatch.BZip2Config(level=9, work_factor=30)

# Preset configurations
config = hdiffpatch.BZip2Config.fast()
config = hdiffpatch.BZip2Config.balanced()
config = hdiffpatch.BZip2Config.best_compression()
config = hdiffpatch.BZip2Config.minimal_memory()
```

**Parameters:**

* `level` (1-9): Compression level
* `work_factor` (0-250): Work factor for worst-case scenarios

#### TampConfig

Fine-grained control over [Tamp](https://github.com/BrianPugh/tamp) compression (embedded-friendly):

```python
config = hdiffpatch.TampConfig(window=10)

# Preset configurations
config = hdiffpatch.TampConfig.fast()
config = hdiffpatch.TampConfig.balanced()
config = hdiffpatch.TampConfig.best_compression()
config = hdiffpatch.TampConfig.minimal_memory()
```

**Parameters:**

* `window` (8-15): Window size as power of 2

### Exceptions

```python
hdiffpatch.HDiffPatchError
```

## Compression Performance

Different compression algorithms offer trade-offs between compression ratio and speed:

* **`zlib`**: Good balance of speed and compression. Very common.
* **`zstd`**: Fast compression with good ratios.
* **`lzma`/`lzma2`**: Very high compression ratios, slower.
* **`bzip2`**: Good compression, moderate speed
* **`tamp`**: Embedded-friendly compression, minimal memory usage.

### Basic Compression Comparison

```python
import hdiffpatch

# Large repetitive data
old_data = b"A" * 10000 + b"B" * 10000
new_data = b"A" * 10000 + b"C" * 10000

# Compare compression effectiveness
for compression in ["none", "zlib", "zstd", "lzma", "bzip2", "tamp"]:
    diff = hdiffpatch.diff(old_data, new_data, compression=compression)
    print(f"{compression}: {len(diff)} bytes")
```

### Advanced Configuration Comparison

```python
import hdiffpatch

# Compare different configuration approaches
configs = {
    "zstd_fast": hdiffpatch.ZStdConfig.fast(),
    "zstd_best": hdiffpatch.ZStdConfig.best_compression(),
    "zlib_balanced": hdiffpatch.ZlibConfig.balanced(),
    "lzma2_custom": hdiffpatch.Lzma2Config(level=6, window=20, thread_num=4),
}

for name, config in configs.items():
    diff = hdiffpatch.diff(old_data, new_data, compression=config)
    print(f"{name}: {len(diff)} bytes")
```

### Real-World Example: MicroPython Firmware

Here's a comprehensive comparison using actual MicroPython firmware files with a 12-bit window size (4096 bytes). This window size was chosen because it is typically a good trade-off between memory-usage and compression-performance for embedded targets.

* [RPI_PICO-20241129-v1.24.1.uf2](https://micropython.org/resources/firmware/RPI_PICO-20241129-v1.24.1.uf2): 651 KB
* [RPI_PICO-20250415-v1.25.0.uf2](https://micropython.org/resources/firmware/RPI_PICO-20250415-v1.25.0.uf2): 652 KB

Since we're using compression for the diff, a natural question would be: "If I'm adding a decompression library to my target project, then how much smaller is the patch compared to just compressing the firmware?"
To answer this question, we compare the size of the compressed patch to the compressed firmware.

| Algorithm | Size (HDiffPatch) | Size (firmware) | Improvement |
|-----------|-------------------|-----------------|-------------|
| none      |          209.7 KB |        652.0 KB | 3.11x |
| tamp      |          143.1 KB |        322.8 KB | 2.26x |
| zstd      |          133.4 KB |        277.6 KB | 2.08x |
| zlib      |          125.5 KB |        251.8 KB | 2.01x |
| bzip2     |          128.6 KB |        246.2 KB | 1.91x |
| lzma      |          116.9 KB |        222.7 KB | 1.91x |

In this example, using **hdiffpatch** resulted in a ~3x smaller update when compared to a naive uncompressed firmware update, and ~2x smaller when comparing against an equivalently-compressed firmware update.

To reproduce these results:

```bash
poetry run python tools/micropython-binary-demo.py
```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/BrianPugh/hdiffpatch-python",
    "name": "hdiffpatch",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.9",
    "maintainer_email": null,
    "keywords": "binary, diff, patch, compression, hdiffpatch, delta, update",
    "author": "Brian Pugh",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/97/8c/0c1e6e17ec7c04f21ece20a590fa9e2a038308516bd2fa66c02945bf018a/hdiffpatch-1.0.0.tar.gz",
    "platform": null,
    "description": "**hdiffpatch-python** is a Python wrapper around the [HDiffPatch](https://github.com/sisong/HDiffPatch) C++ library, providing binary diff and patch operations with compression support.\n\n<div align=\"center\">\n\n![Python compat](https://img.shields.io/badge/%3E=python-3.9-blue.svg)\n[![PyPi](https://img.shields.io/pypi/v/hdiffpatch-python.svg)](https://pypi.python.org/pypi/hdiffpatch-python)\n[![GHA Status](https://github.com/BrianPugh/hdiffpatch-python/actions/workflows/tests.yaml/badge.svg?branch=main)](https://github.com/BrianPugh/hdiffpatch-python/actions?query=workflow%3Atests)\n[![Coverage](https://codecov.io/github/BrianPugh/hdiffpatch-python/coverage.svg?branch=main)](https://codecov.io/github/BrianPugh/hdiffpatch-python?branch=main)\n\n</div>\n\n## Installation\n\n**hdiffpatch** requires Python `>=3.9` and can be installed via:\n\n```bash\npip install hdiffpatch\n```\n\nFor development installation:\n\n```bash\ngit clone https://github.com/BrianPugh/hdiffpatch-python.git\ncd hdiffpatch-python\npoetry install\n```\n\n## Quick Start\n\n**hdiffpatch** primarily provides 2 simple functions:\n\n* `diff` for creating a patch.\n* `apply` for applying a patch.\n\n### Basic Usage\n\n```python\nimport hdiffpatch\n\n# Create binary data\nold_data = b\"Hello, world!\"\nnew_data = b\"Hello, HDiffPatch!\"\n\n# Create a diff\ndiff = hdiffpatch.diff(old_data, new_data)\n\n# Apply the diff\nresult = hdiffpatch.apply(old_data, diff)\nassert result == new_data\n```\n\n### With Simple Compression\n\n```python\nimport hdiffpatch\n\nold_data = b\"Large binary data...\" * 1000\nnew_data = b\"Modified binary data...\" * 1000\n\n# Create a compressed diff\ndiff = hdiffpatch.diff(old_data, new_data, compression=\"zlib\")\n\n# Apply patch\nresult = hdiffpatch.apply(old_data, diff)\nassert result == new_data\n```\n\n### With Advanced Compression Configuration\n\n```python\nimport hdiffpatch\n\nold_data = b\"Large binary data...\" * 1000\nnew_data = b\"Modified binary data...\" * 1000\n\n# Use configuration classes for fine-grained control\nconfig = hdiffpatch.ZlibConfig(level=9, window=12)\n\ndiff = hdiffpatch.diff(old_data, new_data, compression=config)\nresult = hdiffpatch.apply(old_data, diff)\nassert result == new_data\n```\n\n### Recompressing Diffs\n\n```python\nimport hdiffpatch\n\nold_data = b\"Large binary data...\" * 1000\nnew_data = b\"Modified binary data...\" * 1000\n\n# Create a diff with zlib compression\ndiff_zlib = hdiffpatch.diff(old_data, new_data, compression=\"zlib\")\n\n# Recompress the same diff with zstd\ndiff_zstd = hdiffpatch.recompress(diff_zlib, compression=\"zstd\")\n\n# Remove compression entirely\ndiff_uncompressed = hdiffpatch.recompress(diff_zlib, compression=\"none\")\n\n# Both diffs produce the same result when applied\nresult1 = hdiffpatch.apply(old_data, diff_zlib)\nresult2 = hdiffpatch.apply(old_data, diff_zstd)\nassert result1 == result2 == new_data\n```\n\n## API Reference\n\n### Core Functions\n\n```python\ndef diff(old_data, new_data, compression=\"none\", *, validate=True) -> bytes\n```\n\nCreate a binary diff between two byte sequences.\n\n**Parameters:**\n\n* `old_data` (bytes): Original data.\n* `new_data` (bytes): Modified data.\n* `compression` (str or config object): Compression type as string (`\"none\"`, `\"zlib\"`, `\"lzma\"`, `\"lzma2\"`, `\"zstd\"`, `\"bzip2\"`, `\"tamp\"`) or a compression configuration object.\n* `validate` (bool): Test that the patch successfully converts `old_data` to `new_data`. This is a computationally inexpensive operation. Defaults to `True`.\n\n**Returns:** `bytes` - Binary diff data that can be used with `apply()` and `old_data` to generate `new_data`.\n\n---\n\n```python\ndef apply(old_data, diff_data) -> bytes\n```\n\nApply a binary patch to reconstruct new data.\n\n**Parameters:**\n\n* `old_data` (bytes): Original data.\n* `diff_data` (bytes): Patch data from `diff()`.\n\n**Returns:** `bytes` - Reconstructed data. The `new_data` that was passed to `diff()`.\n\n---\n\n```python\ndef recompress(diff_data, compression=None) -> bytes\n```\n\nRecompress a diff with a different compression algorithm.\n\n**Parameters:**\n\n* `diff_data` (bytes): The diff data to recompress.\n* `compression` (str or config object, optional): Target compression type as string (`\"none\"`, `\"zlib\"`, `\"lzma\"`, `\"lzma2\"`, `\"zstd\"`, `\"bzip2\"`, `\"tamp\"`) or a compression configuration object. If None, removes compression.\n\n**Returns:** `bytes` - The recompressed diff data\n\n### Compression Configuration\n\nFor advanced compression control, **hdiffpatch** provides configuration classes for each compression algorithm:\n\n#### ZStdConfig\n\nFine-grained control over Zstandard compression:\n\n```python\n# Basic configuration\nconfig = hdiffpatch.ZStdConfig(level=15, window=20, workers=2)\n\n# Preset configurations\nconfig = hdiffpatch.ZStdConfig.fast()             # Optimized for speed\nconfig = hdiffpatch.ZStdConfig.balanced()         # Balanced speed/compression\nconfig = hdiffpatch.ZStdConfig.best_compression() # Maximum compression\nconfig = hdiffpatch.ZStdConfig.minimal_memory()   # Minimal memory usage\n\n# Use with diff\ndiff = hdiffpatch.diff(old_data, new_data, compression=config)\n```\n\n**Parameters:**\n\n* `level` (1-22): Compression level, higher = better compression\n* `window` (10-27): Window size as log2, larger = better compression\n* `workers` (0-200): Number of threads, 0 = single-threaded\n\n#### ZlibConfig\n\nFine-grained control over zlib compression:\n\n```python\n# Basic configuration\nconfig = hdiffpatch.ZlibConfig(\n    level=9,\n    memory_level=8,\n    window=15,\n    strategy=hdiffpatch.ZlibStrategy.DEFAULT\n)\n\n# Preset configurations\nconfig = hdiffpatch.ZlibConfig.fast()\nconfig = hdiffpatch.ZlibConfig.balanced()\nconfig = hdiffpatch.ZlibConfig.best_compression()\nconfig = hdiffpatch.ZlibConfig.minimal_memory()\nconfig = hdiffpatch.ZlibConfig.png_optimized()    # Optimized for PNG-like data\n```\n\n**Parameters:**\n\n* `level` (0-9): Compression level\n* `memory_level` (1-9): Memory usage level\n* `window` (9-15): Window size as power of 2\n* `strategy`: Compression strategy (`DEFAULT`, `FILTERED`, `HUFFMAN_ONLY`, `RLE`, `FIXED`)\n\n#### LzmaConfig and Lzma2Config\n\nFine-grained control over LZMA compression:\n\n```python\n# LZMA configuration\nconfig = hdiffpatch.LzmaConfig(level=9, window=23, thread_num=1)\n\n# LZMA2 configuration (supports more threads)\nconfig = hdiffpatch.Lzma2Config(level=9, window=23, thread_num=4)\n\n# Preset configurations available for both\nconfig = hdiffpatch.LzmaConfig.fast()\nconfig = hdiffpatch.LzmaConfig.balanced()\nconfig = hdiffpatch.LzmaConfig.best_compression()\nconfig = hdiffpatch.LzmaConfig.minimal_memory()\n```\n\n**Parameters:**\n\n* `level` (0-9): Compression level\n* `window` (12-30): Window size as log2\n* `thread_num`: Number of threads (1-2 for LZMA, 1-64 for LZMA2)\n\n#### BZip2Config\n\nFine-grained control over bzip2 compression:\n\n```python\nconfig = hdiffpatch.BZip2Config(level=9, work_factor=30)\n\n# Preset configurations\nconfig = hdiffpatch.BZip2Config.fast()\nconfig = hdiffpatch.BZip2Config.balanced()\nconfig = hdiffpatch.BZip2Config.best_compression()\nconfig = hdiffpatch.BZip2Config.minimal_memory()\n```\n\n**Parameters:**\n\n* `level` (1-9): Compression level\n* `work_factor` (0-250): Work factor for worst-case scenarios\n\n#### TampConfig\n\nFine-grained control over [Tamp](https://github.com/BrianPugh/tamp) compression (embedded-friendly):\n\n```python\nconfig = hdiffpatch.TampConfig(window=10)\n\n# Preset configurations\nconfig = hdiffpatch.TampConfig.fast()\nconfig = hdiffpatch.TampConfig.balanced()\nconfig = hdiffpatch.TampConfig.best_compression()\nconfig = hdiffpatch.TampConfig.minimal_memory()\n```\n\n**Parameters:**\n\n* `window` (8-15): Window size as power of 2\n\n### Exceptions\n\n```python\nhdiffpatch.HDiffPatchError\n```\n\n## Compression Performance\n\nDifferent compression algorithms offer trade-offs between compression ratio and speed:\n\n* **`zlib`**: Good balance of speed and compression. Very common.\n* **`zstd`**: Fast compression with good ratios.\n* **`lzma`/`lzma2`**: Very high compression ratios, slower.\n* **`bzip2`**: Good compression, moderate speed\n* **`tamp`**: Embedded-friendly compression, minimal memory usage.\n\n### Basic Compression Comparison\n\n```python\nimport hdiffpatch\n\n# Large repetitive data\nold_data = b\"A\" * 10000 + b\"B\" * 10000\nnew_data = b\"A\" * 10000 + b\"C\" * 10000\n\n# Compare compression effectiveness\nfor compression in [\"none\", \"zlib\", \"zstd\", \"lzma\", \"bzip2\", \"tamp\"]:\n    diff = hdiffpatch.diff(old_data, new_data, compression=compression)\n    print(f\"{compression}: {len(diff)} bytes\")\n```\n\n### Advanced Configuration Comparison\n\n```python\nimport hdiffpatch\n\n# Compare different configuration approaches\nconfigs = {\n    \"zstd_fast\": hdiffpatch.ZStdConfig.fast(),\n    \"zstd_best\": hdiffpatch.ZStdConfig.best_compression(),\n    \"zlib_balanced\": hdiffpatch.ZlibConfig.balanced(),\n    \"lzma2_custom\": hdiffpatch.Lzma2Config(level=6, window=20, thread_num=4),\n}\n\nfor name, config in configs.items():\n    diff = hdiffpatch.diff(old_data, new_data, compression=config)\n    print(f\"{name}: {len(diff)} bytes\")\n```\n\n### Real-World Example: MicroPython Firmware\n\nHere's a comprehensive comparison using actual MicroPython firmware files with a 12-bit window size (4096 bytes). This window size was chosen because it is typically a good trade-off between memory-usage and compression-performance for embedded targets.\n\n* [RPI_PICO-20241129-v1.24.1.uf2](https://micropython.org/resources/firmware/RPI_PICO-20241129-v1.24.1.uf2): 651 KB\n* [RPI_PICO-20250415-v1.25.0.uf2](https://micropython.org/resources/firmware/RPI_PICO-20250415-v1.25.0.uf2): 652 KB\n\nSince we're using compression for the diff, a natural question would be: \"If I'm adding a decompression library to my target project, then how much smaller is the patch compared to just compressing the firmware?\"\nTo answer this question, we compare the size of the compressed patch to the compressed firmware.\n\n| Algorithm | Size (HDiffPatch) | Size (firmware) | Improvement |\n|-----------|-------------------|-----------------|-------------|\n| none      |          209.7 KB |        652.0 KB | 3.11x |\n| tamp      |          143.1 KB |        322.8 KB | 2.26x |\n| zstd      |          133.4 KB |        277.6 KB | 2.08x |\n| zlib      |          125.5 KB |        251.8 KB | 2.01x |\n| bzip2     |          128.6 KB |        246.2 KB | 1.91x |\n| lzma      |          116.9 KB |        222.7 KB | 1.91x |\n\nIn this example, using **hdiffpatch** resulted in a ~3x smaller update when compared to a naive uncompressed firmware update, and ~2x smaller when comparing against an equivalently-compressed firmware update.\n\nTo reproduce these results:\n\n```bash\npoetry run python tools/micropython-binary-demo.py\n```\n\n",
    "bugtrack_url": null,
    "license": "Apache-2.0",
    "summary": "Python wrapper around HDiffPatch C++ library for efficient binary diff/patch operations.",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://github.com/BrianPugh/hdiffpatch-python",
        "Repository": "https://github.com/BrianPugh/hdiffpatch-python"
    },
    "split_keywords": [
        "binary",
        " diff",
        " patch",
        " compression",
        " hdiffpatch",
        " delta",
        " update"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "097cc8fa98ded3afd0dee5f3d5b52f1e0e9d475785bd11bf10042f1d0b2abbe3",
                "md5": "28f5d8680cfb4c579f276a48fecca035",
                "sha256": "2648cedeca74854a8ab67acde2e805f1898c2a30e3cdd4ee8221dff1ebf2c1c2"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "28f5d8680cfb4c579f276a48fecca035",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 9857737,
            "upload_time": "2025-07-16T02:40:50",
            "upload_time_iso_8601": "2025-07-16T02:40:50.875143Z",
            "url": "https://files.pythonhosted.org/packages/09/7c/c8fa98ded3afd0dee5f3d5b52f1e0e9d475785bd11bf10042f1d0b2abbe3/hdiffpatch-1.0.0-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cba276b29c74cbdad0515d97480634badcd7238db11cdd4fe8677aad19be87b3",
                "md5": "3ccbf00a35da58371f30d8792db52c92",
                "sha256": "671ef4406db7115120885bac48cf9318d37f0007b253c964c72ec389cee51ee4"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "3ccbf00a35da58371f30d8792db52c92",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 9738331,
            "upload_time": "2025-07-16T02:40:52",
            "upload_time_iso_8601": "2025-07-16T02:40:52.855289Z",
            "url": "https://files.pythonhosted.org/packages/cb/a2/76b29c74cbdad0515d97480634badcd7238db11cdd4fe8677aad19be87b3/hdiffpatch-1.0.0-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "23a72c3fcad71dacc753b88c1975222c9bc76d3b2b5f5f3582fecbb682a53aaf",
                "md5": "3fa1fe0eeeeb09d3c194d5ff3e25bbc2",
                "sha256": "22343a8c0f0688394f121ee821cbc6e1c038b4f76ae53fde9ab9599cacc943ee"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "3fa1fe0eeeeb09d3c194d5ff3e25bbc2",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 14676049,
            "upload_time": "2025-07-16T02:40:55",
            "upload_time_iso_8601": "2025-07-16T02:40:55.272450Z",
            "url": "https://files.pythonhosted.org/packages/23/a7/2c3fcad71dacc753b88c1975222c9bc76d3b2b5f5f3582fecbb682a53aaf/hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "d9a6643cdaceb5246fa3ebb945dbff79d72d65bfe53ed16e609536cfe350973a",
                "md5": "94ee1ea9f0112f5ff6f08fe62df29941",
                "sha256": "8563c14b75f2e06eb8595b7a41718c64817525d1b7d7bc563e6b0c033ddf4abf"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "94ee1ea9f0112f5ff6f08fe62df29941",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 14722547,
            "upload_time": "2025-07-16T02:40:57",
            "upload_time_iso_8601": "2025-07-16T02:40:57.359341Z",
            "url": "https://files.pythonhosted.org/packages/d9/a6/643cdaceb5246fa3ebb945dbff79d72d65bfe53ed16e609536cfe350973a/hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "9077d8c6a84e00df897b72713459f0f7f19f651a59d436fe3ed160d7065db6fb",
                "md5": "28863a7d44ab3a4e5fe0ce3c14e8cfee",
                "sha256": "74c4fb2818f59c56921e953c6e89e118c6591aea2c1036211e128d53512cef0c"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "28863a7d44ab3a4e5fe0ce3c14e8cfee",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 14701591,
            "upload_time": "2025-07-16T02:40:59",
            "upload_time_iso_8601": "2025-07-16T02:40:59.418062Z",
            "url": "https://files.pythonhosted.org/packages/90/77/d8c6a84e00df897b72713459f0f7f19f651a59d436fe3ed160d7065db6fb/hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "45bac658e1b56c735925dadcf0366c5710501889ae68f069edbd2a5bf0c604e1",
                "md5": "ed5485aae1c48e30b6c59d6ea655af96",
                "sha256": "440198eff1f598af549a88ae719ab00715442b9d2742eeeac5586118b22c7abc"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ed5485aae1c48e30b6c59d6ea655af96",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 15000016,
            "upload_time": "2025-07-16T02:41:01",
            "upload_time_iso_8601": "2025-07-16T02:41:01.799492Z",
            "url": "https://files.pythonhosted.org/packages/45/ba/c658e1b56c735925dadcf0366c5710501889ae68f069edbd2a5bf0c604e1/hdiffpatch-1.0.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a6ab176ca0f2b5f3113cd2861330f7c80e3f9f14dd2d910762da1bc5e850047b",
                "md5": "28ad4923063b84bd78f4eb2dbee7825a",
                "sha256": "35ea375ea88bdf8529dae6252c144f014461421bedce0225be94ba518972c935"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "28ad4923063b84bd78f4eb2dbee7825a",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 15511109,
            "upload_time": "2025-07-16T02:41:04",
            "upload_time_iso_8601": "2025-07-16T02:41:04.299216Z",
            "url": "https://files.pythonhosted.org/packages/a6/ab/176ca0f2b5f3113cd2861330f7c80e3f9f14dd2d910762da1bc5e850047b/hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b5272e6305d17d37700497961ba397530a4833703a2714273a87710bbcba7c15",
                "md5": "da441f2ee5ce34927e490b5c715040fb",
                "sha256": "46f8542e409f78e06f0f92f2b8c4d4baec4ac73874ea9d3fffe8c9191a0640fd"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "da441f2ee5ce34927e490b5c715040fb",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 15992377,
            "upload_time": "2025-07-16T02:41:06",
            "upload_time_iso_8601": "2025-07-16T02:41:06.424476Z",
            "url": "https://files.pythonhosted.org/packages/b5/27/2e6305d17d37700497961ba397530a4833703a2714273a87710bbcba7c15/hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "be1d2633ff9c3d1df87c9e33216d823811de91c9ea814a545c484c2cc19eeb60",
                "md5": "e753c0322f066ae7e999f1ba150094ec",
                "sha256": "79089d4ac0e2ea5d92ba772d2ed5ddf31f5738bb889af833324012cf1871c14f"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "e753c0322f066ae7e999f1ba150094ec",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 15735578,
            "upload_time": "2025-07-16T02:41:08",
            "upload_time_iso_8601": "2025-07-16T02:41:08.792746Z",
            "url": "https://files.pythonhosted.org/packages/be/1d/2633ff9c3d1df87c9e33216d823811de91c9ea814a545c484c2cc19eeb60/hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eb1966c406ff971af6f71b8d48d86f826eb64f113edb9340c391a5db4fffff1b",
                "md5": "a24291e297b2d558717f9f2b2e75441c",
                "sha256": "c5b4e5b8a480776715665edac17a5c3652c4d469435f9646615c3925fd85347d"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a24291e297b2d558717f9f2b2e75441c",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 16059626,
            "upload_time": "2025-07-16T02:41:10",
            "upload_time_iso_8601": "2025-07-16T02:41:10.779856Z",
            "url": "https://files.pythonhosted.org/packages/eb/19/66c406ff971af6f71b8d48d86f826eb64f113edb9340c391a5db4fffff1b/hdiffpatch-1.0.0-cp310-cp310-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "da14e76c6699e81893a5618634da93aff8cab14e90664f0aefa9af196d0b4de3",
                "md5": "df9986e6981bb7694ba08e3ddfa80763",
                "sha256": "22ebe4d0178ac1f205c7c0b7698ae31fedb2f2e3d7e7821d44541f85004acf7f"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-win32.whl",
            "has_sig": false,
            "md5_digest": "df9986e6981bb7694ba08e3ddfa80763",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 9418369,
            "upload_time": "2025-07-16T02:41:13",
            "upload_time_iso_8601": "2025-07-16T02:41:13.142509Z",
            "url": "https://files.pythonhosted.org/packages/da/14/e76c6699e81893a5618634da93aff8cab14e90664f0aefa9af196d0b4de3/hdiffpatch-1.0.0-cp310-cp310-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "07133ef8e1cf4255a2f1cd098a43fd18a8f4bed3a674148d31feaba17e8e50d4",
                "md5": "3e3b9ea8c52799bdcf2076cea3d0ff80",
                "sha256": "192cbc9fcbd62fd1ae9ea2dcbf8de5b2b4acf427c97de3bdc0aa78ace9f5a636"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "3e3b9ea8c52799bdcf2076cea3d0ff80",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": "<4.0,>=3.9",
            "size": 9463404,
            "upload_time": "2025-07-16T02:41:15",
            "upload_time_iso_8601": "2025-07-16T02:41:15.389258Z",
            "url": "https://files.pythonhosted.org/packages/07/13/3ef8e1cf4255a2f1cd098a43fd18a8f4bed3a674148d31feaba17e8e50d4/hdiffpatch-1.0.0-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0d59a927e4b03993b687efcda642754f73130daa6b834feff6dba25fe3f21612",
                "md5": "a2e724dbcb7eb837b05f3d451865a00b",
                "sha256": "c0eea318ffdba8c2e284d8112d58dfbd1295325bc2029c2047bd8f60767fc45a"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a2e724dbcb7eb837b05f3d451865a00b",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 9858649,
            "upload_time": "2025-07-16T02:41:17",
            "upload_time_iso_8601": "2025-07-16T02:41:17.478303Z",
            "url": "https://files.pythonhosted.org/packages/0d/59/a927e4b03993b687efcda642754f73130daa6b834feff6dba25fe3f21612/hdiffpatch-1.0.0-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a0aa7d250d2faf4d8f2c8b74cb16ead676fc258a3b78609975f88b80df0f1172",
                "md5": "7f3d670531f8d5ab342ab34e2a13a011",
                "sha256": "0d1f3a92130783a5d5fbb1ea75477f9fe4333b5fff20ea69941651a9759e97b4"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "7f3d670531f8d5ab342ab34e2a13a011",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 9739501,
            "upload_time": "2025-07-16T02:41:19",
            "upload_time_iso_8601": "2025-07-16T02:41:19.305194Z",
            "url": "https://files.pythonhosted.org/packages/a0/aa/7d250d2faf4d8f2c8b74cb16ead676fc258a3b78609975f88b80df0f1172/hdiffpatch-1.0.0-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "432f98ce77119d4c43e35e7a564573c9fb29defefc5836d56dba1cf9d9242116",
                "md5": "cbf9665f166a90d7450cc44d6d75e497",
                "sha256": "edb27ba808ee8b2ce8f5e1da6f4d51a0f9f4aee3c0dd11805c246361204aeffd"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "cbf9665f166a90d7450cc44d6d75e497",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 14703008,
            "upload_time": "2025-07-16T02:41:21",
            "upload_time_iso_8601": "2025-07-16T02:41:21.168716Z",
            "url": "https://files.pythonhosted.org/packages/43/2f/98ce77119d4c43e35e7a564573c9fb29defefc5836d56dba1cf9d9242116/hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "75995147c3d1ac30ab8af55b4cf9e3c8bb37f940cbd6195f1112d237d00b2e91",
                "md5": "17bc8eaa0c42924d01377f0df8bb00df",
                "sha256": "aa9bdf455bf6676b55ba540d0a8fcac745818f4ec0a667758ab1f807526e821f"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "17bc8eaa0c42924d01377f0df8bb00df",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 14749706,
            "upload_time": "2025-07-16T02:41:23",
            "upload_time_iso_8601": "2025-07-16T02:41:23.482383Z",
            "url": "https://files.pythonhosted.org/packages/75/99/5147c3d1ac30ab8af55b4cf9e3c8bb37f940cbd6195f1112d237d00b2e91/hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8d2cd38a5a8c875aac0cb3f18eef7984ab3ccba16ce40817380df376bb1e9f74",
                "md5": "d3ccd5be4ff1263e74c9f9d1014c9313",
                "sha256": "cadae131dea26254a81bee35e45f7f2a90d38d0a7f3bbb1f9c23bf99f61338fc"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "d3ccd5be4ff1263e74c9f9d1014c9313",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 14728368,
            "upload_time": "2025-07-16T02:41:25",
            "upload_time_iso_8601": "2025-07-16T02:41:25.891436Z",
            "url": "https://files.pythonhosted.org/packages/8d/2c/d38a5a8c875aac0cb3f18eef7984ab3ccba16ce40817380df376bb1e9f74/hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "8e8b1569659c0b50944213bf6e04bb533cc3f138dd4c3a82a8131549c79c78eb",
                "md5": "6b69fea95baca8c39a67854e1f819f6c",
                "sha256": "2ff1f4eab9d26fe5517ec72d1ec6d5209793be9217a302aa82d24361f9331176"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6b69fea95baca8c39a67854e1f819f6c",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 15028746,
            "upload_time": "2025-07-16T02:41:27",
            "upload_time_iso_8601": "2025-07-16T02:41:27.961838Z",
            "url": "https://files.pythonhosted.org/packages/8e/8b/1569659c0b50944213bf6e04bb533cc3f138dd4c3a82a8131549c79c78eb/hdiffpatch-1.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "958610cfb01417077decbad21602de789819357fd8bf05e8160e256f52b25e32",
                "md5": "6ed7978b56d98f737a98f68b9835fba3",
                "sha256": "4c67a08d85371e0766628480b8f75bd7c1192e67a550238f29f898b46792044a"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "6ed7978b56d98f737a98f68b9835fba3",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 15538247,
            "upload_time": "2025-07-16T02:41:30",
            "upload_time_iso_8601": "2025-07-16T02:41:30.362350Z",
            "url": "https://files.pythonhosted.org/packages/95/86/10cfb01417077decbad21602de789819357fd8bf05e8160e256f52b25e32/hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c967d47723ed0c30acafe1e21cbeaa395acd2607142c3e8aaf43c037dca8d9ad",
                "md5": "cf2f90d0f315818bdb71fc9c14deebe5",
                "sha256": "e7a33645d7b03ea38178629fe5464925f38a605b761d4607023b6a2a5338ff1e"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "cf2f90d0f315818bdb71fc9c14deebe5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 16016398,
            "upload_time": "2025-07-16T02:41:32",
            "upload_time_iso_8601": "2025-07-16T02:41:32.414920Z",
            "url": "https://files.pythonhosted.org/packages/c9/67/d47723ed0c30acafe1e21cbeaa395acd2607142c3e8aaf43c037dca8d9ad/hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a8e4ecf6d0c4f1c761f854a7da15e3cfbd5ea651c0649f8708650754cba4dc6f",
                "md5": "06d7802296b7f66f6177f55f8debc1ee",
                "sha256": "adc7544ecea644bed1ec964a9a9ace99266511136c008dc6b188350a1b6ef7d0"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "06d7802296b7f66f6177f55f8debc1ee",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 15763265,
            "upload_time": "2025-07-16T02:41:34",
            "upload_time_iso_8601": "2025-07-16T02:41:34.474461Z",
            "url": "https://files.pythonhosted.org/packages/a8/e4/ecf6d0c4f1c761f854a7da15e3cfbd5ea651c0649f8708650754cba4dc6f/hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f0def7407722c1f39ce17a11979a59aa8d58832e166758109d2cb8e9f82d558d",
                "md5": "ba3eaf7c24192ce0cd9a79372f6331bd",
                "sha256": "cb7a5e3ffe05418672c26daef720db5f844de2fae2311ff60a520c5060edafef"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ba3eaf7c24192ce0cd9a79372f6331bd",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 16087201,
            "upload_time": "2025-07-16T02:41:36",
            "upload_time_iso_8601": "2025-07-16T02:41:36.794150Z",
            "url": "https://files.pythonhosted.org/packages/f0/de/f7407722c1f39ce17a11979a59aa8d58832e166758109d2cb8e9f82d558d/hdiffpatch-1.0.0-cp311-cp311-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ce13afea180cb68b8eef3325f47b6889dc7a1cba693e912148df362d6fc92309",
                "md5": "cc50bf08b776d6ae1d937d800901867d",
                "sha256": "2003622194a0efac449f84681d172d3b6f4090c9842744f5091003c982e5fc1e"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-win32.whl",
            "has_sig": false,
            "md5_digest": "cc50bf08b776d6ae1d937d800901867d",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 9418420,
            "upload_time": "2025-07-16T02:41:38",
            "upload_time_iso_8601": "2025-07-16T02:41:38.788368Z",
            "url": "https://files.pythonhosted.org/packages/ce/13/afea180cb68b8eef3325f47b6889dc7a1cba693e912148df362d6fc92309/hdiffpatch-1.0.0-cp311-cp311-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1b34f8006ee1ce394f095bbbd4f0a20ec77c5fb9143636650ee04803aea5134b",
                "md5": "4af02a57ac8a6f31b2181d193f1db9dd",
                "sha256": "041b4e169e8c6ebc982d79886f7533c60d5a4211eb846a044350d451bd3b06ae"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "4af02a57ac8a6f31b2181d193f1db9dd",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": "<4.0,>=3.9",
            "size": 9463725,
            "upload_time": "2025-07-16T02:41:40",
            "upload_time_iso_8601": "2025-07-16T02:41:40.977493Z",
            "url": "https://files.pythonhosted.org/packages/1b/34/f8006ee1ce394f095bbbd4f0a20ec77c5fb9143636650ee04803aea5134b/hdiffpatch-1.0.0-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f2620c843dd2c20f98db00e0935f53756a89eb3dd9cef882740e4a7be82949ad",
                "md5": "99cc78b6704f26acc9139b33c76a7896",
                "sha256": "82d64f41119a8e80adfa9eb3cc8072fd586b5a833c8ecb03f6b4b994095e36d1"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "99cc78b6704f26acc9139b33c76a7896",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 9857388,
            "upload_time": "2025-07-16T02:41:42",
            "upload_time_iso_8601": "2025-07-16T02:41:42.762997Z",
            "url": "https://files.pythonhosted.org/packages/f2/62/0c843dd2c20f98db00e0935f53756a89eb3dd9cef882740e4a7be82949ad/hdiffpatch-1.0.0-cp312-cp312-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "5ae0630e12e5b84b81cbf510e785d1f7821e31e31b4ee39876b6049860179428",
                "md5": "190d0051b634a673d3aa2c8ec04b9e03",
                "sha256": "f0d7fb92415a7a4901b796028ac7c048cd150ffdd20b9975bb6e4bb78cb387fb"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "190d0051b634a673d3aa2c8ec04b9e03",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 9738354,
            "upload_time": "2025-07-16T02:41:44",
            "upload_time_iso_8601": "2025-07-16T02:41:44.541075Z",
            "url": "https://files.pythonhosted.org/packages/5a/e0/630e12e5b84b81cbf510e785d1f7821e31e31b4ee39876b6049860179428/hdiffpatch-1.0.0-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c76bd3f744102a152de4451f64d5a66fc6ac8542ec7db05caca217821df75898",
                "md5": "a801f19d1833617486dcd2bda39219be",
                "sha256": "685f048c08c5f056e9f46eddbc452ea035a19b936f47e6063d006591682d9ebb"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "a801f19d1833617486dcd2bda39219be",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 14693858,
            "upload_time": "2025-07-16T02:41:46",
            "upload_time_iso_8601": "2025-07-16T02:41:46.696591Z",
            "url": "https://files.pythonhosted.org/packages/c7/6b/d3f744102a152de4451f64d5a66fc6ac8542ec7db05caca217821df75898/hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "bb1f606ebbc0cbf37881386f9098f26d3bda6ca89657bfc9c92591a949d41cde",
                "md5": "32db87daf87c4e702a3dc9462bf8edac",
                "sha256": "e3bcc9eafa1fe6aed764ba9237c14b6fe5d08691a67b67e8f12efc02521e3a00"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "32db87daf87c4e702a3dc9462bf8edac",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 14738147,
            "upload_time": "2025-07-16T02:41:50",
            "upload_time_iso_8601": "2025-07-16T02:41:50.240369Z",
            "url": "https://files.pythonhosted.org/packages/bb/1f/606ebbc0cbf37881386f9098f26d3bda6ca89657bfc9c92591a949d41cde/hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e9643287696c9e81d5caabbb366005f0fe77c2a38112ef8337dd87c191253b4a",
                "md5": "127f76d505c06156fce667ad3104fc3a",
                "sha256": "dc4f873cb2cda2cc7e42091b631e82db4ddd7a529ebb6c63833e8c7424dd1fa1"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "127f76d505c06156fce667ad3104fc3a",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 14713601,
            "upload_time": "2025-07-16T02:41:52",
            "upload_time_iso_8601": "2025-07-16T02:41:52.369673Z",
            "url": "https://files.pythonhosted.org/packages/e9/64/3287696c9e81d5caabbb366005f0fe77c2a38112ef8337dd87c191253b4a/hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "27ec2ae52cc9e486706da39a3e540b7aeebb52e1630d949d2d60294114324cac",
                "md5": "7b51853338b829fc6d948518db09b870",
                "sha256": "37adc048a6330db54ecc99cdb948e21132f7e0d784d8be62aca41e492dbd11a5"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "7b51853338b829fc6d948518db09b870",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 15026137,
            "upload_time": "2025-07-16T02:41:55",
            "upload_time_iso_8601": "2025-07-16T02:41:55.711623Z",
            "url": "https://files.pythonhosted.org/packages/27/ec/2ae52cc9e486706da39a3e540b7aeebb52e1630d949d2d60294114324cac/hdiffpatch-1.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b5e57f9332414a81edb0c5ceedcca73b977307f0d0df50749f515714a55faf0f",
                "md5": "2138d90690c31ad9b8f12d55992eacb2",
                "sha256": "0876a43445742c408c4101144513792159a31da51eb525efa729ab8a9b8f7ddb"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "2138d90690c31ad9b8f12d55992eacb2",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 15528875,
            "upload_time": "2025-07-16T02:41:57",
            "upload_time_iso_8601": "2025-07-16T02:41:57.766175Z",
            "url": "https://files.pythonhosted.org/packages/b5/e5/7f9332414a81edb0c5ceedcca73b977307f0d0df50749f515714a55faf0f/hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "c9b52f100716eda45b98cd9f544dbbd64d2962945f906064cf17bc35550579d1",
                "md5": "024066a856a5d01aa0c9f70bd4d062b9",
                "sha256": "3e2920040315d166e6f18e36f8ae543fdeb3cf8e8714e6bbe9c69067c703662d"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "024066a856a5d01aa0c9f70bd4d062b9",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 16002764,
            "upload_time": "2025-07-16T02:41:59",
            "upload_time_iso_8601": "2025-07-16T02:41:59.819824Z",
            "url": "https://files.pythonhosted.org/packages/c9/b5/2f100716eda45b98cd9f544dbbd64d2962945f906064cf17bc35550579d1/hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7b037590694cb2483274e66cd253440cad4307cc38b128aedbdddd3920159b50",
                "md5": "506d79484f11bd9e6c65b68eee459d06",
                "sha256": "49695b84243832c581e64e5afff63237eca5c5215de56257195ecfee3e5e18a3"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "506d79484f11bd9e6c65b68eee459d06",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 15736498,
            "upload_time": "2025-07-16T02:42:02",
            "upload_time_iso_8601": "2025-07-16T02:42:02.156669Z",
            "url": "https://files.pythonhosted.org/packages/7b/03/7590694cb2483274e66cd253440cad4307cc38b128aedbdddd3920159b50/hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7056c12272552af2b1880573bb81b3093f2fb1240894f2d9dc95b0d0b9c27cc4",
                "md5": "4aa1e7fb1c445846535524f49cec40fa",
                "sha256": "97c1abf08ad8ed648ae8f543d22a51c7fcce39ec8a19076c936e98a9e72d2466"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "4aa1e7fb1c445846535524f49cec40fa",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 16079621,
            "upload_time": "2025-07-16T02:42:04",
            "upload_time_iso_8601": "2025-07-16T02:42:04.271219Z",
            "url": "https://files.pythonhosted.org/packages/70/56/c12272552af2b1880573bb81b3093f2fb1240894f2d9dc95b0d0b9c27cc4/hdiffpatch-1.0.0-cp312-cp312-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2c0a803d7a1696af60d6a41d044c58dfcd9fb0610f43e51fdab9e8b74962cdca",
                "md5": "2d856cb00a42bc1379fb1598510621bc",
                "sha256": "f3028af48be4b19e4fa0e8f416d598ed3a4be58ff3fab647656aab5bf7b3fc68"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-win32.whl",
            "has_sig": false,
            "md5_digest": "2d856cb00a42bc1379fb1598510621bc",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 9416254,
            "upload_time": "2025-07-16T02:42:06",
            "upload_time_iso_8601": "2025-07-16T02:42:06.612753Z",
            "url": "https://files.pythonhosted.org/packages/2c/0a/803d7a1696af60d6a41d044c58dfcd9fb0610f43e51fdab9e8b74962cdca/hdiffpatch-1.0.0-cp312-cp312-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "3fd4c8ac11e67c31b1af6c24bf5b3258a667c290165bfbfc976268c7e3e09205",
                "md5": "c76b8f7b99794499ee5393d6479bd001",
                "sha256": "92319badcfe902c9842d03df62e32093d5962c4610ad7f524f4753ebfb3662db"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "c76b8f7b99794499ee5393d6479bd001",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": "<4.0,>=3.9",
            "size": 9461923,
            "upload_time": "2025-07-16T02:42:08",
            "upload_time_iso_8601": "2025-07-16T02:42:08.738770Z",
            "url": "https://files.pythonhosted.org/packages/3f/d4/c8ac11e67c31b1af6c24bf5b3258a667c290165bfbfc976268c7e3e09205/hdiffpatch-1.0.0-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "cb9562a04c2f289fb57d14a1ddaa48d7a87a5ed45a30863112d2924dd585d993",
                "md5": "90ba22dfcc55bfb3defc981137f3492d",
                "sha256": "79f5b29b53a6a044a06754ed12b2a4c0d2136d92b31238d78dc0e2697d2bc961"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "has_sig": false,
            "md5_digest": "90ba22dfcc55bfb3defc981137f3492d",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 9856996,
            "upload_time": "2025-07-16T02:42:10",
            "upload_time_iso_8601": "2025-07-16T02:42:10.604003Z",
            "url": "https://files.pythonhosted.org/packages/cb/95/62a04c2f289fb57d14a1ddaa48d7a87a5ed45a30863112d2924dd585d993/hdiffpatch-1.0.0-cp313-cp313-macosx_10_13_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "f2cc942403b19b3a650413ba62af27e9eed22d088468ebe63e7ff1c676062a65",
                "md5": "60dbad2091f24358fede6687eb2acf2d",
                "sha256": "6d0a11aeebdb0d04281a52c6c4909fbb106ae05fc17fd217ecd2742ff45f6906"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "60dbad2091f24358fede6687eb2acf2d",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 9737539,
            "upload_time": "2025-07-16T02:42:13",
            "upload_time_iso_8601": "2025-07-16T02:42:13.101325Z",
            "url": "https://files.pythonhosted.org/packages/f2/cc/942403b19b3a650413ba62af27e9eed22d088468ebe63e7ff1c676062a65/hdiffpatch-1.0.0-cp313-cp313-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "946c37ae762b14aabd7b898c26acc3006df7b6ee4f5a3557230eafd3e9ba44da",
                "md5": "b4b3a70c406a06e9a621fd1811685c0c",
                "sha256": "c3536d372ac6a536aa4078f3a3b95c7fd9246098b0c3b86ff7f0c02120946133"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "b4b3a70c406a06e9a621fd1811685c0c",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 14688982,
            "upload_time": "2025-07-16T02:42:15",
            "upload_time_iso_8601": "2025-07-16T02:42:15.780252Z",
            "url": "https://files.pythonhosted.org/packages/94/6c/37ae762b14aabd7b898c26acc3006df7b6ee4f5a3557230eafd3e9ba44da/hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "999ec232ef6d53b203c4380d610b0040995f73fdc56cf11c54674787488e5576",
                "md5": "23893fd0809b6a87cc0275c7ce4095b5",
                "sha256": "475e81f2bce16cb48fcf2aeb4a6ba229bde50cff8f9493286b905816de604858"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "23893fd0809b6a87cc0275c7ce4095b5",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 14733702,
            "upload_time": "2025-07-16T02:42:17",
            "upload_time_iso_8601": "2025-07-16T02:42:17.758177Z",
            "url": "https://files.pythonhosted.org/packages/99/9e/c232ef6d53b203c4380d610b0040995f73fdc56cf11c54674787488e5576/hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4469d89441f7a1b1db6ffef68c0f7003a1e81a1587fb3ddc67d49581c0aabee0",
                "md5": "1f997f4841a7c654b4982e421b661440",
                "sha256": "cdf0d49e8907493dea50a65a8d3c71bf0cc11b0793a20e48b1ab6d7ca3a8a51e"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "1f997f4841a7c654b4982e421b661440",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 14708469,
            "upload_time": "2025-07-16T02:42:21",
            "upload_time_iso_8601": "2025-07-16T02:42:21.203247Z",
            "url": "https://files.pythonhosted.org/packages/44/69/d89441f7a1b1db6ffef68c0f7003a1e81a1587fb3ddc67d49581c0aabee0/hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "10237b0ae968b913fa55ff3a60ec75cbc7fb631476b3f24c8e203b80640be906",
                "md5": "6faefd84e9d25a89b958fb17507a8ba0",
                "sha256": "0fea666a901b65b7b219c3628e5cbb32dbf6da7debf8b3068b06e283f338fc79"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "6faefd84e9d25a89b958fb17507a8ba0",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 15020618,
            "upload_time": "2025-07-16T02:42:23",
            "upload_time_iso_8601": "2025-07-16T02:42:23.265654Z",
            "url": "https://files.pythonhosted.org/packages/10/23/7b0ae968b913fa55ff3a60ec75cbc7fb631476b3f24c8e203b80640be906/hdiffpatch-1.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e5f717fbfaeacbaba69cbd7e333eff91b981bda38033981ae5984180b73fd859",
                "md5": "a33d22ac74374942ffb62fff7b7eec6f",
                "sha256": "c6a5d6ef68d4d141780b322e557bd0d0503d2db3cf1baf99a77353cea483cf95"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "a33d22ac74374942ffb62fff7b7eec6f",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 15524694,
            "upload_time": "2025-07-16T02:42:25",
            "upload_time_iso_8601": "2025-07-16T02:42:25.252878Z",
            "url": "https://files.pythonhosted.org/packages/e5/f7/17fbfaeacbaba69cbd7e333eff91b981bda38033981ae5984180b73fd859/hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "ad97a7dfc393c5cccdbcb442bfcfccca73fc587981e4605ce0f12ea77ce82ddf",
                "md5": "ed6dd36387b7b299198746f7897cc0e9",
                "sha256": "dce8cfbd8c3bd4965e47c17875fb5abc9d1b1bfd6949f23c00d17043abd237d0"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "ed6dd36387b7b299198746f7897cc0e9",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 15998863,
            "upload_time": "2025-07-16T02:42:27",
            "upload_time_iso_8601": "2025-07-16T02:42:27.455953Z",
            "url": "https://files.pythonhosted.org/packages/ad/97/a7dfc393c5cccdbcb442bfcfccca73fc587981e4605ce0f12ea77ce82ddf/hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b67352cabde05e334351ce21b9b33185c23f4e5bd2b5f15c90f07b8abf6da26b",
                "md5": "b88f5bf16eb4aa6464da618c1cf4b159",
                "sha256": "5133838c7fe6fa09307827b4ff697419e6a0dd44efc1b58c65a5e80ef0620641"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "b88f5bf16eb4aa6464da618c1cf4b159",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 15732679,
            "upload_time": "2025-07-16T02:42:29",
            "upload_time_iso_8601": "2025-07-16T02:42:29.478161Z",
            "url": "https://files.pythonhosted.org/packages/b6/73/52cabde05e334351ce21b9b33185c23f4e5bd2b5f15c90f07b8abf6da26b/hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "87b9291c6be447a35b3f35a7f1140909b2c29df2048cd81ce0de9b35edac7ec5",
                "md5": "86148d684bfb9cd7c53f9566f0e84aa5",
                "sha256": "f742d223ebc64b397f4e4cd7ca8ae1f715f287026c819a8a39ef2c6e8b090500"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "86148d684bfb9cd7c53f9566f0e84aa5",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 16072684,
            "upload_time": "2025-07-16T02:42:31",
            "upload_time_iso_8601": "2025-07-16T02:42:31.506285Z",
            "url": "https://files.pythonhosted.org/packages/87/b9/291c6be447a35b3f35a7f1140909b2c29df2048cd81ce0de9b35edac7ec5/hdiffpatch-1.0.0-cp313-cp313-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2df98d2b2501fb06015bd8e407b6cabc6e7119d940629990eaa33151b0207665",
                "md5": "1fd12913cc821ef83df0e21c32e25f3c",
                "sha256": "7ccb80ae52b90d069d2abd5220696a350aca26bb0e6280863eae5268bf9095bd"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-win32.whl",
            "has_sig": false,
            "md5_digest": "1fd12913cc821ef83df0e21c32e25f3c",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 9416137,
            "upload_time": "2025-07-16T02:42:33",
            "upload_time_iso_8601": "2025-07-16T02:42:33.389525Z",
            "url": "https://files.pythonhosted.org/packages/2d/f9/8d2b2501fb06015bd8e407b6cabc6e7119d940629990eaa33151b0207665/hdiffpatch-1.0.0-cp313-cp313-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "11f236ce7607ac2b78a280c3097f1dfad3432b9f7e7165a98a595a8640af94ec",
                "md5": "14cd17f52ffef406caf9d82d7143eb62",
                "sha256": "57d7318412f9bed26b04510f49f5a838f85419b91b96187e9ac8ca9b9c5dfcaf"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp313-cp313-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "14cd17f52ffef406caf9d82d7143eb62",
            "packagetype": "bdist_wheel",
            "python_version": "cp313",
            "requires_python": "<4.0,>=3.9",
            "size": 9461983,
            "upload_time": "2025-07-16T02:42:35",
            "upload_time_iso_8601": "2025-07-16T02:42:35.370111Z",
            "url": "https://files.pythonhosted.org/packages/11/f2/36ce7607ac2b78a280c3097f1dfad3432b9f7e7165a98a595a8640af94ec/hdiffpatch-1.0.0-cp313-cp313-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2f31932f56c2855255a2da0e4fccd27cf7ed92d1724c7cded05367468b4f0b52",
                "md5": "c9112eedb48796de444d744ab4a2b598",
                "sha256": "c0f4139783aaecde6e2d4b699a00b2a9f3e5949621271183f95e34de7323c679"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "c9112eedb48796de444d744ab4a2b598",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 9858372,
            "upload_time": "2025-07-16T02:42:37",
            "upload_time_iso_8601": "2025-07-16T02:42:37.263044Z",
            "url": "https://files.pythonhosted.org/packages/2f/31/932f56c2855255a2da0e4fccd27cf7ed92d1724c7cded05367468b4f0b52/hdiffpatch-1.0.0-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4d280364ecae0c7863c2364c64093488d4d8c22691f4c37ae66f744a1d4b83e6",
                "md5": "cdd639ac623402ebd091fa67a42d8709",
                "sha256": "af3453cd6103c5a5670f15b4892a0e1699fbed35e253fca4f07489b4103247f1"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "cdd639ac623402ebd091fa67a42d8709",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 9739119,
            "upload_time": "2025-07-16T02:42:39",
            "upload_time_iso_8601": "2025-07-16T02:42:39.439871Z",
            "url": "https://files.pythonhosted.org/packages/4d/28/0364ecae0c7863c2364c64093488d4d8c22691f4c37ae66f744a1d4b83e6/hdiffpatch-1.0.0-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "41545fa63545824ddd8e553e5358dfb158fca09f3670869e08de961a643a46bf",
                "md5": "d285d0aabad105f95cb61aec5bc83353",
                "sha256": "9fea3e92a2e3e3dbc440413f85963d0e2fa4bc6a5f177fe028e7ddedfeec3d14"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "has_sig": false,
            "md5_digest": "d285d0aabad105f95cb61aec5bc83353",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 14677681,
            "upload_time": "2025-07-16T02:42:41",
            "upload_time_iso_8601": "2025-07-16T02:42:41.860766Z",
            "url": "https://files.pythonhosted.org/packages/41/54/5fa63545824ddd8e553e5358dfb158fca09f3670869e08de961a643a46bf/hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "08866c77724ca601c75023284b5de875f684a7c9dee53bbe277e0625a150cb32",
                "md5": "df4c7b6b2590cb401b081fb03ddbaebc",
                "sha256": "4dadbf2182b66e731a972e62b1bd578d4ee800ffe9089a8da31f6003dd8d0b22"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "has_sig": false,
            "md5_digest": "df4c7b6b2590cb401b081fb03ddbaebc",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 14724615,
            "upload_time": "2025-07-16T02:42:44",
            "upload_time_iso_8601": "2025-07-16T02:42:44.543257Z",
            "url": "https://files.pythonhosted.org/packages/08/86/6c77724ca601c75023284b5de875f684a7c9dee53bbe277e0625a150cb32/hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_i686.manylinux_2_12_i686.manylinux2010_i686.manylinux2014_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "7eae1bd2bf1fcf8a2f0c1b2bb17e85162c22db5c261739b7f80d8bd68b283eb7",
                "md5": "9ba81f5a992bde273aaf1dc041bed5f3",
                "sha256": "d573735d9c1a3a836add2ec4645a50678de9313a6161421b7941279168810e24"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "9ba81f5a992bde273aaf1dc041bed5f3",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 14704650,
            "upload_time": "2025-07-16T02:42:46",
            "upload_time_iso_8601": "2025-07-16T02:42:46.509077Z",
            "url": "https://files.pythonhosted.org/packages/7e/ae/1bd2bf1fcf8a2f0c1b2bb17e85162c22db5c261739b7f80d8bd68b283eb7/hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "b3bf4492a0cdac19c4bed1f71742c3b7b2a5889b45d4714070b4fbaa5dbecce3",
                "md5": "1edd95972148bba9b177437373bf8d07",
                "sha256": "75891a8e61ef7abfa71959bf50caf44c99589a8bf41398c4039eb09054dd9fdc"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "1edd95972148bba9b177437373bf8d07",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 15000912,
            "upload_time": "2025-07-16T02:42:48",
            "upload_time_iso_8601": "2025-07-16T02:42:48.913773Z",
            "url": "https://files.pythonhosted.org/packages/b3/bf/4492a0cdac19c4bed1f71742c3b7b2a5889b45d4714070b4fbaa5dbecce3/hdiffpatch-1.0.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "be836c8d99986a0943caaef1de5e5f8ba26b3e3b47482056bcc468766047232e",
                "md5": "648f708b28f9470b0576a678334a0197",
                "sha256": "c32be59781d3224acf8a0df80c809fe3253f8ce086975f37c7d81fe0d294bae3"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_aarch64.whl",
            "has_sig": false,
            "md5_digest": "648f708b28f9470b0576a678334a0197",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 15513172,
            "upload_time": "2025-07-16T02:42:50",
            "upload_time_iso_8601": "2025-07-16T02:42:50.913763Z",
            "url": "https://files.pythonhosted.org/packages/be/83/6c8d99986a0943caaef1de5e5f8ba26b3e3b47482056bcc468766047232e/hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_aarch64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "83fc023d069d107e903f0edc2e11c90f1437e7c3226ddc92f65a741af6c1597b",
                "md5": "1360a88c4e885f8aa918c543cd2e84ef",
                "sha256": "9c64b2fb5af57207cd95f48c3d890e02cb9ca6cff6c150888954e2bb7e06b82c"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_i686.whl",
            "has_sig": false,
            "md5_digest": "1360a88c4e885f8aa918c543cd2e84ef",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 15993662,
            "upload_time": "2025-07-16T02:42:52",
            "upload_time_iso_8601": "2025-07-16T02:42:52.963338Z",
            "url": "https://files.pythonhosted.org/packages/83/fc/023d069d107e903f0edc2e11c90f1437e7c3226ddc92f65a741af6c1597b/hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_i686.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2ffc24b7b324977b3b77d74f122bfd7c3a9a7c971808408ae9be3ef8c0168f75",
                "md5": "8e068707754dd27cae4104e9cbfafc01",
                "sha256": "4abc71c2d713b24b4dc4fc64dc30399aa93ec3bb9440a4c088d5c4f31e48a11c"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_ppc64le.whl",
            "has_sig": false,
            "md5_digest": "8e068707754dd27cae4104e9cbfafc01",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 15738140,
            "upload_time": "2025-07-16T02:42:55",
            "upload_time_iso_8601": "2025-07-16T02:42:55.704136Z",
            "url": "https://files.pythonhosted.org/packages/2f/fc/24b7b324977b3b77d74f122bfd7c3a9a7c971808408ae9be3ef8c0168f75/hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_ppc64le.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "94c78e333f1e777bb257db16abe733c8d611ee339084abd9d22fab96ad375992",
                "md5": "bd25d209eedc4199384a31f633e1939a",
                "sha256": "afde880fdbadf96d3ff840ef59cd943480e57585b335d699d6213da292bab705"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bd25d209eedc4199384a31f633e1939a",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 16059140,
            "upload_time": "2025-07-16T02:42:57",
            "upload_time_iso_8601": "2025-07-16T02:42:57.782624Z",
            "url": "https://files.pythonhosted.org/packages/94/c7/8e333f1e777bb257db16abe733c8d611ee339084abd9d22fab96ad375992/hdiffpatch-1.0.0-cp39-cp39-musllinux_1_2_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e6242c958ba7d8f8ff14fbae4756be8089eff5ede2231653438cf223ecb25474",
                "md5": "dc6a53d114a60a0c39dbe8b933b6a788",
                "sha256": "aa7364b5cfbeaea1b8ccd900133ffab598a072a749ee3324325293663f49f05e"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-win32.whl",
            "has_sig": false,
            "md5_digest": "dc6a53d114a60a0c39dbe8b933b6a788",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 9418911,
            "upload_time": "2025-07-16T02:42:59",
            "upload_time_iso_8601": "2025-07-16T02:42:59.739732Z",
            "url": "https://files.pythonhosted.org/packages/e6/24/2c958ba7d8f8ff14fbae4756be8089eff5ede2231653438cf223ecb25474/hdiffpatch-1.0.0-cp39-cp39-win32.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "0ca38d366c4efe15c66da23997836d5e71fa00a67a731543b0383bbb59c2e4eb",
                "md5": "d3fa3d791888c8be5c1809a2897a3103",
                "sha256": "97ff1184671c7cee21d057ece95a288cee7a35ade4189b864934e0eea00e54f7"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "d3fa3d791888c8be5c1809a2897a3103",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": "<4.0,>=3.9",
            "size": 9463927,
            "upload_time": "2025-07-16T02:43:01",
            "upload_time_iso_8601": "2025-07-16T02:43:01.549034Z",
            "url": "https://files.pythonhosted.org/packages/0c/a3/8d366c4efe15c66da23997836d5e71fa00a67a731543b0383bbb59c2e4eb/hdiffpatch-1.0.0-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "978c0c1e6e17ec7c04f21ece20a590fa9e2a038308516bd2fa66c02945bf018a",
                "md5": "de756942fb384465bd287e2ffca26a74",
                "sha256": "6c69eca18893d8272d6ee2158f587179051a3edb7ae1538ab233a5dec6abd7cf"
            },
            "downloads": -1,
            "filename": "hdiffpatch-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "de756942fb384465bd287e2ffca26a74",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.9",
            "size": 7979395,
            "upload_time": "2025-07-16T02:43:03",
            "upload_time_iso_8601": "2025-07-16T02:43:03.293153Z",
            "url": "https://files.pythonhosted.org/packages/97/8c/0c1e6e17ec7c04f21ece20a590fa9e2a038308516bd2fa66c02945bf018a/hdiffpatch-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-07-16 02:43:03",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "BrianPugh",
    "github_project": "hdiffpatch-python",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "hdiffpatch"
}
        
Elapsed time: 1.42259s