Skip to content

Instantly share code, notes, and snippets.

@julian-klode
Created March 17, 2026 14:18
Show Gist options
  • Select an option

  • Save julian-klode/f8b1f8a278958bfe1da2dfe01c7330a9 to your computer and use it in GitHub Desktop.

Select an option

Save julian-klode/f8b1f8a278958bfe1da2dfe01c7330a9 to your computer and use it in GitHub Desktop.
This file has been truncated, but you can view the full file.
diff --git b/rust-vendor/adler2/.cargo_vcs_info.json b/rust-vendor/adler2/.cargo_vcs_info.json
new file mode 100644
index 0000000..23ea665
--- /dev/null
+++ b/rust-vendor/adler2/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "89a031a0f42eeff31c70dc598b398cbf31f1680f"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/adler2/Cargo.toml.orig b/rust-vendor/adler2/Cargo.toml.orig
new file mode 100644
index 0000000..78ffd9a
--- /dev/null
+++ b/rust-vendor/adler2/Cargo.toml.orig
@@ -0,0 +1,71 @@
+[package]
+name = "adler2"
+version = "2.0.1"
+authors = ["Jonas Schievink <jonasschievink@gmail.com>", "oyvindln <oyvindln@users.noreply.github.com>"]
+description = "A simple clean-room implementation of the Adler-32 checksum"
+documentation = "https://docs.rs/adler2/"
+repository = "https://github.com/oyvindln/adler2"
+keywords = ["checksum", "integrity", "hash", "adler32", "zlib"]
+categories = ["algorithms"]
+readme = "README.md"
+license = "0BSD OR MIT OR Apache-2.0"
+edition = "2021"
+exclude = [".*"]
+
+[[bench]]
+name = "bench"
+harness = false
+
+[dependencies]
+# Internal features, only used when building as part of libstd, not part of the
+# stable interface of this crate.
+core = { version = '1.0.0', optional = true, package = 'rustc-std-workspace-core' }
+
+[dev-dependencies]
+## Messes with minimum rust version and drags in deps just for running tests
+## so just comment out for now and enable manually when needed for enabling benches
+## criterion = "0.3.2"
+
+[features]
+# Disable default features to enable `#![no_std]` support.
+default = ["std"]
+std = []
+
+# Internal feature, only used when building as part of libstd, not part of the
+# stable interface of this crate.
+rustc-dep-of-std = ['core']
+
+
+[package.metadata.docs.rs]
+rustdoc-args = [ "--cfg=docsrs" ]
+
+# cargo-release configuration
+[package.metadata.release]
+tag-message = "{{version}}"
+no-dev-version = true
+pre-release-commit-message = "Release {{version}}"
+
+# Change the changelog's `Unreleased` section to refer to this release and
+# prepend a new `Unreleased` section
+[[package.metadata.release.pre-release-replacements]]
+file = "CHANGELOG.md"
+search = "## Unreleased\n"
+replace = """
+## Unreleased
+
+No changes.
+
+## [{{version}} - {{date}}](https://github.com/jonas-schievink/adler/releases/tag/v{{version}})
+"""
+
+# Bump the version inside the example manifest in `README.md`
+[[package.metadata.release.pre-release-replacements]]
+file = "README.md"
+search = 'adler = "[a-z0-9\\.-]+"'
+replace = 'adler = "{{version}}"'
+
+# Bump the version referenced by the `html_root_url` attribute in `lib.rs`
+[[package.metadata.release.pre-release-replacements]]
+file = "src/lib.rs"
+search = "https://docs.rs/adler/[a-z0-9\\.-]+"
+replace = "https://docs.rs/adler/{{version}}"
diff --git b/rust-vendor/aho-corasick/.cargo_vcs_info.json b/rust-vendor/aho-corasick/.cargo_vcs_info.json
new file mode 100644
index 0000000..51b4110
--- /dev/null
+++ b/rust-vendor/aho-corasick/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "17f8b32e3b7c845ef3c5429b823804f552f14ec9"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/aho-corasick/.github/FUNDING.yml b/rust-vendor/aho-corasick/.github/FUNDING.yml
new file mode 100644
index 0000000..2869fec
--- /dev/null
+++ b/rust-vendor/aho-corasick/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: [BurntSushi]
diff --git b/rust-vendor/aho-corasick/.github/workflows/ci.yml b/rust-vendor/aho-corasick/.github/workflows/ci.yml
new file mode 100644
index 0000000..f1b34cf
--- /dev/null
+++ b/rust-vendor/aho-corasick/.github/workflows/ci.yml
@@ -0,0 +1,148 @@
+name: ci
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+ schedule:
+ - cron: '00 01 * * *'
+
+# The section is needed to drop write-all permissions that are granted on
+# `schedule` event. By specifying any permission explicitly all others are set
+# to none. By using the principle of least privilege the damage a compromised
+# workflow can do (because of an injection or compromised third party tool or
+# action) is restricted. Currently the worklow doesn't need any additional
+# permission except for pulling the code. Adding labels to issues, commenting
+# on pull-requests, etc. may need additional permissions:
+#
+# Syntax for this section:
+# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
+#
+# Reference for how to assign permissions on a job-by-job basis:
+# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
+#
+# Reference for available permissions that we can enable if needed:
+# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token
+permissions:
+ # to fetch code (actions/checkout)
+ contents: read
+
+jobs:
+ test:
+ name: test
+ env:
+ # For some builds, we use cross to test on 32-bit and big-endian
+ # systems.
+ CARGO: cargo
+ # When CARGO is set to CROSS, TARGET is set to `--target matrix.target`.
+ # Note that we only use cross on Linux, so setting a target on a
+ # different OS will just use normal cargo.
+ TARGET:
+ # Bump this as appropriate. We pin to a version to make sure CI
+ # continues to work as cross releases in the past have broken things
+ # in subtle ways.
+ CROSS_VERSION: v0.2.5
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - build: pinned
+ os: ubuntu-latest
+ rust: 1.60.0
+ - build: stable
+ os: ubuntu-latest
+ rust: stable
+ - build: stable-x86
+ os: ubuntu-latest
+ rust: stable
+ target: i686-unknown-linux-gnu
+ - build: stable-aarch64
+ os: ubuntu-latest
+ rust: stable
+ target: aarch64-unknown-linux-gnu
+ - build: stable-powerpc64
+ os: ubuntu-latest
+ rust: stable
+ target: powerpc64-unknown-linux-gnu
+ - build: stable-s390x
+ os: ubuntu-latest
+ rust: stable
+ target: s390x-unknown-linux-gnu
+ - build: beta
+ os: ubuntu-latest
+ rust: beta
+ - build: nightly
+ os: ubuntu-latest
+ rust: nightly
+ - build: macos
+ os: macos-latest
+ rust: stable
+ - build: win-msvc
+ os: windows-latest
+ rust: stable
+ - build: win-gnu
+ os: windows-latest
+ rust: stable-x86_64-gnu
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Install and configure Cross
+ if: matrix.os == 'ubuntu-latest' && matrix.target != ''
+ run: |
+ # In the past, new releases of 'cross' have broken CI. So for now, we
+ # pin it. We also use their pre-compiled binary releases because cross
+ # has over 100 dependencies and takes a bit to compile.
+ dir="$RUNNER_TEMP/cross-download"
+ mkdir "$dir"
+ echo "$dir" >> $GITHUB_PATH
+ cd "$dir"
+ curl -LO "https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz"
+ tar xf cross-x86_64-unknown-linux-musl.tar.gz
+
+ # We used to install 'cross' from master, but it kept failing. So now
+ # we build from a known-good version until 'cross' becomes more stable
+ # or we find an alternative. Notably, between v0.2.1 and current
+ # master (2022-06-14), the number of Cross's dependencies has doubled.
+ echo "CARGO=cross" >> $GITHUB_ENV
+ echo "TARGET=--target ${{ matrix.target }}" >> $GITHUB_ENV
+ - name: Show command used for Cargo
+ run: |
+ echo "cargo command is: ${{ env.CARGO }}"
+ echo "target flag is: ${{ env.TARGET }}"
+ - name: Show CPU info for debugging
+ if: matrix.os == 'ubuntu-latest'
+ run: lscpu
+ # See: https://github.com/rust-lang/regex/blob/a2887636930156023172e4b376a6febad4e49120/.github/workflows/ci.yml#L145-L163
+ - name: Pin memchr to 2.6.2
+ if: matrix.build == 'pinned'
+ run: cargo update -p memchr --precise 2.6.2
+ - run: ${{ env.CARGO }} build --verbose $TARGET
+ - run: ${{ env.CARGO }} doc --verbose $TARGET
+ - run: ${{ env.CARGO }} test --verbose $TARGET
+ - run: ${{ env.CARGO }} test --lib --verbose --no-default-features --features std,perf-literal $TARGET
+ - run: ${{ env.CARGO }} test --lib --verbose --no-default-features $TARGET
+ - run: ${{ env.CARGO }} test --lib --verbose --no-default-features --features std $TARGET
+ - run: ${{ env.CARGO }} test --lib --verbose --no-default-features --features perf-literal $TARGET
+ - run: ${{ env.CARGO }} test --lib --verbose --no-default-features --features std,perf-literal,logging $TARGET
+ - if: matrix.build == 'nightly'
+ run: ${{ env.CARGO }} build --manifest-path aho-corasick-debug/Cargo.toml $TARGET
+
+ rustfmt:
+ name: rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: rustfmt
+ - name: Check formatting
+ run: |
+ cargo fmt --all -- --check
diff --git b/rust-vendor/aho-corasick/.vim/coc-settings.json b/rust-vendor/aho-corasick/.vim/coc-settings.json
new file mode 100644
index 0000000..887eb6f
--- /dev/null
+++ b/rust-vendor/aho-corasick/.vim/coc-settings.json
@@ -0,0 +1,12 @@
+{
+ "rust-analyzer.linkedProjects": [
+ "aho-corasick-debug/Cargo.toml",
+ "benchmarks/engines/rust-aho-corasick/Cargo.toml",
+ "benchmarks/engines/rust-daachorse/Cargo.toml",
+ "benchmarks/engines/rust-jetscii/Cargo.toml",
+ "benchmarks/engines/naive/Cargo.toml",
+ "benchmarks/shared/Cargo.toml",
+ "fuzz/Cargo.toml",
+ "Cargo.toml"
+ ]
+}
diff --git b/rust-vendor/aho-corasick/Cargo.toml.orig b/rust-vendor/aho-corasick/Cargo.toml.orig
new file mode 100644
index 0000000..dbfa7a9
--- /dev/null
+++ b/rust-vendor/aho-corasick/Cargo.toml.orig
@@ -0,0 +1,74 @@
+[package]
+name = "aho-corasick"
+version = "1.1.4" #:version
+authors = ["Andrew Gallant <jamslam@gmail.com>"]
+description = "Fast multiple substring searching."
+homepage = "https://github.com/BurntSushi/aho-corasick"
+repository = "https://github.com/BurntSushi/aho-corasick"
+readme = "README.md"
+keywords = ["string", "search", "text", "pattern", "multi"]
+license = "Unlicense OR MIT"
+categories = ["text-processing"]
+autotests = false
+exclude = ["/aho-corasick-debug", "/benchmarks", "/tmp"]
+edition = "2021"
+rust-version = "1.60.0"
+
+[lib]
+name = "aho_corasick"
+
+[features]
+default = ["std", "perf-literal"]
+std = ["memchr?/std"]
+
+# Enables prefilter optimizations that depend on external crates.
+perf-literal = ["dep:memchr"]
+
+# Enable logging via the 'log' crate. This is useful for seeing messages about
+# internal decisions and metrics. For example, how the choice of the internal
+# Aho-Corasick implementation is used or the heap usage of an automaton.
+logging = ["dep:log"]
+
+# Provides a trait impl for fst::Automaton for nfa::noncontiguous::NFA,
+# nfa::contiguous::NFA and dfa::DFA. This is useful for searching an
+# FST with an Aho-Corasick automaton. Note that this does not apply
+# to the top-level 'AhoCorasick' type, as it does not implement the
+# aho_corasick::automaton::Automaton trait, and thus enabling this feature does
+# not cause it to implement fst::Automaton either.
+#
+# NOTE: Currently this feature is not available as `fst` is not at 1.0 yet,
+# and this would make `fst` a public dependency. If you absolutely need this,
+# you can copy the (very small) src/transducer.rs file to your tree. It
+# specifically does not use any private APIs and should work after replacing
+# 'crate::' with 'aho_corasick::'.
+#
+# NOTE: I think my current plan is to flip this around an add an optional
+# dependency on 'aho-corasick' to the 'fst' crate and move the trait impls
+# there. But I haven't gotten around to it yet.
+# transducer = ["fst"]
+
+[dependencies]
+log = { version = "0.4.17", optional = true }
+memchr = { version = "2.4.0", default-features = false, optional = true }
+
+[dev-dependencies]
+doc-comment = "0.3.3"
+# fst = "0.4.5"
+
+[package.metadata.docs.rs]
+# We want to document all features.
+all-features = true
+# This opts into a nightly unstable option to show the features that need to be
+# enabled for public API items. To do that, we set 'docsrs', and when that's
+# enabled, we enable the 'doc_cfg' feature.
+#
+# To test this locally, run:
+#
+# RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features
+rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
+
+[profile.release]
+debug = true
+
+[profile.bench]
+debug = true
diff --git b/rust-vendor/allocator-api2/.cargo_vcs_info.json b/rust-vendor/allocator-api2/.cargo_vcs_info.json
new file mode 100644
index 0000000..3ec5f17
--- /dev/null
+++ b/rust-vendor/allocator-api2/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "63cd7fcc2f8854b5821c7054d026e8a4647acde1"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/allocator-api2/Cargo.toml.orig b/rust-vendor/allocator-api2/Cargo.toml.orig
new file mode 100644
index 0000000..c57a2d9
--- /dev/null
+++ b/rust-vendor/allocator-api2/Cargo.toml.orig
@@ -0,0 +1,30 @@
+[package]
+name = "allocator-api2"
+version = "0.2.21"
+edition = "2018"
+authors = ["Zakarum <zaq.dev@icloud.com>"]
+license = "MIT OR Apache-2.0"
+documentation = "https://docs.rs/allocator-api2"
+homepage = "https://github.com/zakarumych/allocator-api2"
+repository = "https://github.com/zakarumych/allocator-api2"
+readme = "README.md"
+description = "Mirror of Rust's allocator API"
+rust-version = "1.63"
+
+[features]
+alloc = []
+std = ["alloc"]
+default = ["std"]
+nightly = []
+fresh-rust = []
+
+[dependencies]
+serde = { version = "1.0", optional = true }
+
+[workspace]
+members = ["tests"]
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = [
+ 'cfg(no_global_oom_handling)',
+] }
diff --git b/rust-vendor/ansi-width/.cargo_vcs_info.json b/rust-vendor/ansi-width/.cargo_vcs_info.json
new file mode 100644
index 0000000..fff7415
--- /dev/null
+++ b/rust-vendor/ansi-width/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "65caa0fd8794d47a2a97ead700e0ec7431acce9d"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/ansi-width/.github/workflows/ci.yml b/rust-vendor/ansi-width/.github/workflows/ci.yml
new file mode 100644
index 0000000..99c725b
--- /dev/null
+++ b/rust-vendor/ansi-width/.github/workflows/ci.yml
@@ -0,0 +1,146 @@
+name: CI # Continuous Integration
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+
+ test:
+ name: Test Suite
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ - uses: Swatinem/rust-cache@v2
+ - run: cargo test --all-features --workspace
+
+ rustfmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ components: rustfmt
+ - uses: Swatinem/rust-cache@v2
+ - name: Check formatting
+ run: cargo fmt --all -- --check
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ components: clippy
+ - uses: Swatinem/rust-cache@v2
+ - name: Clippy check
+ run: cargo clippy --all-targets --all-features --workspace -- -D warnings
+
+ docs:
+ name: Docs
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ - uses: Swatinem/rust-cache@v2
+ - name: Check documentation
+ env:
+ RUSTDOCFLAGS: -D warnings
+ run: cargo doc
+
+ coverage:
+ name: Code Coverage
+ runs-on: ${{ matrix.job.os }}
+ strategy:
+ fail-fast: true
+ matrix:
+ job:
+ - { os: ubuntu-latest , features: unix }
+ - { os: macos-latest , features: macos }
+ - { os: windows-latest , features: windows }
+ steps:
+ - uses: actions/checkout@v4
+ - name: Initialize workflow variables
+ id: vars
+ shell: bash
+ run: |
+ ## VARs setup
+ outputs() { step_id="vars"; for var in "$@" ; do echo steps.${step_id}.outputs.${var}="${!var}"; echo "${var}=${!var}" >> $GITHUB_OUTPUT; done; }
+ # toolchain
+ TOOLCHAIN="nightly" ## default to "nightly" toolchain (required for certain required unstable compiler flags) ## !maint: refactor when stable channel has needed support
+ # * specify gnu-type TOOLCHAIN for windows; `grcov` requires gnu-style code coverage data files
+ case ${{ matrix.job.os }} in windows-*) TOOLCHAIN="$TOOLCHAIN-x86_64-pc-windows-gnu" ;; esac;
+ # * use requested TOOLCHAIN if specified
+ if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
+ outputs TOOLCHAIN
+ # target-specific options
+ # * CARGO_FEATURES_OPTION
+ CARGO_FEATURES_OPTION='--all -- --check' ; ## default to '--all-features' for code coverage
+ # * CODECOV_FLAGS
+ CODECOV_FLAGS=$( echo "${{ matrix.job.os }}" | sed 's/[^[:alnum:]]/_/g' )
+ outputs CODECOV_FLAGS
+
+ - name: rust toolchain ~ install
+ uses: dtolnay/rust-toolchain@nightly
+ - name: Test
+ run: cargo test ${{ steps.vars.outputs.CARGO_FEATURES_OPTION }} --no-fail-fast
+ env:
+ CARGO_INCREMENTAL: "0"
+ RUSTC_WRAPPER: ""
+ RUSTFLAGS: "-Zprofile -Ccodegen-units=1 -Copt-level=0 -Clink-dead-code -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort"
+ RUSTDOCFLAGS: "-Cpanic=abort"
+ - name: "`grcov` ~ install"
+ id: build_grcov
+ shell: bash
+ run: |
+ git clone https://github.com/mozilla/grcov.git ~/grcov/
+ cd ~/grcov
+ # Hardcode the version of crossbeam-epoch. See
+ # https://github.com/uutils/coreutils/issues/3680
+ sed -i -e "s|tempfile =|crossbeam-epoch = \"=0.9.8\"\ntempfile =|" Cargo.toml
+ cargo install --path .
+ cd -
+# Uncomment when the upstream issue
+# https://github.com/mozilla/grcov/issues/849 is fixed
+# uses: actions-rs/install@v0.1
+# with:
+# crate: grcov
+# version: latest
+# use-tool-cache: false
+ - name: Generate coverage data (via `grcov`)
+ id: coverage
+ shell: bash
+ run: |
+ ## Generate coverage data
+ COVERAGE_REPORT_DIR="target/debug"
+ COVERAGE_REPORT_FILE="${COVERAGE_REPORT_DIR}/lcov.info"
+ mkdir -p "${COVERAGE_REPORT_DIR}"
+ # display coverage files
+ grcov . --output-type files --ignore build.rs --ignore "vendor/*" --ignore "/*" --ignore "[a-zA-Z]:/*" --excl-br-line "^\s*((debug_)?assert(_eq|_ne)?!|#\[derive\()" | sort --unique
+ # generate coverage report
+ grcov . --output-type lcov --output-path "${COVERAGE_REPORT_FILE}" --branch --ignore build.rs --ignore "vendor/*" --ignore "/*" --ignore "[a-zA-Z]:/*" --excl-br-line "^\s*((debug_)?assert(_eq|_ne)?!|#\[derive\()"
+ echo "name=report::${COVERAGE_REPORT_FILE}" >> $GITHUB_OUTPUT
+ - name: Upload coverage results (to Codecov.io)
+ uses: codecov/codecov-action@v4
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ file: ${{ steps.coverage.outputs.report }}
+ flags: ${{ steps.vars.outputs.CODECOV_FLAGS }}
+ name: codecov-umbrella
+ fail_ci_if_error: false
diff --git b/rust-vendor/ansi-width/Cargo.toml.orig b/rust-vendor/ansi-width/Cargo.toml.orig
new file mode 100644
index 0000000..a73937d
--- /dev/null
+++ b/rust-vendor/ansi-width/Cargo.toml.orig
@@ -0,0 +1,14 @@
+[package]
+name = "ansi-width"
+description = "Calculate the width of a string when printed to the terminal"
+license = "MIT"
+readme = "README.md"
+authors = ["uutils developers"]
+version = "0.1.0"
+edition = "2021"
+rust-version = "1.70"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+unicode-width = "0.1.11"
diff --git b/rust-vendor/anstream/.cargo_vcs_info.json b/rust-vendor/anstream/.cargo_vcs_info.json
new file mode 100644
index 0000000..6082274
--- /dev/null
+++ b/rust-vendor/anstream/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f7aff1c56febbd5ec054da313c730cd7c1a44b5c"
+ },
+ "path_in_vcs": "crates/anstream"
+}
\ No newline at end of file
diff --git b/rust-vendor/anstream/Cargo.toml.orig b/rust-vendor/anstream/Cargo.toml.orig
new file mode 100644
index 0000000..942ac10
--- /dev/null
+++ b/rust-vendor/anstream/Cargo.toml.orig
@@ -0,0 +1,72 @@
+[package]
+name = "anstream"
+version = "0.6.21"
+description = "IO stream adapters for writing colored text that will gracefully degrade according to your terminal's capabilities."
+categories = ["command-line-interface"]
+keywords = ["ansi", "terminal", "color", "strip", "wincon"]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD", exactly=1},
+]
+
+[features]
+default = ["auto", "wincon"]
+auto = ["dep:anstyle-query"]
+wincon = ["dep:anstyle-wincon"]
+# Enable in `dev-dependencies` to make sure output is captured for tests
+test = []
+
+[dependencies]
+anstyle = { version = "1.0.0", path = "../anstyle" }
+anstyle-parse = { version = "0.2.0", path = "../anstyle-parse" }
+colorchoice = { version = "1.0.0", path = "../colorchoice" }
+anstyle-query = { version = "1.0.0", path = "../anstyle-query", optional = true }
+utf8parse = "0.2.2"
+is_terminal_polyfill = "1.48"
+
+[target.'cfg(windows)'.dependencies]
+anstyle-wincon = { version = "3.0.5", path = "../anstyle-wincon", optional = true }
+
+[dev-dependencies]
+divan = "0.1.16"
+lexopt = "0.3.1"
+owo-colors = "4.0.0"
+proptest = "1.7.0"
+strip-ansi-escapes = "0.2.1"
+
+[[example]]
+name = "dump-stream"
+required-features = ["auto"]
+
+[[example]]
+name = "query-stream"
+required-features = ["auto"]
+
+[[bench]]
+name = "strip"
+harness = false
+
+[[bench]]
+name = "wincon"
+harness = false
+
+[[bench]]
+name = "stream"
+harness = false
+
+[lints]
+workspace = true
diff --git b/rust-vendor/anstyle/.cargo_vcs_info.json b/rust-vendor/anstyle/.cargo_vcs_info.json
new file mode 100644
index 0000000..3b2c256
--- /dev/null
+++ b/rust-vendor/anstyle/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "14dd743496d1614f8261a093ce755f26d8e2069d"
+ },
+ "path_in_vcs": "crates/anstyle"
+}
\ No newline at end of file
diff --git b/rust-vendor/anstyle/Cargo.toml.orig b/rust-vendor/anstyle/Cargo.toml.orig
new file mode 100644
index 0000000..a08fe0a
--- /dev/null
+++ b/rust-vendor/anstyle/Cargo.toml.orig
@@ -0,0 +1,38 @@
+[package]
+name = "anstyle"
+version = "1.0.13"
+description = "ANSI text styling"
+categories = ["command-line-interface"]
+keywords = ["ansi", "terminal", "color", "no_std"]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--generate-link-to-definition"]
+
+[package.metadata.release]
+tag-prefix = ""
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD", exactly=1},
+]
+
+[features]
+default = ["std"]
+std = []
+
+[dependencies]
+
+[dev-dependencies]
+lexopt = "0.3.0"
+snapbox = "0.6.5"
+
+[lints]
+workspace = true
diff --git b/rust-vendor/anstyle-parse/.cargo_vcs_info.json b/rust-vendor/anstyle-parse/.cargo_vcs_info.json
new file mode 100644
index 0000000..cc991cc
--- /dev/null
+++ b/rust-vendor/anstyle-parse/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "886539c95318db5de9db49b6d66d19413bd308cc"
+ },
+ "path_in_vcs": "crates/anstyle-parse"
+}
\ No newline at end of file
diff --git b/rust-vendor/anstyle-parse/Cargo.toml.orig b/rust-vendor/anstyle-parse/Cargo.toml.orig
new file mode 100644
index 0000000..4ccea6c
--- /dev/null
+++ b/rust-vendor/anstyle-parse/Cargo.toml.orig
@@ -0,0 +1,48 @@
+[package]
+name = "anstyle-parse"
+version = "0.2.7"
+description = "Parse ANSI Style Escapes"
+categories = ["command-line-interface"]
+keywords = ["ansi", "terminal", "color", "vte"]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD", exactly=1},
+]
+
+[dependencies]
+arrayvec = { version = "0.7.2", default-features = false, optional = true }
+utf8parse = { version = "0.2.1", optional = true }
+
+[features]
+default = ["utf8"]
+core = ["dep:arrayvec"]
+utf8 = ["dep:utf8parse"]
+
+[dev-dependencies]
+codegenrs = { version = "3.0.1", default-features = false }
+divan = "0.1.14"
+proptest = "1.4.0"
+snapbox = "0.6.5"
+vte_generate_state_changes = { version = "0.1.1" }
+
+[[bench]]
+name = "parse"
+harness = false
+required-features = ["utf8"]
+
+[lints]
+workspace = true
diff --git b/rust-vendor/anstyle-query/.cargo_vcs_info.json b/rust-vendor/anstyle-query/.cargo_vcs_info.json
new file mode 100644
index 0000000..d9e5ef2
--- /dev/null
+++ b/rust-vendor/anstyle-query/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "368a8719474357f9d54be800b4163c9074561e37"
+ },
+ "path_in_vcs": "crates/anstyle-query"
+}
\ No newline at end of file
diff --git b/rust-vendor/anstyle-query/Cargo.toml.orig b/rust-vendor/anstyle-query/Cargo.toml.orig
new file mode 100644
index 0000000..084f20f
--- /dev/null
+++ b/rust-vendor/anstyle-query/Cargo.toml.orig
@@ -0,0 +1,30 @@
+[package]
+name = "anstyle-query"
+version = "1.1.5"
+description = "Look up colored console capabilities"
+categories = ["command-line-interface"]
+keywords = ["cli", "color", "no-std", "terminal", "ansi"]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD", exactly=1},
+]
+
+[target.'cfg(windows)'.dependencies]
+windows-sys = { version = ">=0.60.2, <0.62", features = ["Win32_System_Console", "Win32_Foundation"] }
+
+[lints]
+workspace = true
diff --git b/rust-vendor/anyhow/.cargo_vcs_info.json b/rust-vendor/anyhow/.cargo_vcs_info.json
new file mode 100644
index 0000000..b755406
--- /dev/null
+++ b/rust-vendor/anyhow/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "80bfe291b16071c70f141e90e67e7032d966826b"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/anyhow/.github/FUNDING.yml b/rust-vendor/anyhow/.github/FUNDING.yml
new file mode 100644
index 0000000..7507077
--- /dev/null
+++ b/rust-vendor/anyhow/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: dtolnay
diff --git b/rust-vendor/anyhow/.github/workflows/ci.yml b/rust-vendor/anyhow/.github/workflows/ci.yml
new file mode 100644
index 0000000..ccff867
--- /dev/null
+++ b/rust-vendor/anyhow/.github/workflows/ci.yml
@@ -0,0 +1,147 @@
+name: CI
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+ schedule: [cron: "40 1 * * *"]
+
+permissions:
+ contents: read
+
+env:
+ RUSTFLAGS: -Dwarnings
+
+jobs:
+ pre_ci:
+ uses: dtolnay/.github/.github/workflows/pre_ci.yml@master
+
+ test:
+ name: Rust ${{matrix.rust}}
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust: [nightly, beta, stable, 1.82.0, 1.80.0, 1.76.0]
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{matrix.rust}}
+ components: rust-src
+ - name: Enable type layout randomization
+ run: echo RUSTFLAGS=${RUSTFLAGS}\ -Zrandomize-layout >> $GITHUB_ENV
+ if: matrix.rust == 'nightly'
+ - name: Enable nightly-only tests
+ run: echo RUSTFLAGS=${RUSTFLAGS}\ --cfg=anyhow_nightly_testing >> $GITHUB_ENV
+ if: matrix.rust == 'nightly'
+ - run: cargo test
+ - run: cargo check --no-default-features
+ - run: cargo check --features backtrace
+ if: matrix.rust != '1.80.0' && matrix.rust != '1.76.0'
+ - uses: actions/upload-artifact@v6
+ if: matrix.rust == 'nightly' && always()
+ with:
+ name: Cargo.lock
+ path: Cargo.lock
+ continue-on-error: true
+
+ build:
+ name: Rust ${{matrix.rust}}
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust: [1.68.0]
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{matrix.rust}}
+ components: rust-src
+ - run: cargo check --manifest-path tests/crate/Cargo.toml
+ - run: cargo check --manifest-path tests/crate/Cargo.toml --no-default-features
+
+ minimal:
+ name: Minimal versions
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@nightly
+ - run: cargo generate-lockfile -Z minimal-versions
+ - run: cargo check --locked --features backtrace
+
+ windows:
+ name: Windows
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: windows-latest
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ components: rust-src
+ - run: cargo check --features backtrace
+
+ doc:
+ name: Documentation
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ env:
+ RUSTDOCFLAGS: -Dwarnings
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: rust-src
+ - uses: dtolnay/install@cargo-docs-rs
+ - run: cargo docs-rs
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-latest
+ if: github.event_name != 'pull_request'
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: clippy, rust-src
+ - run: cargo clippy --tests -- -Dclippy::all -Dclippy::pedantic
+
+ miri:
+ name: Miri
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@miri
+ - run: cargo miri setup
+ - run: cargo miri test
+ env:
+ MIRIFLAGS: -Zmiri-strict-provenance
+
+ outdated:
+ name: Outdated
+ runs-on: ubuntu-latest
+ if: github.event_name != 'pull_request'
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ - uses: dtolnay/install@cargo-outdated
+ - run: cargo outdated --workspace --exit-code 1
diff --git b/rust-vendor/anyhow/Cargo.toml.orig b/rust-vendor/anyhow/Cargo.toml.orig
new file mode 100644
index 0000000..ddf007a
--- /dev/null
+++ b/rust-vendor/anyhow/Cargo.toml.orig
@@ -0,0 +1,40 @@
+[package]
+name = "anyhow"
+version = "1.0.101"
+authors = ["David Tolnay <dtolnay@gmail.com>"]
+categories = ["rust-patterns", "no-std"]
+description = "Flexible concrete Error type built on std::error::Error"
+documentation = "https://docs.rs/anyhow"
+edition = "2021"
+keywords = ["error", "error-handling"]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/dtolnay/anyhow"
+rust-version = "1.68"
+
+[features]
+default = ["std"]
+std = []
+
+[dependencies]
+# On compilers older than 1.65, features=["backtrace"] may be used to enable
+# backtraces via the `backtrace` crate. This feature has no effect on 1.65+
+# besides bringing in an unused dependency, as `std::backtrace` is always
+# preferred.
+backtrace = { version = "0.3.51", optional = true }
+
+[dev-dependencies]
+futures = { version = "0.3", default-features = false }
+rustversion = "1.0.6"
+syn = { version = "2.0", features = ["full"] }
+thiserror = "2"
+trybuild = { version = "1.0.108", features = ["diff"] }
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
+rustdoc-args = [
+ "--generate-link-to-definition",
+ "--generate-macro-expansion",
+ "--extern-html-root-url=core=https://doc.rust-lang.org",
+ "--extern-html-root-url=alloc=https://doc.rust-lang.org",
+ "--extern-html-root-url=std=https://doc.rust-lang.org",
+]
diff --git b/rust-vendor/approx/.cargo_vcs_info.json b/rust-vendor/approx/.cargo_vcs_info.json
new file mode 100644
index 0000000..a5eedb8
--- /dev/null
+++ b/rust-vendor/approx/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "13fcbc78dcda4d0136de07c36a7979d545f08e38"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/approx/.github/Xargo.toml b/rust-vendor/approx/.github/Xargo.toml
new file mode 100644
index 0000000..8dacb54
--- /dev/null
+++ b/rust-vendor/approx/.github/Xargo.toml
@@ -0,0 +1,2 @@
+[target.x86_64-unknown-linux-gnu.dependencies]
+alloc = {}
diff --git b/rust-vendor/approx/.github/dependabot.yml b/rust-vendor/approx/.github/dependabot.yml
new file mode 100644
index 0000000..7d841ce
--- /dev/null
+++ b/rust-vendor/approx/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+updates:
+- package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "19:00"
+ open-pull-requests-limit: 10
diff --git b/rust-vendor/approx/.github/workflows/ci-build.yml b/rust-vendor/approx/.github/workflows/ci-build.yml
new file mode 100644
index 0000000..63a62de
--- /dev/null
+++ b/rust-vendor/approx/.github/workflows/ci-build.yml
@@ -0,0 +1,60 @@
+name: Approx CI build
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ check-fmt:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Check formatting
+ run: cargo fmt -- --check
+ build-latest:
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ steps:
+ - uses: actions/checkout@v2
+ - run: cargo build --no-default-features;
+ - run: cargo build;
+ - run: cargo build --features num-complex;
+ - name: Run tests
+ run: cargo test;
+ build-1-31-0:
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ steps:
+ - name: Install stable-2021-12-04
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: "1.31.0"
+ override: true
+ - uses: actions/checkout@v2
+ - run: cargo build --no-default-features;
+ - run: cargo build;
+ - run: cargo build --features num-complex;
+ - name: Run tests
+ run: cargo test;
+ build-no-std:
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install latest nightly
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ - name: install xargo
+ run: cp .github/Xargo.toml .; rustup component add rust-src; cargo install -f xargo;
+ - name: build x86_64-unknown-linux-gnu
+ run: xargo build --verbose --no-default-features --target=x86_64-unknown-linux-gnu;
diff --git b/rust-vendor/approx/.travis.yml b/rust-vendor/approx/.travis.yml
new file mode 100644
index 0000000..cae48e8
--- /dev/null
+++ b/rust-vendor/approx/.travis.yml
@@ -0,0 +1,26 @@
+language: rust
+
+rust:
+ - 1.31.0
+ - nightly
+ - beta
+ - stable
+
+cache: cargo
+
+env:
+ - CARGO_FEATURES=""
+ - CARGO_FEATURES="std"
+ - CARGO_FEATURES="std num-complex"
+
+matrix:
+ allow_failures:
+ - rust: nightly
+
+before_script:
+ - if [ "$TRAVIS_RUST_VERSION" == "1.31.0" ]; then rm -f tests/macro_import.rs; fi
+ - cargo build --verbose
+
+script:
+ - cargo build --verbose --features "$CARGO_FEATURES"
+ - cargo test --verbose --features "$CARGO_FEATURES"
diff --git b/rust-vendor/approx/Cargo.toml.orig b/rust-vendor/approx/Cargo.toml.orig
new file mode 100644
index 0000000..f45d0e9
--- /dev/null
+++ b/rust-vendor/approx/Cargo.toml.orig
@@ -0,0 +1,33 @@
+[package]
+name = "approx"
+version = "0.5.1"
+authors = ["Brendan Zabarauskas <bjzaba@yahoo.com.au>"]
+license = "Apache-2.0"
+description = "Approximate floating point equality comparisons and assertions."
+
+documentation = "https://docs.rs/approx"
+homepage = "https://github.com/brendanzab/approx"
+repository = "https://github.com/brendanzab/approx"
+readme = "README.md"
+
+keywords = [
+ "approximate",
+ "assert",
+ "comparison",
+ "equality",
+ "float",
+]
+
+[package.metadata.docs.rs]
+features = ["std", "num-complex"]
+
+[lib]
+name = "approx"
+
+[features]
+default = ["std"]
+std = []
+
+[dependencies]
+num-traits = { version = "0.2.0", default_features = false }
+num-complex = { version = "0.4.0", optional = true }
diff --git b/rust-vendor/arrayref/.cargo_vcs_info.json b/rust-vendor/arrayref/.cargo_vcs_info.json
new file mode 100644
index 0000000..d9483fe
--- /dev/null
+++ b/rust-vendor/arrayref/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f8d0299d863922db6c409d08098941e833b70d69"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/arrayref/.github/workflows/rust.yml b/rust-vendor/arrayref/.github/workflows/rust.yml
new file mode 100644
index 0000000..312cbfd
--- /dev/null
+++ b/rust-vendor/arrayref/.github/workflows/rust.yml
@@ -0,0 +1,15 @@
+name: Rust
+
+on: [push]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - name: Build
+ run: cargo build --verbose
+ - name: Run tests
+ run: cargo test --verbose
diff --git b/rust-vendor/arrayref/.travis.yml b/rust-vendor/arrayref/.travis.yml
new file mode 100644
index 0000000..c21aeda
--- /dev/null
+++ b/rust-vendor/arrayref/.travis.yml
@@ -0,0 +1,31 @@
+language: rust
+addons:
+ apt:
+ packages:
+ - libcurl4-openssl-dev
+ - libelf-dev
+ - libdw-dev
+rust:
+ - nightly
+ - beta
+ - stable
+matrix:
+ allow_failures:
+ - rust: nightly
+before_script:
+- |
+ pip install 'travis-cargo<0.2' --user &&
+ export PATH=$HOME/.local/bin:$PATH
+script:
+- |
+ travis-cargo build &&
+ travis-cargo test &&
+ travis-cargo bench &&
+ travis-cargo --only stable doc
+after_success:
+- travis-cargo --only stable doc-upload
+- travis-cargo coveralls --no-sudo
+env:
+ global:
+ - TRAVIS_CARGO_NIGHTLY_FEATURE=nightly
+ - secure: 8dzqJGkV5184c0sV9BiMjjs5lxQjK2CvfGAU6ab2YFWN3roN/u37wBkoyqeSIzR3Uv0EXUOIM/BwuaeIwDHrZtTQMNnRw8Aa9A0mIeVCz1zlOFRK18NVGKoxBkkzlAvQn51D9X7sF9g9xLoDB7zyH63qhrerz6vjUivXaXkKZKAUZeBZMQ5riUxaHkt2LJtQhngXPS3Ar+ajSjIGkhg9x8gkqgkQCewbyoR9S9BwiyIUdYyYRSTgUgFtp3tuzMhQ8qykj53PqrbcCfiYC3O3lsGfQ0nqerT7cxPIHIg25+dZYJjLFk1908+GZFVqia9JFT8bbep7IkICDtfRQswAcxKTV6TvExfkEh8/vapzCueXuFMbszUDXxFkE+QWEO9RcDCQZjVAXuKx/iacok4XFXr/yE3QKVB+up7bKcEpAMMxjPd2+Z3EHVKZ53DtlzuzxM6ByjPy+0hRHkLWq3ZyzxyF3PAHq1tWlJ8B37eOqJIk4n+OBBpPOg1WF6nFq/7UV44SRkBbfC69wk8ANb46gWlIiB4+VKAsxEkRMYURtsPqTpgGqSdB2aNm8xpzke9d3d7Z+Zy8ma6tykqN9TlY7ke5fxJhaeNdTpdUykc0MHcKF8RvZbi170UmMqLRQMsMusXGP6QnhpVQhQB/bTRNZWJwKCTZ54jtEKImShInhTk=
diff --git b/rust-vendor/arrayref/Cargo.toml.orig b/rust-vendor/arrayref/Cargo.toml.orig
new file mode 100644
index 0000000..6e1041b
--- /dev/null
+++ b/rust-vendor/arrayref/Cargo.toml.orig
@@ -0,0 +1,11 @@
+[package]
+name = "arrayref"
+version = "0.3.9"
+authors = ["David Roundy <roundyd@physics.oregonstate.edu>"]
+description = "Macros to take array references of slices"
+license = "BSD-2-Clause"
+repository = "https://github.com/droundy/arrayref"
+documentation = "https://docs.rs/arrayref"
+
+[dev-dependencies]
+quickcheck = "1.0"
diff --git b/rust-vendor/arrayvec/.cargo_vcs_info.json b/rust-vendor/arrayvec/.cargo_vcs_info.json
new file mode 100644
index 0000000..dc685ae
--- /dev/null
+++ b/rust-vendor/arrayvec/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "0aede877fe0bfb1ba5e3c2024df8c0958d503a83"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/arrayvec/.github/workflows/ci.yml b/rust-vendor/arrayvec/.github/workflows/ci.yml
new file mode 100644
index 0000000..10fb573
--- /dev/null
+++ b/rust-vendor/arrayvec/.github/workflows/ci.yml
@@ -0,0 +1,92 @@
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+name: Continuous integration
+
+env:
+ CARGO_TERM_COLOR: always
+ CARGO_INCREMENTAL: 0
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+ continue-on-error: ${{ matrix.experimental }}
+ strategy:
+ matrix:
+ include:
+ - rust: 1.51.0 # MSRV
+ features: serde
+ experimental: false
+ - rust: 1.70.0
+ features: serde
+ experimental: false
+ - rust: stable
+ features:
+ bench: true
+ experimental: false
+ - rust: beta
+ features: serde
+ experimental: false
+ - rust: nightly
+ features: serde, borsh, zeroize
+ experimental: false
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Pin versions for MSRV
+ if: "${{ matrix.rust == '1.51.0' }}"
+ run: |
+ cargo update -p serde_test --precise 1.0.163
+ cargo update -p serde --precise 1.0.69
+ - name: Build
+ run: |
+ cargo build -v --no-default-features
+ cargo build --verbose --features "${{ matrix.features }}"
+ - name: Tests
+ run: |
+ cargo doc --verbose --features "${{ matrix.features }}" --no-deps
+ cargo test --verbose --features "${{ matrix.features }}"
+ cargo test --release --verbose --features "${{ matrix.features }}"
+ - name: Test run benchmarks
+ if: matrix.bench != ''
+ run: cargo test -v --benches
+
+ nostd:
+ runs-on: ubuntu-latest
+ continue-on-error: false
+ strategy:
+ matrix:
+ include:
+ - rust: stable
+ target: thumbv6m-none-eabi
+ features: zeroize
+
+ name: nostd/${{ matrix.target }}/${{ matrix.rust }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: ${{ matrix.rust }}
+ targets: ${{ matrix.target }}
+ - name: Tests
+ run: |
+ cargo rustc "--target=${{ matrix.target }}" --no-default-features --features "${{ matrix.features }}"
+
+
+ miri:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Miri
+ run: |
+ rustup toolchain install nightly --component miri
+ rustup override set nightly
+ cargo miri setup
+ - name: Test with Miri
+ run: cargo miri test --all-features
diff --git b/rust-vendor/arrayvec/Cargo.toml.orig b/rust-vendor/arrayvec/Cargo.toml.orig
new file mode 100644
index 0000000..13917b0
--- /dev/null
+++ b/rust-vendor/arrayvec/Cargo.toml.orig
@@ -0,0 +1,62 @@
+[package]
+name = "arrayvec"
+version = "0.7.6"
+authors = ["bluss"]
+license = "MIT OR Apache-2.0"
+edition = "2018"
+rust-version = "1.51"
+
+description = "A vector with fixed capacity, backed by an array (it can be stored on the stack too). Implements fixed capacity ArrayVec and ArrayString."
+documentation = "https://docs.rs/arrayvec/"
+repository = "https://github.com/bluss/arrayvec"
+
+keywords = ["stack", "vector", "array", "data-structure", "no_std"]
+categories = ["data-structures", "no-std"]
+
+[build-dependencies]
+
+[dependencies.borsh]
+version = "1.2.0"
+optional = true
+default-features = false
+
+[dependencies.serde]
+version = "1.0"
+optional = true
+default-features = false
+
+[dependencies.zeroize]
+version = "1.4"
+optional = true
+default-features = false
+
+[dev-dependencies.serde_test]
+version = "1.0"
+
+[dev-dependencies]
+matches = { version = "0.1" }
+bencher = "0.1.4"
+
+[[bench]]
+name = "extend"
+harness = false
+
+[[bench]]
+name = "arraystring"
+harness = false
+
+[features]
+default = ["std"]
+std = []
+
+[profile.bench]
+debug = true
+[profile.release]
+debug = true
+
+[package.metadata.docs.rs]
+features = ["borsh", "serde", "zeroize"]
+
+[package.metadata.release]
+no-dev-version = true
+tag-name = "{{version}}"
diff --git b/rust-vendor/autocfg/.cargo_vcs_info.json b/rust-vendor/autocfg/.cargo_vcs_info.json
new file mode 100644
index 0000000..80087c7
--- /dev/null
+++ b/rust-vendor/autocfg/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d912169ed67977efe5a465269b0e73cb66060c49"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/autocfg/Cargo.toml.orig b/rust-vendor/autocfg/Cargo.toml.orig
new file mode 100644
index 0000000..75b34ea
--- /dev/null
+++ b/rust-vendor/autocfg/Cargo.toml.orig
@@ -0,0 +1,15 @@
+[package]
+name = "autocfg"
+version = "1.5.0"
+authors = ["Josh Stone <cuviper@gmail.com>"]
+license = "Apache-2.0 OR MIT"
+repository = "https://github.com/cuviper/autocfg"
+documentation = "https://docs.rs/autocfg/"
+description = "Automatic cfg for Rust compiler features"
+readme = "README.md"
+keywords = ["rustc", "build", "autoconf"]
+categories = ["development-tools::build-utils"]
+exclude = ["/.github/**"]
+rust-version = "1.0"
+
+[dependencies]
diff --git b/rust-vendor/base64-simd/.cargo_vcs_info.json b/rust-vendor/base64-simd/.cargo_vcs_info.json
new file mode 100644
index 0000000..de1ce6e
--- /dev/null
+++ b/rust-vendor/base64-simd/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d74c030d9dc4f3cae02146d1f497ff62726ef09a"
+ },
+ "path_in_vcs": "crates/base64-simd"
+}
\ No newline at end of file
diff --git b/rust-vendor/base64-simd/Cargo.toml.orig b/rust-vendor/base64-simd/Cargo.toml.orig
new file mode 100644
index 0000000..037a1ed
--- /dev/null
+++ b/rust-vendor/base64-simd/Cargo.toml.orig
@@ -0,0 +1,35 @@
+[package]
+name = "base64-simd"
+version = "0.8.0"
+edition = "2021"
+description = "SIMD-accelerated base64 encoding and decoding"
+license = "MIT"
+repository = "https://github.com/Nugine/simd"
+keywords = ["base64", "simd"]
+categories = ["no-std", "parser-implementations", "encoding"]
+readme = "README.md"
+rust-version = "1.63"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
+
+[features]
+default = ["std", "detect"]
+alloc = ["vsimd/alloc"]
+std = ["alloc", "vsimd/std"]
+detect = ["vsimd/detect"]
+unstable = ["vsimd/unstable"]
+
+[dependencies]
+outref = "0.5.0"
+vsimd = { path = "../vsimd", version = "0.8.0" }
+
+[dev-dependencies]
+base64 = "0.20.0"
+rand = "0.8.5"
+const-str = "0.5.3"
+
+[target.'cfg(target_arch="wasm32")'.dev-dependencies]
+getrandom = { version = "0.2.8", features = ["js"] }
+wasm-bindgen-test = "0.3.33"
diff --git b/rust-vendor/bigdecimal/.cargo_vcs_info.json b/rust-vendor/bigdecimal/.cargo_vcs_info.json
new file mode 100644
index 0000000..6c412c8
--- /dev/null
+++ b/rust-vendor/bigdecimal/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ea0803e5dbaea8dd87d7b5d53d3fd366310a6f4f"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/bigdecimal/Cargo.toml.orig b/rust-vendor/bigdecimal/Cargo.toml.orig
new file mode 100644
index 0000000..f15a765
--- /dev/null
+++ b/rust-vendor/bigdecimal/Cargo.toml.orig
@@ -0,0 +1,66 @@
+[package]
+name = "bigdecimal"
+version = "0.4.10"
+authors = ["Andrew Kubera"]
+description = "Arbitrary precision decimal numbers"
+documentation = "https://docs.rs/bigdecimal"
+homepage = "https://github.com/akubera/bigdecimal-rs"
+repository = "https://github.com/akubera/bigdecimal-rs"
+keywords = [
+ "numerics",
+ "bignum",
+ "decimal",
+ "arbitrary-precision",
+]
+categories = [ "mathematics", "science", "no-std" ]
+license = "MIT/Apache-2.0"
+autobenches = false
+edition = "2015"
+include = [
+ "LICENSE-APACHE",
+ "LICENSE-MIT",
+ "README.md",
+ "build.rs",
+ "src/**/*.rs",
+]
+
+[lib]
+bench = false
+
+[dependencies]
+libm = "0.2.6"
+num-bigint = { version = "0.4", default-features = false }
+num-integer = { version = "0.1", default-features = false }
+num-traits = { version = "0.2", default-features = false }
+serde = { version = "1.0", optional = true, default-features = false }
+# Allow direct parsing of JSON floats, for full arbitrary precision
+serde_json = { version = "1.0", optional = true, default-features = false, features = ["alloc", "arbitrary_precision"]}
+
+[dev-dependencies]
+paste = "1"
+serde_test = "<1.0.176"
+siphasher = { version = "0.3.10", default-features = false }
+# The following dev-dependencies are only required for benchmarking
+# (use the `benchmark-bigdecimal` script to uncomment these and run benchmarks)
+# BENCH: criterion = { version = "0.4", features = [ "html_reports" ] }
+# BENCH: oorandom = { version = "11.1.3" }
+# BENCH: lazy_static = { version = "1" }
+
+# Only required for property testing - incompatible with older versions of rust
+# PROPERTY-TESTS: proptest = "1"
+
+[build-dependencies]
+autocfg = "1"
+
+[features]
+default = ["std"]
+serde-json = ["serde/derive", "serde_json"]
+string-only = []
+std = ["num-bigint/std", "num-integer/std", "num-traits/std"]
+
+# BENCH: [[bench]]
+# BENCH: name = "arithmetic"
+# BENCH: harness = false
+
+[lints.rust]
+unexpected_cfgs = { level = "allow", check-cfg = ['cfg(no_track_caller)'] }
diff --git b/rust-vendor/binary-heap-plus/.cargo_vcs_info.json b/rust-vendor/binary-heap-plus/.cargo_vcs_info.json
new file mode 100644
index 0000000..962e360
--- /dev/null
+++ b/rust-vendor/binary-heap-plus/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "sha1": "8565858f610451f3ec8d5530f9a6616f3896474d"
+ }
+}
diff --git b/rust-vendor/binary-heap-plus/.github/workflows/rust.yml b/rust-vendor/binary-heap-plus/.github/workflows/rust.yml
new file mode 100644
index 0000000..a33ec07
--- /dev/null
+++ b/rust-vendor/binary-heap-plus/.github/workflows/rust.yml
@@ -0,0 +1,71 @@
+name: Rust
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+jobs:
+ build:
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - windows-latest
+ - macos-latest
+ rust:
+ - stable
+ - 1.56.0 # MSRV
+ cargo_args:
+ - ""
+ - --features serde
+ include:
+ - os: ubuntu-latest
+ rust: nightly
+ cargo_args: ""
+
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Install toolchain
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ override: true
+
+ - name: Run cargo check
+ uses: actions-rs/cargo@v1
+ with:
+ command: check
+ args: ${{ matrix.cargo_args }}
+
+ - name: Run cargo build
+ uses: actions-rs/cargo@v1
+ with:
+ command: build
+ args: ${{ matrix.cargo_args }}
+
+ - name: Run cargo test
+ uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: ${{ matrix.cargo_args }}
+
+ - name: Run cargo bench
+ uses: actions-rs/cargo@v1
+ if: ${{ matrix.rust == 'nightly' }}
+ with:
+ command: bench
+ args: ${{ matrix.cargo_args }}
+
+# - name: Build
+# run: cargo build --verbose
+# - name: Build (serde)
+# run: cargo build --verbose --features serde
+# - name: Run tests
+# run: cargo test --verbose
+# - name: Run tests (serde)
+# run: cargo test --verbose --features serde
diff --git b/rust-vendor/binary-heap-plus/Cargo.toml.orig b/rust-vendor/binary-heap-plus/Cargo.toml.orig
new file mode 100644
index 0000000..f2e4c34
--- /dev/null
+++ b/rust-vendor/binary-heap-plus/Cargo.toml.orig
@@ -0,0 +1,24 @@
+[package]
+name = "binary-heap-plus"
+version = "0.5.0"
+authors = ["SEKINE, Hideki <sekineh@me.com>"]
+description = "Enhanced version of std::collections::BinaryHeap that supports max, min, and custom-order heaps."
+license = "MIT"
+repository = "https://github.com/sekineh/binary-heap-plus-rs"
+readme = "README.md"
+keywords = ["binary", "heap", "priority", "queue"]
+categories = ["data-structures", "algorithms", ]
+edition = "2021"
+rust-version = "1.56.0"
+
+[dependencies]
+compare = "0.1.0"
+serde = { version = "1.0.116", optional = true, features = ["derive"] }
+
+[dev-dependencies]
+serde_json = "1.0.57"
+rand = "0.8"
+
+[badges]
+# TODO: waiting for PR to land...: https://github.com/rust-lang/crates.io/pull/1838#
+# github-actions = { repository = "sekineh/binary-heap-plus-rs", workflow = "Rust" }
\ No newline at end of file
diff --git b/rust-vendor/bindgen/.cargo_vcs_info.json b/rust-vendor/bindgen/.cargo_vcs_info.json
new file mode 100644
index 0000000..786f0e3
--- /dev/null
+++ b/rust-vendor/bindgen/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d874de8d646d9b8a3e7ba2db2bcd52f2fba8f1f5"
+ },
+ "path_in_vcs": "bindgen"
+}
\ No newline at end of file
diff --git b/rust-vendor/bindgen/Cargo.toml.orig b/rust-vendor/bindgen/Cargo.toml.orig
new file mode 100644
index 0000000..7a6764c
--- /dev/null
+++ b/rust-vendor/bindgen/Cargo.toml.orig
@@ -0,0 +1,72 @@
+lints.workspace = true
+
+[package]
+authors = [
+ "Jyun-Yan You <jyyou.tw@gmail.com>",
+ "Emilio Cobos Álvarez <emilio@crisal.io>",
+ "Nick Fitzgerald <fitzgen@gmail.com>",
+ "The Servo project developers",
+]
+description = "Automatically generates Rust FFI bindings to C and C++ libraries."
+keywords = ["bindings", "ffi", "code-generation"]
+categories = ["external-ffi-bindings", "development-tools::ffi"]
+license = "BSD-3-Clause"
+name = "bindgen"
+readme = "../README.md"
+repository = "https://github.com/rust-lang/rust-bindgen"
+documentation = "https://docs.rs/bindgen"
+homepage = "https://rust-lang.github.io/rust-bindgen/"
+version = "0.72.1"
+build = "build.rs"
+rust-version.workspace = true
+edition.workspace = true
+
+[lib]
+name = "bindgen"
+path = "lib.rs"
+
+[dependencies]
+annotate-snippets = { workspace = true, optional = true }
+bitflags.workspace = true
+cexpr.workspace = true
+clang-sys = { workspace = true, features = ["clang_11_0"] }
+clap = { workspace = true, features = ["derive"], optional = true }
+clap_complete = { workspace = true, optional = true }
+itertools = { workspace = true }
+log = { workspace = true, optional = true }
+prettyplease = { workspace = true, optional = true, features = ["verbatim"] }
+proc-macro2.workspace = true
+quote.workspace = true
+regex = { workspace = true, features = ["std", "unicode-perl"] }
+rustc-hash.workspace = true
+shlex.workspace = true
+syn = { workspace = true, features = ["full", "extra-traits", "visit-mut"] }
+
+[features]
+default = ["logging", "prettyplease", "runtime"]
+logging = ["dep:log"]
+static = ["clang-sys/static"]
+runtime = ["clang-sys/runtime"]
+experimental = ["dep:annotate-snippets"]
+
+## The following features are for internal use and they shouldn't be used if
+## you're not hacking on bindgen
+# Features used by `bindgen-cli`
+__cli = ["dep:clap", "dep:clap_complete"]
+# Features used for CI testing
+__testing_only_extra_assertions = []
+__testing_only_libclang_9 = []
+__testing_only_libclang_16 = []
+
+[package.metadata.docs.rs]
+features = ["experimental"]
+
+[package.metadata.release]
+release = true
+pre-release-hook = ["../node_modules/doctoc/doctoc.js", "../CHANGELOG.md"]
+
+# Add version and date to changelog file
+[[package.metadata.release.pre-release-replacements]]
+file = "../CHANGELOG.md"
+search = "# Unreleased"
+replace = "# Unreleased\n## Added\n## Changed\n## Removed\n## Fixed\n## Security\n\n# {{version}} ({{date}})"
diff --git b/rust-vendor/bitflags/.cargo_vcs_info.json b/rust-vendor/bitflags/.cargo_vcs_info.json
new file mode 100644
index 0000000..c4d1f9e
--- /dev/null
+++ b/rust-vendor/bitflags/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "7cc8595e93d04d180d39e2f25242dca85dd71228"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/bitflags/Cargo.toml.orig b/rust-vendor/bitflags/Cargo.toml.orig
new file mode 100644
index 0000000..b13c68d
--- /dev/null
+++ b/rust-vendor/bitflags/Cargo.toml.orig
@@ -0,0 +1,41 @@
+[package]
+name = "bitflags"
+# NB: When modifying, also modify the number in readme (for breaking changes)
+version = "2.10.0"
+edition = "2021"
+rust-version = "1.56.0"
+authors = ["The Rust Project Developers"]
+license = "MIT OR Apache-2.0"
+keywords = ["bit", "bitmask", "bitflags", "flags"]
+readme = "README.md"
+repository = "https://github.com/bitflags/bitflags"
+homepage = "https://github.com/bitflags/bitflags"
+documentation = "https://docs.rs/bitflags"
+categories = ["no-std"]
+description = """
+A macro to generate structures which behave like bitflags.
+"""
+exclude = ["/tests", "/.github"]
+
+[dependencies]
+serde_core = { version = "1.0.228", optional = true, default-features = false }
+arbitrary = { version = "1.0", optional = true }
+bytemuck = { version = "1.12", optional = true }
+
+[dev-dependencies]
+trybuild = "1.0.18"
+rustversion = "1.0"
+serde_json = "1.0"
+serde_test = "1.0.19"
+serde_lib = { version = "1.0.103", features = ["derive"], package = "serde" }
+zerocopy = { version = "0.8", features = ["derive"] }
+arbitrary = { version = "1.0", features = ["derive"] }
+bytemuck = { version = "1.12.2", features = ["derive"] }
+
+[features]
+std = []
+serde = ["serde_core"]
+example_generated = []
+
+[package.metadata.docs.rs]
+features = ["example_generated"]
diff --git b/rust-vendor/bitvec/.cargo_vcs_info.json b/rust-vendor/bitvec/.cargo_vcs_info.json
new file mode 100644
index 0000000..5c397e0
--- /dev/null
+++ b/rust-vendor/bitvec/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "c922de6998be994cb5be1a349c7a0a0d16a19f07"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/bitvec/Cargo.toml.orig b/rust-vendor/bitvec/Cargo.toml.orig
new file mode 100644
index 0000000..6659453
--- /dev/null
+++ b/rust-vendor/bitvec/Cargo.toml.orig
@@ -0,0 +1,109 @@
+########################################################################
+# Project Manifest #
+# #
+# This file describes the `bitvec` project to Cargo. #
+########################################################################
+
+[package]
+name = "bitvec"
+version = "1.0.1"
+edition = "2021"
+
+categories = [
+ "data-structures",
+ "embedded",
+ "no-std",
+ "rust-patterns",
+]
+description = "Addresses memory by bits, for packed collections and bitfields"
+documentation = "https://docs.rs/bitvec/latest/bitvec"
+homepage = "https://bitvecto-rs.github.io/bitvec"
+include = [
+ "Cargo.toml",
+ "LICENSE.txt",
+ "README.md",
+ "doc/**/*.md",
+ "src/**/*.rs",
+ "benches/*.rs",
+]
+keywords = [
+ "bitfields",
+ "bitmap",
+ "bitstream",
+ "bitvec",
+ "bitvector",
+]
+license = "MIT"
+readme = "README.md"
+repository = "https://github.com/bitvecto-rs/bitvec"
+rust-version = "1.56"
+
+[features]
+alloc = [
+]
+atomic = [
+]
+# Enable use of atomics and the standard library by default. no-std
+# users will need to opt out with `default-features = false`.
+default = [
+ "atomic",
+ "std",
+]
+# The standard library includes the allocator.
+std = [
+ "alloc",
+]
+testing = [
+]
+
+[dependencies]
+radium = "0.7"
+tap = "1"
+
+[dependencies.funty]
+version = "^2.0"
+default-features = false
+
+[dependencies.serde]
+default-features = false
+optional = true
+version = "1"
+
+[dependencies.wyz]
+version = "0.5"
+default-features = false
+
+# Crates required when running the test suite.
+[dev-dependencies]
+bincode = "1.3"
+criterion = "0.3"
+rand = "0.8"
+serde = "1"
+serde_json = "1"
+serde_test = "1"
+static_assertions = "1"
+
+# [[bench]]
+# name = "memcpy"
+# harness = false
+# Indicates the features that docs.rs should enable when building documentation.
+[package.metadata.docs.rs]
+features = [
+ "atomic",
+ "serde",
+ "std",
+]
+
+[badges.codecov]
+repository = "bitvecto-rs/bitvec"
+branch = "main"
+service = "github"
+
+[badges.is-it-maintained-issue-resolution]
+repository = "bitvecto-rs/bitvec"
+
+[badges.is-it-maintained-open-issues]
+repository = "bitvecto-rs/bitvec"
+
+[badges.maintenance]
+status = "passively-maintained"
diff --git b/rust-vendor/blake2b_simd/.cargo_vcs_info.json b/rust-vendor/blake2b_simd/.cargo_vcs_info.json
new file mode 100644
index 0000000..8ace93d
--- /dev/null
+++ b/rust-vendor/blake2b_simd/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "6a94ae2e18985c7c35bada8a4d438bfe9ab0d0c0"
+ },
+ "path_in_vcs": "blake2b"
+}
\ No newline at end of file
diff --git b/rust-vendor/blake2b_simd/Cargo.toml.orig b/rust-vendor/blake2b_simd/Cargo.toml.orig
new file mode 100644
index 0000000..402f4de
--- /dev/null
+++ b/rust-vendor/blake2b_simd/Cargo.toml.orig
@@ -0,0 +1,25 @@
+[package]
+name = "blake2b_simd"
+version = "1.0.4"
+authors = ["Jack O'Connor"]
+description = "a pure Rust BLAKE2b implementation with dynamic SIMD"
+license = "MIT"
+repository = "https://github.com/oconnor663/blake2_simd"
+documentation = "https://docs.rs/blake2b_simd"
+readme = "README.md"
+keywords = ["blake2b", "blake2bp", "blake2"]
+edition = "2024"
+
+[features]
+default = ["std"]
+std = ["constant_time_eq/std"]
+# This crate does a lot of #[inline(always)]. For BLAKE2b on ARM Cortex-M0 (and
+# presumably other tiny chips), some of that inlining actually hurts
+# performance. This feature disables some inlining, improving the performance
+# of the portable implementation in that specific case.
+uninline_portable = []
+
+[dependencies]
+arrayref = "0.3.5"
+arrayvec = { version = "0.7.0", default-features = false }
+constant_time_eq = { version = "0.4.2", default-features = false }
diff --git b/rust-vendor/blake3/.cargo/config.toml b/rust-vendor/blake3/.cargo/config.toml
new file mode 100644
index 0000000..8e7c3af
--- /dev/null
+++ b/rust-vendor/blake3/.cargo/config.toml
@@ -0,0 +1,2 @@
+[target.wasm32-wasip1]
+runner = "wasmtime"
diff --git b/rust-vendor/blake3/.cargo_vcs_info.json b/rust-vendor/blake3/.cargo_vcs_info.json
new file mode 100644
index 0000000..908508e
--- /dev/null
+++ b/rust-vendor/blake3/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "8b829b697fa4cfe35de35e9aa8c20b56266cb091"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/blake3/.git-blame-ignore-revs b/rust-vendor/blake3/.git-blame-ignore-revs
new file mode 100644
index 0000000..6e814e6
--- /dev/null
+++ b/rust-vendor/blake3/.git-blame-ignore-revs
@@ -0,0 +1,2 @@
+# CMakeLists.txt whitespace fixups
+3e14f865d30271c74fc68d417af488ea91b66d48
diff --git b/rust-vendor/blake3/.github/workflows/build_b3sum.py b/rust-vendor/blake3/.github/workflows/build_b3sum.py
new file mode 100644
index 0000000..f0e1787
--- /dev/null
+++ b/rust-vendor/blake3/.github/workflows/build_b3sum.py
@@ -0,0 +1,38 @@
+#! /usr/bin/env python3
+
+from pathlib import Path
+import platform
+import shutil
+import subprocess
+import sys
+
+ROOT = Path(__file__).parent.parent.parent
+RUST_TARGET = sys.argv[1]
+
+subprocess.run(
+ ["cargo", "build", "--target", sys.argv[1], "--release"], cwd=ROOT / "b3sum"
+)
+
+if platform.system() == "Windows":
+ original_exe_name = "b3sum.exe"
+else:
+ original_exe_name = "b3sum"
+
+if platform.system() == "Windows":
+ new_exe_name = "b3sum_windows_x64_bin.exe"
+elif platform.system() == "Darwin":
+ new_exe_name = "b3sum_macos_x64_bin"
+elif platform.system() == "Linux":
+ new_exe_name = "b3sum_linux_x64_bin"
+else:
+ raise RuntimeError("Unexpected platform: " + platform.system())
+
+# Copy the built binary so that it has the upload name we want.
+out_dir = ROOT / "b3sum/target" / RUST_TARGET / "release"
+original_exe_path = str(out_dir / original_exe_name)
+new_exe_path = str(out_dir / new_exe_name)
+print("copying", repr(original_exe_path), "to", repr(new_exe_path))
+shutil.copyfile(original_exe_path, new_exe_path)
+
+# This lets the subsequent upload step get the filepath.
+print("::set-output name=bin_path::" + new_exe_path)
diff --git b/rust-vendor/blake3/.github/workflows/ci.yml b/rust-vendor/blake3/.github/workflows/ci.yml
new file mode 100644
index 0000000..f42e78a
--- /dev/null
+++ b/rust-vendor/blake3/.github/workflows/ci.yml
@@ -0,0 +1,491 @@
+name: tests
+
+on:
+ push:
+ branches:
+ - "*"
+ # not on tags
+ pull_request:
+
+env:
+ BLAKE3_CI: "1"
+ RUSTFLAGS: "-D warnings"
+ RUST_BACKTRACE: "1"
+
+jobs:
+ library_tests:
+ name: ${{ matrix.target.name }} ${{ matrix.channel }}
+ runs-on: ${{ matrix.target.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ target: [
+ { "os": "ubuntu-latest", "toolchain": "x86_64-unknown-linux-gnu", "name": "Linux GNU" },
+ { "os": "macOS-latest", "toolchain": "aarch64-apple-darwin", "name": "macOS" },
+ { "os": "windows-latest", "toolchain": "x86_64-pc-windows-msvc", "name": "Windows MSVC" },
+ { "os": "windows-latest", "toolchain": "x86_64-pc-windows-gnu", "name": "Windows GNU" }
+ ]
+ channel: ["stable", "beta", "nightly"]
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ format('{0}-{1}', matrix.channel, matrix.target.toolchain) }}
+ # Print the compiler version, for debugging.
+ - name: print compiler version
+ run: cargo run --quiet
+ working-directory: ./tools/compiler_version
+ # Print out instruction set support, for debugging.
+ - name: print instruction set support
+ run: cargo run --quiet
+ working-directory: ./tools/instruction_set_support
+ # Default tests plus Rayon and trait implementations.
+ - run: cargo test --features=rayon,traits-preview,serde,zeroize
+ # Same but with only one thread in the Rayon pool. This can find deadlocks.
+ - name: "again with RAYON_NUM_THREADS=1"
+ run: cargo test --features=rayon,traits-preview,serde,zeroize
+ env:
+ RAYON_NUM_THREADS: 1
+ # The mmap feature by itself (update_mmap_rayon is omitted).
+ - run: cargo test --features=mmap
+ # All public features put together.
+ - run: cargo test --features=mmap,rayon,traits-preview,serde,zeroize
+ # no_std tests.
+ - run: cargo test --no-default-features
+
+ # A matrix of different test settings:
+ # - debug vs release
+ # - assembly vs Rust+C intrinsics vs pure Rust intrinsics
+ # - different levels of SIMD support
+ #
+ # Full SIMD support.
+ - run: cargo test --features=
+ - run: cargo test --features=prefer_intrinsics
+ - run: cargo test --features=pure
+ - run: cargo test --features= --release
+ - run: cargo test --features=prefer_intrinsics --release
+ - run: cargo test --features=pure --release
+ # No AVX-512.
+ - run: cargo test --features=no_avx512
+ - run: cargo test --features=no_avx512,prefer_intrinsics
+ - run: cargo test --features=no_avx512,pure
+ - run: cargo test --features=no_avx512 --release
+ - run: cargo test --features=no_avx512,prefer_intrinsics --release
+ - run: cargo test --features=no_avx512,pure --release
+ # No AVX2.
+ - run: cargo test --features=no_avx512,no_avx2
+ - run: cargo test --features=no_avx512,no_avx2,prefer_intrinsics
+ - run: cargo test --features=no_avx512,no_avx2,pure
+ - run: cargo test --features=no_avx512,no_avx2 --release
+ - run: cargo test --features=no_avx512,no_avx2,prefer_intrinsics --release
+ - run: cargo test --features=no_avx512,no_avx2,pure --release
+ # No SSE4.1
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,prefer_intrinsics
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,pure
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41 --release
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,prefer_intrinsics --release
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,pure --release
+ # No SSE2
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,prefer_intrinsics
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,pure
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2 --release
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,prefer_intrinsics --release
+ - run: cargo test --features=no_avx512,no_avx2,no_sse41,no_sse2,pure --release
+
+ # Test benchmarks. RUSTC_BOOTSTRAP=1 lets this run on non-nightly toolchains.
+ - run: cargo test --benches --features=rayon
+ env:
+ RUSTC_BOOTSTRAP: 1
+ # Test vectors.
+ - name: test vectors
+ run: cargo test
+ working-directory: ./test_vectors
+ - name: test vectors intrinsics
+ run: cargo test --features=prefer_intrinsics
+ working-directory: ./test_vectors
+ - name: test vectors pure
+ run: cargo test --features=pure
+ working-directory: ./test_vectors
+ # Test C code.
+ - name: cargo test C bindings assembly
+ run: cargo test
+ working-directory: ./c/blake3_c_rust_bindings
+ - name: cargo test C bindings intrinsics
+ run: cargo test --features=prefer_intrinsics
+ working-directory: ./c/blake3_c_rust_bindings
+ - name: cargo test C bindings no AVX-512
+ run: cargo test
+ working-directory: ./c/blake3_c_rust_bindings
+ env:
+ CFLAGS: -DBLAKE3_NO_AVX512
+ - name: cargo test C bindings no AVX2
+ run: cargo test
+ working-directory: ./c/blake3_c_rust_bindings
+ env:
+ CFLAGS: -DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2
+ - name: cargo test C bindings no SSE41
+ run: cargo test
+ working-directory: ./c/blake3_c_rust_bindings
+ env:
+ CFLAGS: -DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_SSE41
+ - name: cargo test C bindings no SSE2
+ run: cargo test
+ working-directory: ./c/blake3_c_rust_bindings
+ env:
+ CFLAGS: -DBLAKE3_NO_AVX512 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_SSE2
+ # Reference impl doc test.
+ - name: reference impl doc test
+ run: cargo test
+ working-directory: ./reference_impl
+
+ msrv_build:
+ name: MSRV build ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: ["ubuntu-latest", "macOS-latest", "windows-latest"]
+ steps:
+ - uses: actions/checkout@v4
+ # The current MSRV. This crate doesn't have an official MSRV policy,
+ # but in practice we'll probably do what libc does:
+ # https://github.com/rust-lang/libs-team/issues/72.
+ # This test target is here so that we notice if we accidentally bump
+ # the MSRV, but it's not a promise that we won't bump it.
+ - uses: dtolnay/rust-toolchain@1.85.1
+ - run: cargo build --features=mmap,rayon,traits-preview,serde,zeroize
+
+ b3sum_tests:
+ name: b3sum ${{ matrix.target.name }} ${{ matrix.channel }}
+ runs-on: ${{ matrix.target.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ target: [
+ { "os": "ubuntu-latest", "toolchain": "x86_64-unknown-linux-gnu", "name": "Linux GNU" },
+ { "os": "macOS-latest", "toolchain": "aarch64-apple-darwin", "name": "macOS" },
+ { "os": "windows-latest", "toolchain": "x86_64-pc-windows-msvc", "name": "Windows MSVC" },
+ { "os": "windows-latest", "toolchain": "x86_64-pc-windows-gnu", "name": "Windows GNU" }
+ ]
+ channel: ["stable", "beta", "nightly"]
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ format('{0}-{1}', matrix.channel, matrix.target.toolchain) }}
+ # Test b3sum.
+ - name: test b3sum
+ run: cargo test
+ working-directory: ./b3sum
+ - name: test b3sum --no-default-features
+ run: cargo test --no-default-features
+ working-directory: ./b3sum
+
+ cross_tests:
+ name: cross ${{ matrix.arch }}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ arch:
+ - i586-unknown-linux-musl
+ - i686-unknown-linux-musl
+ - armv7-unknown-linux-gnueabihf
+ - aarch64-unknown-linux-gnu
+ # Big-endian targets. See https://twitter.com/burntsushi5/status/1695483429997945092.
+ - powerpc64-unknown-linux-gnu
+ - s390x-unknown-linux-gnu
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - run: cargo install cross
+ # Test the portable implementation on everything.
+ - run: cross test --target ${{ matrix.arch }}
+ # Test building for ancient i386 processors without guaranteed SSE2 support.
+ - run: cross rustc --target ${{ matrix.arch }} -- -C target-cpu=i386
+ if: startsWith(matrix.arch, 'i586-')
+ # Test the NEON implementation on ARM targets.
+ - run: cross test --target ${{ matrix.arch }} --features=neon
+ if: startsWith(matrix.arch, 'armv7-') || startsWith(matrix.arch, 'aarch64-')
+ # NEON is enabled by default on aarch64, disabling it through the no_neon feature.
+ - run: cross test --target ${{ matrix.arch }} --features=no_neon
+ if: startsWith(matrix.arch, 'aarch64-')
+ # Test vectors. Note that this uses a hacky script due to path dependency limitations.
+ - run: ./test_vectors/cross_test.sh --target ${{ matrix.arch }}
+ # C code. Same issue with the hacky script.
+ - run: ./c/blake3_c_rust_bindings/cross_test.sh --target ${{ matrix.arch }}
+ - run: ./c/blake3_c_rust_bindings/cross_test.sh --target ${{ matrix.arch }} --features=neon
+ if: startsWith(matrix.arch, 'armv7-') || startsWith(matrix.arch, 'aarch64-')
+
+ wasm_tests:
+ name: WASM tests
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: wasm32-wasip1
+ - name: install Wasmtime
+ run: |
+ curl https://wasmtime.dev/install.sh -sSf | bash
+ echo PATH: $PATH
+ mkdir -p ~/.local/bin
+ ln -s ~/.wasmtime/bin/wasmtime ~/.local/bin/wasmtime
+ - run: cargo test --target wasm32-wasip1
+ - run: cargo test --target wasm32-wasip1 --no-default-features
+ - run: cargo test --target wasm32-wasip1 --features wasm32_simd
+ - run: cargo test --target wasm32-wasip1 --no-default-features --features wasm32_simd
+ - run: cargo test --target wasm32-wasip1 --benches --features=wasm32_simd
+ env:
+ RUSTC_BOOTSTRAP: 1
+ - name: test vectors w/o SIMD
+ run: cargo test --target wasm32-wasip1
+ working-directory: ./test_vectors
+ - name: test vectors w/ SIMD
+ run: cargo test --target wasm32-wasip1 --features wasm32_simd
+ working-directory: ./test_vectors
+
+ cargo_xwin_test:
+ name: cargo xwin test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: docker run -v $(pwd):/io -w /io messense/cargo-xwin cargo xwin test --target x86_64-pc-windows-msvc --features=mmap,rayon,traits-preview,serde,zeroize
+
+ # Currently only on x86.
+ cmake_c_tests:
+ name: CMake C tests SIMD=${{ matrix.simd }} TBB=${{ matrix.use_tbb }}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ use_tbb: ["OFF", "ON"]
+ simd: ["x86-intrinsics", "amd64-asm"]
+ steps:
+ - uses: actions/checkout@v4
+ - run: |
+ sudo apt-get update
+ sudo apt-get install ninja-build libtbb-dev libtbb12
+ # Test the intrinsics-based and assembly-based implementations.
+ - run: |
+ cmake --fresh -S c -B c/build -G Ninja -DBLAKE3_TESTING=ON -DBLAKE3_TESTING_CI=ON "-DBLAKE3_SIMD_TYPE=${{ matrix.simd }}"
+ cmake --build c/build --target test
+ cat c/build/Testing/Temporary/LastTest.log
+ - run: |
+ cmake --fresh -S c -B c/build -G Ninja -DBLAKE3_TESTING=ON -DBLAKE3_TESTING_CI=ON "-DBLAKE3_SIMD_TYPE=${{ matrix.simd }}" -DBLAKE3_NO_SSE2=1
+ cmake --build c/build --target test
+ cat c/build/Testing/Temporary/LastTest.log
+ - run: |
+ cmake --fresh -S c -B c/build -G Ninja -DBLAKE3_TESTING=ON -DBLAKE3_TESTING_CI=ON "-DBLAKE3_SIMD_TYPE=${{ matrix.simd }}" -DBLAKE3_NO_SSE2=1 -DBLAKE3_NO_SSE41=1
+ cmake --build c/build --target test
+ cat c/build/Testing/Temporary/LastTest.log
+ - run: |
+ cmake --fresh -S c -B c/build -G Ninja -DBLAKE3_TESTING=ON -DBLAKE3_TESTING_CI=ON "-DBLAKE3_SIMD_TYPE=${{ matrix.simd }}" "-DBLAKE3_NO_SSE2=1" "-DBLAKE3_NO_SSE41=1" "-DBLAKE3_NO_AVX2=1"
+ cmake --build c/build --target test
+ cat c/build/Testing/Temporary/LastTest.log
+ - run: |
+ cmake --fresh -S c -B c/build -G Ninja -DBLAKE3_TESTING=ON -DBLAKE3_TESTING_CI=ON "-DBLAKE3_SIMD_TYPE=${{ matrix.simd }}" "-DBLAKE3_NO_SSE2=1" "-DBLAKE3_NO_SSE41=1" "-DBLAKE3_NO_AVX2=1" "-DBLAKE3_NO_AVX512=1"
+ cmake --build c/build --target test
+ cat c/build/Testing/Temporary/LastTest.log
+ # Test with TBB disabled/enabled.
+ - run: |
+ cmake --fresh -S c -B c/build -G Ninja -DBLAKE3_TESTING=ON -DBLAKE3_TESTING_CI=ON "-DBLAKE3_USE_TBB=${{ matrix.use_tbb }}"
+ cmake --build c/build --target test
+ cat c/build/Testing/Temporary/LastTest.log
+ # Build the example with TBB disabled/enabled.
+ - run: |
+ cmake --fresh -S c -B c/build -G Ninja -DBLAKE3_TESTING=ON -DBLAKE3_TESTING_CI=ON -DBLAKE3_EXAMPLES=ON "-DBLAKE3_USE_TBB=${{ matrix.use_tbb }}"
+ cmake --build c/build --target blake3-example
+
+ # Currently only on x86.
+ pkg_config_c_tests:
+ name: pkg-config C tests TBB=${{ matrix.use_tbb }} BUILD_SHARED_LIBS=${{ matrix.shared_libs }} STDLIB=${{ matrix.stdlib }}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ use_tbb: ["OFF", "ON"]
+ shared_libs: ["OFF", "ON"]
+ stdlib: ["libc++", "libstdc++"]
+ steps:
+ - uses: actions/checkout@v4
+ - name: update packages
+ run: |
+ sudo apt-get update
+ sudo apt-get install ninja-build libtbb-dev libtbb12
+ ${{ matrix.stdlib != 'libc++' || 'sudo apt-get install libc++-dev libc++abi-dev' }}
+ - name: configure cmake
+ run: |
+ export CXXFLAGS=${{ matrix.stdlib == 'libc++' && '-stdlib=libc++' || '' }}
+ export CC=${{ matrix.stdlib == 'libc++' && 'clang' || 'gcc' }}
+ export CXX=${{ matrix.stdlib == 'libc++' && 'clang++' || 'g++' }}
+ cmake --fresh -S c -B c/build -G Ninja -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/target "-DBLAKE3_USE_TBB=${{ matrix.use_tbb }}" "-DBUILD_SHARED_LIBS=${{ matrix.shared_libs }}" -DCMAKE_VERBOSE_MAKEFILE=1
+ - run: cmake --build c/build --target install
+ - run: mkdir -p ${{ github.workspace }}/target/bin
+ - run: echo "PKG_CONFIG_PATH=${{ github.workspace }}/target/lib/pkgconfig" >> $GITHUB_ENV
+ - run: gcc -O3 -o ${{ github.workspace }}/target/bin/blake3-example c/example.c $(pkg-config --cflags --libs libblake3)
+ - if: matrix.use_tbb == 'ON'
+ run: gcc -O3 -o ${{ github.workspace }}/target/bin/blake3-example-tbb c/example_tbb.c $(pkg-config --cflags --libs libblake3)
+
+ # Note that this jobs builds AArch64 binaries from an x86_64 host.
+ build_apple_silicon:
+ name: build for Apple Silicon
+ runs-on: macOS-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: aarch64-apple-darwin
+ - name: build blake3
+ run: cargo build --target aarch64-apple-darwin
+ - name: build b3sum
+ run: cargo build --target aarch64-apple-darwin
+ working-directory: ./b3sum
+
+ build_tinycc:
+ name: build with the Tiny C Compiler
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: install TCC
+ run: sudo apt-get install -y tcc
+ - name: compile
+ run: >
+ tcc -shared -O3 -o libblake3.so \
+ -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 \
+ blake3.c blake3_dispatch.c blake3_portable.c
+ working-directory: ./c
+
+ # See https://github.com/BLAKE3-team/BLAKE3/issues/271 for why we test this.
+ # Note that this isn't guaranteed to execute on an AVX-512-supporting server,
+ # but hopefully at least some of the time it will.
+ gcc54:
+ name: "compile and test with GCC 5.4"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: addnab/docker-run-action@v3
+ with:
+ image: gcc:5.4
+ options: -v ${{ github.workspace }}:/work
+ run: |
+ cat /proc/cpuinfo
+ curl https://sh.rustup.rs -sSf | sh -s -- -y --profile minimal
+ cd /work
+ ~/.cargo/bin/cargo test --features prefer_intrinsics
+
+ # CMake build test (Library only).
+ cmake_current_build:
+ name: CMake ${{ matrix.os }} CC=${{ matrix.toolchain.cc }} CXX=${{ matrix.toolchain.cxx }} TBB=${{ matrix.use_tbb }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ cmakeVersion: [latest]
+ ninjaVersion: [latest]
+ os: [ubuntu-latest, macOS-latest, windows-latest]
+ toolchain: [
+ { cc: cl, cxx: cl },
+ { cc: clang, cxx: clang++ },
+ { cc: clang-cl, cxx: clang-cl },
+ { cc: gcc, cxx: g++ },
+ ]
+ use_tbb: [OFF, ON]
+ exclude:
+ - os: macOS-latest
+ toolchain: { cc: cl, cxx: cl }
+ - os: macOS-latest
+ toolchain: { cc: clang-cl, cxx: clang-cl }
+ - os: ubuntu-latest
+ toolchain: { cc: cl, cxx: cl }
+ - os: ubuntu-latest
+ toolchain: { cc: clang-cl, cxx: clang-cl }
+ - os: windows-latest
+ toolchain: { cc: clang, cxx: clang++ }
+ use_tbb: ON
+ - os: windows-latest
+ toolchain: { cc: gcc, cxx: g++ }
+ use_tbb: ON
+ steps:
+ - uses: actions/checkout@v4
+ - uses: lukka/get-cmake@5f6e04f5267c8133f1273bf2103583fc72c46b17
+ with:
+ cmakeVersion: ${{ matrix.cmakeVersion }}
+ ninjaVersion: ${{ matrix.ninjaVersion }}
+ - if: matrix.os == 'macOS-latest'
+ name: Install dependencies on macOS
+ run: |
+ brew update
+ brew install tbb
+ - if: matrix.os == 'ubuntu-latest'
+ name: Install dependencies on Linux
+ run: |
+ sudo apt-get update
+ sudo apt-get install libtbb-dev libtbb12
+ - name: CMake generation, build, install
+ run: |
+ ${{ matrix.os != 'windows-latest' || '& "C:/Program Files/Microsoft Visual Studio/2022/Enterprise/Common7/Tools/Launch-VsDevShell.ps1" -Arch amd64 -SkipAutomaticLocation' }}
+ cmake -S c -B c/build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=${{ github.workspace }}/target -DCMAKE_C_COMPILER=${{ matrix.toolchain.cc }} -DCMAKE_CXX_COMPILER=${{ matrix.toolchain.cxx }} -DBLAKE3_USE_TBB=${{ matrix.use_tbb }} -DBLAKE3_FETCH_TBB=${{ matrix.os == 'windows-latest' && 'YES' || 'NO' }} -DBLAKE3_EXAMPLES=ON
+ cmake --build c/build --target install
+
+ cmake_3-9_build:
+ name: CMake 3.9.6 ubuntu-latest
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: lukka/get-cmake@5f6e04f5267c8133f1273bf2103583fc72c46b17
+ with:
+ cmakeVersion: 3.9.6
+ - name: Create build directory
+ run: mkdir c/build
+ - name: CMake generation
+ run: cmake .. -DCMAKE_INSTALL_PREFIX=${{github.workspace}}/target
+ working-directory: c/build
+ - name: CMake build / install
+ run: make install
+ working-directory: c/build
+
+ miri_smoketest:
+ name: Miri smoketest
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: miri
+ # Currently the test search "miri" only matches "test_miri_smoketest", but
+ # we might add more. If this accidentally picks up anything incompatible or
+ # slow, we can narrow it.
+ - run: cargo miri test miri
+
+ tbb_rust_bindings_tests:
+ name: TBB test bindings ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: ["ubuntu-latest", "macOS-latest"]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - name: install TBB
+ if: matrix.os == 'ubuntu-latest'
+ run: |
+ sudo apt-get update
+ sudo apt-get install libtbb-dev libtbb12
+ - name: install TBB
+ if: matrix.os == 'macOS-latest'
+ run: |
+ brew install tbb
+ echo "CXXFLAGS=-I$(brew --prefix)/include $CPPFLAGS" >> $GITHUB_ENV
+ echo "RUSTFLAGS=-L$(brew --prefix)/lib $RUSTFLAGS" >> $GITHUB_ENV
+ - name: cargo test C bindings with TBB
+ run: cargo test --features=tbb
+ working-directory: ./c/blake3_c_rust_bindings
diff --git b/rust-vendor/blake3/.github/workflows/tag.yml b/rust-vendor/blake3/.github/workflows/tag.yml
new file mode 100644
index 0000000..61be4ff
--- /dev/null
+++ b/rust-vendor/blake3/.github/workflows/tag.yml
@@ -0,0 +1,43 @@
+name: publish_b3sum_binaries
+
+on:
+ push:
+ tags:
+ - "*"
+
+env:
+ BLAKE3_CI: "1"
+ RUSTFLAGS: "-D warnings"
+
+jobs:
+ cargo_tests:
+ name: ${{ matrix.target.name }}
+ runs-on: ${{ matrix.target.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ target: [
+ { "os": "ubuntu-latest", "rust-target": "x86_64-unknown-linux-musl", "name": "Linux" },
+ { "os": "macOS-latest", "rust-target": "x86_64-apple-darwin", "name": "macOS" },
+ { "os": "windows-latest", "rust-target": "x86_64-pc-windows-msvc", "name": "Windows" },
+ ]
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/setup-python@v4
+ with:
+ python-version: "3.x"
+ - run: pip install PyGithub
+ - run: sudo apt-get install musl-tools
+ if: matrix.target.os == 'ubuntu-latest'
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target.rust-target }}
+ - name: build b3sum
+ id: build_b3sum
+ run: python -u .github/workflows/build_b3sum.py ${{ matrix.target.rust-target }}
+ - name: upload release asset
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ GITHUB_TAG: ${{ github.ref }}
+ run: python -u .github/workflows/upload_github_release_asset.py ${{ steps.build_b3sum.outputs.bin_path }}
diff --git b/rust-vendor/blake3/.github/workflows/upload_github_release_asset.py b/rust-vendor/blake3/.github/workflows/upload_github_release_asset.py
new file mode 100755
index 0000000..76340be
--- /dev/null
+++ b/rust-vendor/blake3/.github/workflows/upload_github_release_asset.py
@@ -0,0 +1,73 @@
+#! /usr/bin/env python3
+
+import github
+import os
+import sys
+import time
+
+RETRIES = 10
+
+g = github.Github(os.environ["GITHUB_TOKEN"])
+tag_name = os.environ["GITHUB_TAG"]
+tag_prefix = "refs/tags/"
+if tag_name.startswith(tag_prefix):
+ tag_name = tag_name[len(tag_prefix) :]
+assert len(sys.argv) == 2
+asset_path = sys.argv[1]
+asset_name = os.path.basename(asset_path)
+
+repo = g.get_repo(os.environ["GITHUB_REPOSITORY"])
+
+tags = list(repo.get_tags())
+
+for tag in tags:
+ if tag.name == tag_name:
+ break
+else:
+ raise RuntimeError("no tag named " + repr(tag_name))
+
+try:
+ print("Creating GitHub release for tag " + repr(tag_name) + "...")
+ repo.create_git_release(tag_name, tag_name, tag.commit.commit.message)
+except github.GithubException as github_error:
+ if github_error.data["errors"][0]["code"] == "already_exists":
+ print("Release for tag " + repr(tag_name) + " already exists.")
+ else:
+ raise
+
+
+def get_release():
+ for i in range(RETRIES):
+ releases = list(repo.get_releases())
+ for release in releases:
+ if release.tag_name == tag_name:
+ return release
+ print(f"Release for tag {repr(tag_name)} not found. Retrying...")
+ time.sleep(1)
+ raise RuntimeError("no release for tag " + repr(tag_name))
+
+
+release = get_release()
+
+print("Uploading " + repr(asset_path) + "...")
+for i in range(RETRIES):
+ try:
+ print("Upload attempt #{} of {}...".format(i + 1, RETRIES))
+ release.upload_asset(asset_path)
+ break
+ except github.GithubException as github_error:
+ # Unfortunately the asset upload API is flaky. Even worse, it often
+ # partially succeeds, returning an error to the caller but leaving the
+ # release in a state where subsequent uploads of the same asset will
+ # fail with an "already_exists" error. (Though the asset is not visible
+ # on github.com, so we can't just declare victory and move on.) If we
+ # detect this case, explicitly delete the asset and continue retrying.
+ print(github_error)
+ for asset in release.get_assets():
+ if asset.name == asset_name:
+ print("Found uploaded asset after failure. Deleting...")
+ asset.delete_asset()
+else:
+ raise RuntimeError("All upload attempts failed.")
+
+print("Success!")
diff --git b/rust-vendor/blake3/Cargo.toml.orig b/rust-vendor/blake3/Cargo.toml.orig
new file mode 100644
index 0000000..693ae87
--- /dev/null
+++ b/rust-vendor/blake3/Cargo.toml.orig
@@ -0,0 +1,140 @@
+[package]
+name = "blake3"
+version = "1.8.3"
+authors = ["Jack O'Connor <oconnor663@gmail.com>", "Samuel Neves"]
+description = "the BLAKE3 hash function"
+repository = "https://github.com/BLAKE3-team/BLAKE3"
+license = "CC0-1.0 OR Apache-2.0 OR Apache-2.0 WITH LLVM-exception"
+documentation = "https://docs.rs/blake3"
+readme = "README.md"
+edition = "2024"
+
+[features]
+default = ["std"]
+
+# The NEON implementation does not participate in dynamic feature detection,
+# which is currently x86-only. If "neon" is on, NEON support is assumed. Note
+# that AArch64 always supports NEON, but support on ARMv7 varies. The NEON
+# implementation uses C intrinsics and requires a C compiler.
+neon = []
+
+# The Wasm SIMD implementation does not participate in dynamic feature detection,
+# which is currently x86-only. If "wasm_simd" is on, Wasm SIMD support is assumed.
+# Note that not all Wasm implementations support the Wasm SIMD specification.
+# This may become the default in the future.
+wasm32_simd = []
+
+# Enables std::io traits, including impl Write for Hasher, impl Read and Seek
+# for OutputReader, and the Hasher::update_reader method. This feature is
+# enabled by default. (Previously this also controlled runtime CPU feature
+# detection on x86, but now we use the no-std-compatible `cpufeatures` crate
+# for that.)
+# Also enables the `std` feature of the `constant_time_eq` dependency, which
+# toggles a runtime feature check on 64-bit ARM targets.
+std = ["constant_time_eq/std"]
+
+# The `rayon` feature (disabled by default, but enabled for docs.rs) adds the
+# `update_rayon` and (in combination with `mmap` below) `update_mmap_rayon`
+# methods, for multithreaded hashing. However, even if this feature is enabled,
+# all other APIs remain single-threaded.
+#
+# Implementation detail: We take a dependency on rayon-core instead of rayon,
+# because it builds faster and still includes all the APIs we need.
+rayon = ["dep:rayon-core"]
+
+# The `mmap` feature (disabled by default, but enabled for docs.rs) adds the
+# `update_mmap` and (in combination with `rayon` above) `update_mmap_rayon`
+# helper methods for memory-mapped IO.
+mmap = ["std", "dep:memmap2"]
+
+# Implement the zeroize::Zeroize trait for types in this crate.
+zeroize = ["dep:zeroize", "arrayvec/zeroize"]
+
+# This crate implements traits from the RustCrypto project, exposed here as the
+# "traits-preview" feature. However, these traits aren't stable, and they're
+# expected to change in incompatible ways before they reach 1.0. For that
+# reason, this crate makes no SemVer guarantees for this feature, and callers
+# who use it should expect breaking changes between patch versions of this
+# crate. (The "*-preview" feature name follows the conventions of the RustCrypto
+# "signature" crate.)
+traits-preview = ["dep:digest"]
+
+# ---------- Features below this line are undocumented and unstable. ----------
+# The following features are mainly intended for testing and benchmarking, and
+# they might change or disappear at any time without a major version bump.
+
+# It wasn't originally intended to expose "digest" as its own feature, but the
+# traits-preview feature above predated the "dep:" syntax in Cargo. Version
+# 1.5.2 of this crate started using "dep:" syntax, but that broke some callers
+# in the wild (https://solana.stackexchange.com/q/17787/29050). This feature
+# unbreaks those callers. When Cargo gains the ability to deprecate features,
+# this feature will be deprecated. Note that the relevant trait implementations
+# are still gated by "traits-preview".
+digest = ["dep:digest"]
+
+# By default on x86_64, this crate uses Samuel Neves' hand-written assembly
+# implementations for SSE4.1, AVX2, and AVX512. (These provide both the best
+# runtime performance, and the fastest build times.) And by default on 32-bit
+# x86, this crate uses Rust intrinsics implementations for SSE4.1 and AVX2, and
+# a C intrinsics implementation for AVX-512. In both cases, if a C compiler is
+# not detected, or if AVX-512 support is missing from the detected compiler,
+# build.rs automatically falls back to a pure Rust build. This feature forces
+# that fallback, for testing purposes. (Note that in CI testing, we set the
+# BLAKE3_CI environment variable, which instructs build.rs to error out rather
+# than doing an automatic fallback.)
+pure = []
+
+# As described above, on x86_64 this crate use assembly implementations by
+# default. Enabling the "prefer_intrinsics" feature makes this crate use
+# intrinsics implementations on both 32-bit and 64-bit x86, again for testing
+# purposes.
+prefer_intrinsics = []
+
+# Disable individual instruction sets. CI testing uses these flags to simulate
+# different levels of hardware SIMD support. Note that code for the
+# corresponding instruction set is still compiled; only detection is disabled.
+#
+# As noted above, these flags are *for testing only* and are not stable. It's
+# possible that some users might find that their particular use case performs
+# better if e.g. AVX-512 is disabled, because of issues like CPU downclocking.
+# If that comes up, and if disabling the instruction set here at the feature
+# level turns out to be the right approach, then we can design a stable
+# feature. Until then, we reserve the right to break these features in a patch
+# release.
+no_sse2 = []
+no_sse41 = []
+no_avx2 = []
+no_avx512 = []
+no_neon = []
+
+[package.metadata.docs.rs]
+# Document the rayon/mmap methods and the Serialize/Deserialize/Zeroize impls on docs.rs.
+features = ["mmap", "rayon", "serde", "zeroize"]
+
+[dependencies]
+arrayref = "0.3.5"
+arrayvec = { version = "0.7.4", default-features = false }
+constant_time_eq = { version = "0.4.2", default-features = false }
+cfg-if = "1.0.0"
+digest = { version = "0.10.1", features = ["mac"], optional = true }
+memmap2 = { version = "0.9", optional = true }
+rayon-core = { version = "1.12.1", optional = true }
+serde = { version = "1.0", default-features = false, features = ["derive"], optional = true }
+zeroize = { version = "1", default-features = false, optional = true }
+
+[target.'cfg(any(target_arch = "x86", target_arch = "x86_64"))'.dependencies]
+cpufeatures = "0.2.17"
+
+[dev-dependencies]
+hmac = "0.12.0"
+hex = "0.4.2"
+page_size = "0.6.0"
+rand = "0.9.0"
+rand_chacha = "0.9.0"
+reference_impl = { path = "./reference_impl" }
+tempfile = "3.8.0"
+serde_json = "1.0.107"
+ciborium = "0.2.2"
+
+[build-dependencies]
+cc = "1.1.12"
diff --git b/rust-vendor/blake3/c/.gitignore b/rust-vendor/blake3/c/.gitignore
new file mode 100644
index 0000000..6385bd3
--- /dev/null
+++ b/rust-vendor/blake3/c/.gitignore
@@ -0,0 +1,7 @@
+blake3
+example
+example_tbb
+build/
+*.o
+
+CMakeUserPresets.json
diff --git b/rust-vendor/block-buffer/.cargo_vcs_info.json b/rust-vendor/block-buffer/.cargo_vcs_info.json
new file mode 100644
index 0000000..c42a69a
--- /dev/null
+++ b/rust-vendor/block-buffer/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "6d35952d3d3b124bc1049ad6fb406b42b1ce4bfe"
+ },
+ "path_in_vcs": "block-buffer"
+}
\ No newline at end of file
diff --git b/rust-vendor/block-buffer/Cargo.toml.orig b/rust-vendor/block-buffer/Cargo.toml.orig
new file mode 100644
index 0000000..e663069
--- /dev/null
+++ b/rust-vendor/block-buffer/Cargo.toml.orig
@@ -0,0 +1,15 @@
+[package]
+name = "block-buffer"
+version = "0.10.4"
+authors = ["RustCrypto Developers"]
+license = "MIT OR Apache-2.0"
+description = "Buffer type for block processing of data"
+documentation = "https://docs.rs/block-buffer"
+repository = "https://github.com/RustCrypto/utils"
+keywords = ["block", "buffer"]
+categories = ["cryptography", "no-std"]
+edition = "2018"
+readme = "README.md"
+
+[dependencies]
+generic-array = "0.14"
diff --git b/rust-vendor/bstr/.cargo_vcs_info.json b/rust-vendor/bstr/.cargo_vcs_info.json
new file mode 100644
index 0000000..996f523
--- /dev/null
+++ b/rust-vendor/bstr/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a90f36f0de8c984662c49fb5742027ca24a88cbb"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/bstr/Cargo.toml.orig b/rust-vendor/bstr/Cargo.toml.orig
new file mode 100644
index 0000000..4066e5b
--- /dev/null
+++ b/rust-vendor/bstr/Cargo.toml.orig
@@ -0,0 +1,76 @@
+[package]
+name = "bstr"
+version = "1.12.1" #:version
+authors = ["Andrew Gallant <jamslam@gmail.com>"]
+description = "A string type that is not required to be valid UTF-8."
+documentation = "https://docs.rs/bstr"
+homepage = "https://github.com/BurntSushi/bstr"
+repository = "https://github.com/BurntSushi/bstr"
+readme = "README.md"
+keywords = ["string", "str", "byte", "bytes", "text"]
+license = "MIT OR Apache-2.0"
+categories = ["text-processing", "encoding"]
+exclude = ["/.github", "/scripts", "/src/unicode/data"]
+edition = "2021"
+rust-version = "1.73"
+resolver = "2"
+
+[workspace]
+members = ["bench"]
+
+[lib]
+bench = false
+
+[features]
+default = ["std", "unicode"]
+std = ["alloc", "memchr/std", "serde?/std"]
+alloc = ["memchr/alloc", "serde?/alloc"]
+unicode = ["dep:regex-automata"]
+serde = ["dep:serde"]
+
+[dependencies]
+memchr = { version = "2.7.1", default-features = false }
+serde = { version = "1.0.85", default-features = false, optional = true }
+
+[dependencies.regex-automata]
+version = "0.4.1"
+default-features = false
+features = ["dfa-search"]
+optional = true
+
+[dev-dependencies]
+quickcheck = { version = "1", default-features = false }
+ucd-parse = "0.1.3"
+unicode-segmentation = "1.2.1"
+
+[package.metadata.docs.rs]
+# We want to document all features.
+all-features = true
+# Since this crate's feature setup is pretty complicated, it is worth opting
+# into a nightly unstable option to show the features that need to be enabled
+# for public API items. To do that, we set 'docsrs', and when that's enabled,
+# we enable the 'doc_cfg' feature.
+#
+# To test this locally, run:
+#
+# RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features
+rustdoc-args = ["--cfg", "docsrs"]
+
+[profile.release]
+debug = true
+
+[[example]]
+name = "graphemes"
+required-features = ["std", "unicode"]
+
+[[example]]
+name = "lines"
+required-features = ["std"]
+
+[[example]]
+name = "uppercase"
+required-features = ["std", "unicode"]
+
+[[example]]
+name = "words"
+required-features = ["std", "unicode"]
diff --git b/rust-vendor/bumpalo/.cargo_vcs_info.json b/rust-vendor/bumpalo/.cargo_vcs_info.json
new file mode 100644
index 0000000..cbd3053
--- /dev/null
+++ b/rust-vendor/bumpalo/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "8c2172aacc35e6b5b95589e87e34b7a31a5b8220"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/bumpalo/Cargo.toml.orig b/rust-vendor/bumpalo/Cargo.toml.orig
new file mode 100644
index 0000000..cb10bfc
--- /dev/null
+++ b/rust-vendor/bumpalo/Cargo.toml.orig
@@ -0,0 +1,72 @@
+[package]
+authors = ["Nick Fitzgerald <fitzgen@gmail.com>"]
+categories = ["memory-management", "rust-patterns", "no-std"]
+description = "A fast bump allocation arena for Rust."
+documentation = "https://docs.rs/bumpalo"
+edition = "2021"
+exclude = ["/.github/*", "/benches", "/tests", "valgrind.supp", "bumpalo.png"]
+license = "MIT OR Apache-2.0"
+name = "bumpalo"
+readme = "README.md"
+repository = "https://github.com/fitzgen/bumpalo"
+rust-version = "1.71.1"
+version = "3.19.1"
+
+[package.metadata.docs.rs]
+all-features = true
+
+[lib]
+path = "src/lib.rs"
+bench = false
+
+[[bench]]
+name = "benches"
+path = "benches/benches.rs"
+harness = false
+required-features = ["collections"]
+
+[[bench]]
+name = "allocator_api"
+path = "benches/allocator_api.rs"
+harness = false
+required-features = ["bench_allocator_api"]
+
+[[test]]
+name = "try_alloc"
+path = "tests/try_alloc.rs"
+harness = false
+
+[dependencies]
+# This dependency provides a version of the unstable nightly Rust `Allocator`
+# trait on stable Rust. Enabling this feature means that `bumpalo` will
+# implement its `Allocator` trait.
+allocator-api2 = { version = "0.2.8", default-features = false, optional = true }
+
+# This dependency is here to allow integration with Serde, if the `serde` feature is enabled
+serde = { version = "1.0.171", optional = true }
+
+[dev-dependencies]
+quickcheck = "1.0.3"
+criterion = "0.3.6"
+rand = "0.8.5"
+serde = { version = "1.0.197", features = ["derive"] }
+serde_json = "1.0.115"
+blink-alloc = { version = "=0.4.0" }
+
+# Make sure that criterion pulls in a rayon that supports our MSRV.
+rayon = { version = "=1.10.0" }
+rayon-core = { version = "=1.12.1" }
+
+[features]
+default = []
+collections = []
+boxed = []
+allocator_api = []
+std = []
+serde = ["dep:serde"]
+
+# Feature for bumpalo's internal development only. Do not use!
+bench_allocator_api = ["allocator_api", "blink-alloc/nightly"]
+
+# [profile.bench]
+# debug = true
diff --git b/rust-vendor/bytecount/.cargo_vcs_info.json b/rust-vendor/bytecount/.cargo_vcs_info.json
new file mode 100644
index 0000000..d32ba73
--- /dev/null
+++ b/rust-vendor/bytecount/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f06647f90a45ab302d9423dbe85019d595abf8c2"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/bytecount/.github/dependabot.yml b/rust-vendor/bytecount/.github/dependabot.yml
new file mode 100644
index 0000000..c11601f
--- /dev/null
+++ b/rust-vendor/bytecount/.github/dependabot.yml
@@ -0,0 +1,8 @@
+version: 2
+updates:
+- package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "04:00"
+ open-pull-requests-limit: 10
diff --git b/rust-vendor/bytecount/.github/workflows/ci.yml b/rust-vendor/bytecount/.github/workflows/ci.yml
new file mode 100644
index 0000000..678caf5
--- /dev/null
+++ b/rust-vendor/bytecount/.github/workflows/ci.yml
@@ -0,0 +1,95 @@
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+
+name: Continuous integration
+
+jobs:
+ test:
+ name: Test suite
+ strategy:
+ matrix:
+ rust:
+ - 1.32.0
+ - stable
+ - beta
+ - nightly
+ os:
+ - macos-latest
+ - ubuntu-latest
+ arch:
+ - i686
+ - x86_64
+ - aarch64
+ features:
+ - default
+ - runtime-dispatch-simd
+ - generic-simd
+ exclude:
+ - rust: 1.32.0
+ features: generic-simd
+ - rust: stable
+ features: generic-simd
+ - rust: beta
+ features: generic-simd
+
+ env:
+ ARCH: ${{ matrix.arch }}
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v3
+ - uses: actions-rs/toolchain@v1.0.7
+ with:
+ profile: minimal
+ toolchain: ${{ matrix.rust }}
+ override: true
+ components: clippy, rustfmt
+ - uses: Swatinem/rust-cache@v2
+ - name: Build (1.32.0, default)
+ uses: actions-rs/cargo@v1.0.3
+ with:
+ command: build
+ args: --release
+ if: ${{ matrix.features == 'default' && matrix.rust == '1.32.0' }}
+ - name: Build (1.32.0, non-default)
+ uses: actions-rs/cargo@v1.0.3
+ with:
+ command: build
+ args: --release --features ${{ matrix.features }}
+ if: ${{ matrix.features != 'default' && matrix.rust == '1.32.0' }}
+ - name: Test (default)
+ uses: actions-rs/cargo@v1.0.3
+ with:
+ command: test
+ args: --release
+ if: ${{ matrix.features == 'default' && matrix.rust != '1.32.0' }}
+ - name: Test (non-default)
+ uses: actions-rs/cargo@v1.0.3
+ with:
+ command: test
+ args: --release --features ${{ matrix.features }}
+ if: ${{ matrix.features != 'default' && matrix.rust != '1.32.0' }}
+ - name: bench
+ uses: actions-rs/cargo@v1.0.3
+ with:
+ command: bench
+ env:
+ COUNTS: 0,10,1000,100000,10000000
+ if: ${{ matrix.rust != '1.32.0' }}
+
+ # Fails currently on check_count_overflow_many
+ #
+ # miri:
+ # name: MIRI testing
+ # runs-on: ubuntu-latest
+ # steps:
+ # - uses: actions/checkout@v2.3.4
+ # - uses: actions-rs/toolchain@v1.0.7
+ # with:
+ # profile: minimal
+ # toolchain: nightly
+ # override: true
+ # - name: Run miri
+ # run: ./ci/miri.sh
diff --git b/rust-vendor/bytecount/Cargo.toml.orig b/rust-vendor/bytecount/Cargo.toml.orig
new file mode 100644
index 0000000..64c7328
--- /dev/null
+++ b/rust-vendor/bytecount/Cargo.toml.orig
@@ -0,0 +1,34 @@
+[package]
+authors = ["Andre Bogus <bogusandre@gmail.de>", "Joshua Landau <joshua@landau.ws>"]
+description = "count occurrences of a given byte, or the number of UTF-8 code points, in a byte slice, fast"
+edition = "2018"
+name = "bytecount"
+version = "0.6.9"
+license = "Apache-2.0/MIT"
+repository = "https://github.com/llogiq/bytecount"
+categories = ["algorithms", "no-std"]
+readme = "README.md"
+exclude = ["/.travis.yml", "/appveyor.yml"]
+
+[badges]
+travis-ci = { repository = "llogiq/bytecount" }
+appveyor = { repository = "llogiq/bytecount" }
+
+[lib]
+bench = false
+
+[features]
+generic-simd = []
+runtime-dispatch-simd = []
+html_report = []
+
+[dependencies]
+
+[dev-dependencies]
+quickcheck = "1.0"
+rand = "0.8"
+criterion = { version = "0.4", default-features = false }
+
+[[bench]]
+name = "bench"
+harness = false
diff --git b/rust-vendor/byteorder/.cargo_vcs_info.json b/rust-vendor/byteorder/.cargo_vcs_info.json
new file mode 100644
index 0000000..39b39ef
--- /dev/null
+++ b/rust-vendor/byteorder/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ec068eefa042d494475db125c4b034bd8e9e34dd"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/byteorder/.github/workflows/ci.yml b/rust-vendor/byteorder/.github/workflows/ci.yml
new file mode 100644
index 0000000..1aa3c3b
--- /dev/null
+++ b/rust-vendor/byteorder/.github/workflows/ci.yml
@@ -0,0 +1,183 @@
+name: ci
+on:
+ pull_request:
+ branches:
+ - master
+ push:
+ branches:
+ - master
+ schedule:
+ - cron: '00 01 * * *'
+
+# The section is needed to drop write-all permissions that are granted on
+# `schedule` event. By specifying any permission explicitly all others are set
+# to none. By using the principle of least privilege the damage a compromised
+# workflow can do (because of an injection or compromised third party tool or
+# action) is restricted. Currently the worklow doesn't need any additional
+# permission except for pulling the code. Adding labels to issues, commenting
+# on pull-requests, etc. may need additional permissions:
+#
+# Syntax for this section:
+# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#permissions
+#
+# Reference for how to assign permissions on a job-by-job basis:
+# https://docs.github.com/en/actions/using-jobs/assigning-permissions-to-jobs
+#
+# Reference for available permissions that we can enable if needed:
+# https://docs.github.com/en/actions/security-guides/automatic-token-authentication#permissions-for-the-github_token
+permissions:
+ # to fetch code (actions/checkout)
+ contents: read
+
+jobs:
+ test:
+ name: test
+ env:
+ # For some builds, we use cross to test on 32-bit and big-endian
+ # systems.
+ CARGO: cargo
+ # When CARGO is set to CROSS, TARGET is set to `--target matrix.target`.
+ # Note that we only use cross on Linux, so setting a target on a
+ # different OS will just use normal cargo.
+ TARGET:
+ # Bump this as appropriate. We pin to a version to make sure CI
+ # continues to work as cross releases in the past have broken things
+ # in subtle ways.
+ CROSS_VERSION: v0.2.5
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - build: pinned
+ os: ubuntu-latest
+ rust: 1.60.0
+ - build: stable
+ os: ubuntu-latest
+ rust: stable
+ - build: beta
+ os: ubuntu-latest
+ rust: beta
+ - build: nightly
+ os: ubuntu-latest
+ rust: nightly
+ - build: macos
+ os: macos-latest
+ rust: stable
+ - build: win-msvc
+ os: windows-latest
+ rust: stable
+ - build: win-gnu
+ os: windows-latest
+ rust: stable-x86_64-gnu
+ - build: stable-x86
+ os: ubuntu-latest
+ rust: stable
+ target: i686-unknown-linux-gnu
+ - build: stable-aarch64
+ os: ubuntu-latest
+ rust: stable
+ target: aarch64-unknown-linux-gnu
+ - build: stable-powerpc64
+ os: ubuntu-latest
+ rust: stable
+ target: powerpc64-unknown-linux-gnu
+ - build: stable-s390x
+ os: ubuntu-latest
+ rust: stable
+ target: s390x-unknown-linux-gnu
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Use Cross
+ if: matrix.os == 'ubuntu-latest' && matrix.target != ''
+ run: |
+ # In the past, new releases of 'cross' have broken CI. So for now, we
+ # pin it. We also use their pre-compiled binary releases because cross
+ # has over 100 dependencies and takes a bit to compile.
+ dir="$RUNNER_TEMP/cross-download"
+ mkdir "$dir"
+ echo "$dir" >> $GITHUB_PATH
+ cd "$dir"
+ curl -LO "https://github.com/cross-rs/cross/releases/download/$CROSS_VERSION/cross-x86_64-unknown-linux-musl.tar.gz"
+ tar xf cross-x86_64-unknown-linux-musl.tar.gz
+ echo "CARGO=cross" >> $GITHUB_ENV
+ echo "TARGET=--target ${{ matrix.target }}" >> $GITHUB_ENV
+ - name: Show command used for Cargo
+ run: |
+ echo "cargo command is: ${{ env.CARGO }}"
+ echo "target flag is: ${{ env.TARGET }}"
+ - name: Show CPU info for debugging
+ if: matrix.os == 'ubuntu-latest'
+ run: lscpu
+ - name: Build
+ run: ${{ env.CARGO }} build --verbose $TARGET
+ - name: Build (no default)
+ run: ${{ env.CARGO }} build --verbose $TARGET --no-default-features
+ - name: Build docs
+ run: ${{ env.CARGO }} doc --verbose $TARGET
+
+ # Our dev dependencies evolve more rapidly than we'd like, so only run
+ # tests when we aren't pinning the Rust version.
+ - name: Tests
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose $TARGET
+
+ - name: Tests (no default, lib only)
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose --no-default-features --lib $TARGET
+
+ - name: Tests (i128)
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose --features i128 $TARGET
+
+ - name: Tests (no default, lib only, i128)
+ if: matrix.build != 'pinned'
+ run: ${{ env.CARGO }} test --verbose --no-default-features --features i128 --lib $TARGET
+
+ - name: Compile benchmarks
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run $TARGET
+
+ - name: Compile benchmarks (no default)
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run --no-default-features $TARGET
+
+ - name: Compile benchmarks (i128)
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run --features i128 $TARGET
+
+ - name: Compile benchmarks (no default, i128)
+ if: matrix.build == 'nightly'
+ run: cargo bench --verbose --no-run --no-default-features --features i128 $TARGET
+
+ miri:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@master
+ with:
+ # We use nightly here so that we can use miri I guess?
+ toolchain: nightly
+ components: miri
+ - name: Run full test suite
+ run: cargo miri test --verbose
+
+ rustfmt:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: rustfmt
+ - name: Check formatting
+ run: cargo fmt -- --check
diff --git b/rust-vendor/byteorder/Cargo.toml.orig b/rust-vendor/byteorder/Cargo.toml.orig
new file mode 100644
index 0000000..91e6ab1
--- /dev/null
+++ b/rust-vendor/byteorder/Cargo.toml.orig
@@ -0,0 +1,34 @@
+[package]
+name = "byteorder"
+version = "1.5.0" #:version
+authors = ["Andrew Gallant <jamslam@gmail.com>"]
+description = "Library for reading/writing numbers in big-endian and little-endian."
+documentation = "https://docs.rs/byteorder"
+homepage = "https://github.com/BurntSushi/byteorder"
+repository = "https://github.com/BurntSushi/byteorder"
+readme = "README.md"
+categories = ["encoding", "parsing", "no-std"]
+keywords = ["byte", "endian", "big-endian", "little-endian", "binary"]
+license = "Unlicense OR MIT"
+edition = "2021"
+rust-version = "1.60"
+
+[lib]
+name = "byteorder"
+bench = false
+
+[dev-dependencies]
+quickcheck = { version = "0.9.2", default-features = false }
+rand = "0.7"
+
+[features]
+default = ["std"]
+std = []
+
+# This feature is no longer used and is DEPRECATED. This crate now
+# automatically enables i128 support for Rust compilers that support it. The
+# feature will be removed if and when a new major version is released.
+i128 = []
+
+[profile.bench]
+opt-level = 3
diff --git b/rust-vendor/calendrical_calculations/.cargo_vcs_info.json b/rust-vendor/calendrical_calculations/.cargo_vcs_info.json
new file mode 100644
index 0000000..a94bb37
--- /dev/null
+++ b/rust-vendor/calendrical_calculations/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "29dfe2790b6cfdab94ca6a6b69f58ce54802dbf7"
+ },
+ "path_in_vcs": "utils/calendrical_calculations"
+}
\ No newline at end of file
diff --git b/rust-vendor/calendrical_calculations/Cargo.toml.orig b/rust-vendor/calendrical_calculations/Cargo.toml.orig
new file mode 100644
index 0000000..9c924dd
--- /dev/null
+++ b/rust-vendor/calendrical_calculations/Cargo.toml.orig
@@ -0,0 +1,40 @@
+# This file is part of ICU4X.
+#
+# The contents of this file implement algorithms from Calendrical Calculations
+# by Reingold & Dershowitz, Cambridge University Press, 4th edition (2018),
+# which have been released as Lisp code at <https://github.com/EdReingold/calendar-code2/>
+# under the Apache-2.0 license. Accordingly, this file is released under
+# the Apache License, Version 2.0 which can be found at the calendrical_calculations
+# package root or at http://www.apache.org/licenses/LICENSE-2.0.
+
+[package]
+name = "calendrical_calculations"
+description = "Calendrical calculations in Rust"
+version = "0.2.3"
+categories = ["rust-patterns", "memory-management", "caching", "no-std", "data-structures"]
+keywords = ["zerocopy", "serialization", "zero-copy", "serde"]
+
+authors.workspace = true
+edition.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version = "1.82"
+
+
+# This is a special exception: The algorithms in this crate are based on "Calendrical Calculations" by Reingold and Dershowitz
+# which has its lisp code published at https://github.com/EdReingold/calendar-code2/
+license = "Apache-2.0"
+
+[package.metadata.workspaces]
+independent = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+core_maths = { workspace = true }
+displaydoc = { workspace = true }
+log = { workspace = true, optional = true }
+
+[features]
+logging = ["dep:log"]
diff --git b/rust-vendor/cc/.cargo_vcs_info.json b/rust-vendor/cc/.cargo_vcs_info.json
new file mode 100644
index 0000000..92d46ba
--- /dev/null
+++ b/rust-vendor/cc/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "0767349e1d1253e6849b4c2af2059db661f54343"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/cc/Cargo.toml.orig b/rust-vendor/cc/Cargo.toml.orig
new file mode 100644
index 0000000..2cf3fc4
--- /dev/null
+++ b/rust-vendor/cc/Cargo.toml.orig
@@ -0,0 +1,59 @@
+[package]
+name = "cc"
+version = "1.2.55"
+authors = ["Alex Crichton <alex@alexcrichton.com>"]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/cc-rs"
+homepage = "https://github.com/rust-lang/cc-rs"
+documentation = "https://docs.rs/cc"
+description = """
+A build-time dependency for Cargo build scripts to assist in invoking the native
+C compiler to compile native C code into a static archive to be linked into Rust
+code.
+"""
+keywords = ["build-dependencies"]
+readme = "README.md"
+categories = ["development-tools::build-utils"]
+# The binary target is only used by tests.
+exclude = ["/.github", "tests", "src/bin"]
+edition = "2018"
+rust-version = "1.63"
+
+[dependencies]
+jobserver = { version = "0.1.30", default-features = false, optional = true }
+shlex = "1.3.0"
+find-msvc-tools = { version = "0.1.9", path = "find-msvc-tools" }
+
+[target.'cfg(unix)'.dependencies]
+# Don't turn on the feature "std" for this, see https://github.com/rust-lang/cargo/issues/4866
+# which is still an issue with `resolver = "1"`.
+libc = { version = "0.2.62", default-features = false, optional = true }
+
+[features]
+parallel = ["dep:libc", "dep:jobserver"]
+# This is a placeholder feature for people who incorrectly used `cc` with `features = ["jobserver"]`
+# so that they aren't broken. This has never enabled `parallel`, so we won't do that.
+jobserver = []
+
+[dev-dependencies]
+tempfile = "3"
+
+[workspace]
+members = [
+ "find-msvc-tools",
+ "dev-tools/cc-test",
+ "dev-tools/gen-target-info",
+ "dev-tools/gen-windows-sys-binding",
+ "dev-tools/wasi-test",
+]
+
+[patch.crates-io]
+cc = { path = "." }
+
+[lints.rust]
+unexpected_cfgs = { level = "allow", check-cfg = ['cfg(disable_clang_cl_tests)'] }
+
+[profile.release]
+opt-level = 3 # Or "s" or "z" for different optimization goals
+lto = true
+
diff --git b/rust-vendor/cexpr/.cargo_vcs_info.json b/rust-vendor/cexpr/.cargo_vcs_info.json
new file mode 100644
index 0000000..72d29e1
--- /dev/null
+++ b/rust-vendor/cexpr/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "sha1": "c7ccdfbc37b508cfda1171ab4f89afaeb72e82f3"
+ }
+}
diff --git b/rust-vendor/cexpr/.github/workflows/ci.yml b/rust-vendor/cexpr/.github/workflows/ci.yml
new file mode 100644
index 0000000..8af3b70
--- /dev/null
+++ b/rust-vendor/cexpr/.github/workflows/ci.yml
@@ -0,0 +1,31 @@
+name: CI
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+
+
+jobs:
+ build_and_test:
+ name: Build and Test
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Install LLVM and Clang
+ uses: KyleMayes/install-llvm-action@v1
+ with:
+ version: "11.0"
+ directory: ${{ runner.temp }}/llvm-11.0
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: --verbose --all
diff --git b/rust-vendor/cexpr/Cargo.toml.orig b/rust-vendor/cexpr/Cargo.toml.orig
new file mode 100644
index 0000000..6de1e89
--- /dev/null
+++ b/rust-vendor/cexpr/Cargo.toml.orig
@@ -0,0 +1,19 @@
+[package]
+name = "cexpr"
+version = "0.6.0"
+edition = "2018"
+authors = ["Jethro Beekman <jethro@jbeekman.nl>"]
+license = "Apache-2.0/MIT"
+description = "A C expression parser and evaluator"
+documentation = "https://docs.rs/cexpr/"
+repository = "https://github.com/jethrogb/rust-cexpr"
+keywords = ["C","expression","parser"]
+
+[badges]
+travis-ci = { repository = "jethrogb/rust-cexpr" }
+
+[dependencies]
+nom = { version = "7", default-features = false, features = ["std"] }
+
+[dev-dependencies]
+clang-sys = ">= 0.13.0, < 0.29.0"
diff --git b/rust-vendor/cfg-if/.cargo_vcs_info.json b/rust-vendor/cfg-if/.cargo_vcs_info.json
new file mode 100644
index 0000000..d4bec31
--- /dev/null
+++ b/rust-vendor/cfg-if/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "3510ca6abea34cbbc702509a4e50ea9709925eda"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/cfg-if/.github/dependabot.yml b/rust-vendor/cfg-if/.github/dependabot.yml
new file mode 100644
index 0000000..36e4ff0
--- /dev/null
+++ b/rust-vendor/cfg-if/.github/dependabot.yml
@@ -0,0 +1,14 @@
+version: 2
+updates:
+ - package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: daily
+ time: "08:00"
+ open-pull-requests-limit: 10
+
+ - package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: weekly
+ open-pull-requests-limit: 3
diff --git b/rust-vendor/cfg-if/.github/workflows/main.yaml b/rust-vendor/cfg-if/.github/workflows/main.yaml
new file mode 100644
index 0000000..7288a62
--- /dev/null
+++ b/rust-vendor/cfg-if/.github/workflows/main.yaml
@@ -0,0 +1,48 @@
+name: CI
+on: [push, pull_request]
+
+permissions:
+ contents: read
+
+env:
+ RUSTDOCFLAGS: -Dwarnings
+ RUSTFLAGS: -Dwarnings
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - "1.32" # msrv
+ - stable
+ - beta
+ - nightly
+ steps:
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - name: Install Rust ${{ matrix.rust }}
+ run: |
+ rustup self update
+ rustup update ${{ matrix.rust }}
+ rustup default ${{ matrix.rust }}
+ rustc -vV
+ - name: Run tests
+ run: |
+ set -eux
+ # Remove `-Dwarnings` at the MSRV since lints may be different
+ [ "${{ matrix.rust }}" = "1.32" ] && export RUSTFLAGS="--cfg msrv_test"
+ cargo test
+
+ rustfmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
+ - name: Install Rust Stable
+ run: |
+ rustup update stable
+ rustup default stable
+ rustup component add rustfmt
+ - name: Run rustfmt
+ run: cargo fmt -- --check
diff --git b/rust-vendor/cfg-if/.github/workflows/publish.yaml b/rust-vendor/cfg-if/.github/workflows/publish.yaml
new file mode 100644
index 0000000..248e3cc
--- /dev/null
+++ b/rust-vendor/cfg-if/.github/workflows/publish.yaml
@@ -0,0 +1,25 @@
+name: Release-plz
+
+permissions:
+ pull-requests: write
+ contents: write
+
+on:
+ push: { branches: [main] }
+
+jobs:
+ release-plz:
+ name: Release-plz
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+ with:
+ fetch-depth: 0
+ - name: Install Rust (rustup)
+ run: rustup update nightly --no-self-update && rustup default nightly
+ - name: Run release-plz
+ uses: MarcoIeni/release-plz-action@v0.5
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
diff --git b/rust-vendor/cfg-if/Cargo.toml.orig b/rust-vendor/cfg-if/Cargo.toml.orig
new file mode 100644
index 0000000..6a98924
--- /dev/null
+++ b/rust-vendor/cfg-if/Cargo.toml.orig
@@ -0,0 +1,20 @@
+[package]
+name = "cfg-if"
+version = "1.0.4"
+authors = ["Alex Crichton <alex@alexcrichton.com>"]
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+repository = "https://github.com/rust-lang/cfg-if"
+description = """
+A macro to ergonomically define an item depending on a large number of #[cfg]
+parameters. Structured like an if-else chain, the first matching branch is the
+item that gets emitted.
+"""
+edition = "2018"
+rust-version = "1.32"
+
+[dependencies]
+core = { version = "1.0.0", optional = true, package = "rustc-std-workspace-core" }
+
+[features]
+rustc-dep-of-std = ["core"]
diff --git b/rust-vendor/cfg_aliases/.cargo_vcs_info.json b/rust-vendor/cfg_aliases/.cargo_vcs_info.json
new file mode 100644
index 0000000..3875c98
--- /dev/null
+++ b/rust-vendor/cfg_aliases/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "3d55ba79872b61265a7176110a5200df0c9d9e54"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/cfg_aliases/Cargo.toml.orig b/rust-vendor/cfg_aliases/Cargo.toml.orig
new file mode 100644
index 0000000..ae270ef
--- /dev/null
+++ b/rust-vendor/cfg_aliases/Cargo.toml.orig
@@ -0,0 +1,22 @@
+[package]
+name = "cfg_aliases"
+version = "0.2.1"
+license = "MIT"
+authors = ["Zicklag <zicklag@katharostech.com>"]
+edition = "2018"
+description = "A tiny utility to help save you a lot of effort with long winded `#[cfg()]` checks."
+keywords = ["cfg", "alias", "conditional", "compilation", "build"]
+categories = ["development-tools", "development-tools::build-utils"]
+
+documentation = "https://docs.rs/cfg_aliases"
+readme = "README.md"
+homepage = "https://github.com/katharostech/cfg_aliases"
+repository = "https://github.com/katharostech/cfg_aliases"
+
+exclude = ["modoc.config", "release.toml"]
+
+[badges]
+maintenance = { status = "passively-maintained" }
+
+[lints.clippy]
+str_to_string = "deny"
diff --git b/rust-vendor/chrono/.cargo_vcs_info.json b/rust-vendor/chrono/.cargo_vcs_info.json
new file mode 100644
index 0000000..14f0a4e
--- /dev/null
+++ b/rust-vendor/chrono/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "45caaa970ce443b11106a710ee24bd2480e5ff99"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/chrono/Cargo.toml.orig b/rust-vendor/chrono/Cargo.toml.orig
new file mode 100644
index 0000000..a544fcb
--- /dev/null
+++ b/rust-vendor/chrono/Cargo.toml.orig
@@ -0,0 +1,75 @@
+[package]
+name = "chrono"
+version = "0.4.43"
+description = "Date and time library for Rust"
+homepage = "https://github.com/chronotope/chrono"
+documentation = "https://docs.rs/chrono/"
+repository = "https://github.com/chronotope/chrono"
+keywords = ["date", "time", "calendar"]
+categories = ["date-and-time"]
+readme = "README.md"
+license = "MIT OR Apache-2.0"
+include = ["src/*", "tests/*.rs", "LICENSE.txt", "CITATION.cff"]
+edition = "2021"
+rust-version = "1.62.0"
+
+[lib]
+name = "chrono"
+
+[features]
+# Don't forget to adjust `ALL_NON_EXCLUSIVE_FEATURES` in CI scripts when adding a feature or an optional dependency.
+default = ["clock", "std", "oldtime", "wasmbind"]
+alloc = []
+defmt = ["dep:defmt", "pure-rust-locales?/defmt"]
+libc = []
+winapi = ["windows-link"]
+std = ["alloc"]
+clock = ["winapi", "iana-time-zone", "now"]
+now = ["std"]
+core-error = []
+oldtime = []
+wasmbind = ["wasm-bindgen", "js-sys"]
+unstable-locales = ["pure-rust-locales"]
+# Note that rkyv-16, rkyv-32, and rkyv-64 are mutually exclusive.
+rkyv = ["dep:rkyv", "rkyv/size_32"]
+rkyv-16 = ["dep:rkyv", "rkyv?/size_16"]
+rkyv-32 = ["dep:rkyv", "rkyv?/size_32"]
+rkyv-64 = ["dep:rkyv", "rkyv?/size_64"]
+rkyv-validation = ["rkyv?/validation"]
+# Features for internal use only:
+__internal_bench = []
+
+[dependencies]
+num-traits = { version = "0.2", default-features = false }
+serde = { version = "1.0.99", default-features = false, optional = true }
+pure-rust-locales = { version = "0.8.2", optional = true }
+rkyv = { version = "0.7.43", optional = true, default-features = false }
+arbitrary = { version = "1.0.0", features = ["derive"], optional = true }
+defmt = { version = "1.0.1", optional = true }
+
+[target.'cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))'.dependencies]
+wasm-bindgen = { version = "0.2", optional = true }
+js-sys = { version = "0.3", optional = true } # contains FFI bindings for the JS Date API
+
+[target.'cfg(windows)'.dependencies]
+windows-link = { version = "0.2", optional = true }
+
+[target.'cfg(unix)'.dependencies]
+iana-time-zone = { version = "0.1.45", optional = true, features = ["fallback"] }
+
+[dev-dependencies]
+serde_json = { version = "1" }
+serde_derive = { version = "1", default-features = false }
+similar-asserts = { version = "1.6.1" }
+bincode = { version = "1.3.0" }
+windows-bindgen = { version = "0.66" } # MSRV is 1.74
+
+[target.'cfg(all(target_arch = "wasm32", not(any(target_os = "emscripten", target_os = "wasi"))))'.dev-dependencies]
+wasm-bindgen-test = "0.3"
+
+[package.metadata.docs.rs]
+features = ["arbitrary", "rkyv", "serde", "unstable-locales"]
+rustdoc-args = ["--cfg", "docsrs"]
+
+[package.metadata.playground]
+features = ["serde"]
diff --git b/rust-vendor/chrono/README.md b/rust-vendor/chrono/README.md
new file mode 100644
index 0000000..76cd26e
--- /dev/null
+++ b/rust-vendor/chrono/README.md
@@ -0,0 +1,92 @@
+[Chrono][docsrs]: Timezone-aware date and time handling
+========================================
+
+[![Chrono GitHub Actions][gh-image]][gh-checks]
+[![Chrono on crates.io][cratesio-image]][cratesio]
+[![Chrono on docs.rs][docsrs-image]][docsrs]
+[![Chat][discord-image]][discord]
+[![codecov.io][codecov-img]][codecov-link]
+
+[gh-image]: https://github.com/chronotope/chrono/actions/workflows/test.yml/badge.svg?branch=main
+[gh-checks]: https://github.com/chronotope/chrono/actions/workflows/test.yml?query=branch%3Amain
+[cratesio-image]: https://img.shields.io/crates/v/chrono.svg
+[cratesio]: https://crates.io/crates/chrono
+[docsrs-image]: https://docs.rs/chrono/badge.svg
+[docsrs]: https://docs.rs/chrono
+[discord-image]: https://img.shields.io/discord/976380008299917365?logo=discord
+[discord]: https://discord.gg/sXpav4PS7M
+[codecov-img]: https://img.shields.io/codecov/c/github/chronotope/chrono?logo=codecov
+[codecov-link]: https://codecov.io/gh/chronotope/chrono
+
+Chrono aims to provide all functionality needed to do correct operations on dates and times in the
+[proleptic Gregorian calendar](https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar):
+
+* The [`DateTime`](https://docs.rs/chrono/latest/chrono/struct.DateTime.html) type is timezone-aware
+ by default, with separate timezone-naive types.
+* Operations that may produce an invalid or ambiguous date and time return `Option` or
+ [`MappedLocalTime`](https://docs.rs/chrono/latest/chrono/offset/enum.MappedLocalTime.html).
+* Configurable parsing and formatting with an `strftime` inspired date and time formatting syntax.
+* The [`Local`](https://docs.rs/chrono/latest/chrono/offset/struct.Local.html) timezone works with
+ the current timezone of the OS.
+* Types and operations are implemented to be reasonably efficient.
+
+Timezone data is not shipped with chrono by default to limit binary sizes. Use the companion crate
+[Chrono-TZ](https://crates.io/crates/chrono-tz) or [`tzfile`](https://crates.io/crates/tzfile) for
+full timezone support.
+
+## Documentation
+
+See [docs.rs](https://docs.rs/chrono/latest/chrono/) for the API reference.
+
+## Limitations
+
+* Only the proleptic Gregorian calendar (i.e. extended to support older dates) is supported.
+* Date types are limited to about +/- 262,000 years from the common epoch.
+* Time types are limited to nanosecond accuracy.
+* Leap seconds can be represented, but Chrono does not fully support them.
+ See [Leap Second Handling](https://docs.rs/chrono/latest/chrono/naive/struct.NaiveTime.html#leap-second-handling).
+
+## Crate features
+
+Default features:
+
+* `alloc`: Enable features that depend on allocation (primarily string formatting).
+* `std`: Enables functionality that depends on the standard library. This is a superset of `alloc`
+ and adds interoperation with standard library types and traits.
+* `clock`: Enables reading the local timezone (`Local`). This is a superset of `now`.
+* `now`: Enables reading the system time (`now`).
+* `wasmbind`: Interface with the JS Date API for the `wasm32` target.
+
+Optional features:
+
+* `serde`: Enable serialization/deserialization via [serde].
+* `rkyv`: Deprecated, use the `rkyv-*` features.
+* `rkyv-16`: Enable serialization/deserialization via [rkyv], using 16-bit integers for integral `*size` types.
+* `rkyv-32`: Enable serialization/deserialization via [rkyv], using 32-bit integers for integral `*size` types.
+* `rkyv-64`: Enable serialization/deserialization via [rkyv], using 64-bit integers for integral `*size` types.
+* `rkyv-validation`: Enable rkyv validation support using `bytecheck`.
+* `arbitrary`: Construct arbitrary instances of a type with the Arbitrary crate.
+* `unstable-locales`: Enable localization. This adds various methods with a `_localized` suffix.
+ The implementation and API may change or even be removed in a patch release. Feedback welcome.
+* `oldtime`: This feature no longer has any effect; it used to offer compatibility with the `time` 0.1 crate.
+
+Note: The `rkyv{,-16,-32,-64}` features are mutually exclusive.
+
+[serde]: https://github.com/serde-rs/serde
+[rkyv]: https://github.com/rkyv/rkyv
+
+## Rust version requirements
+
+The Minimum Supported Rust Version (MSRV) is currently **Rust 1.61.0**.
+
+The MSRV is explicitly tested in CI. It may be bumped in minor releases, but this is not done
+lightly.
+
+## License
+
+This project is licensed under either of
+
+* [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0)
+* [MIT License](https://opensource.org/licenses/MIT)
+
+at your option.
diff --git b/rust-vendor/clang-sys/.cargo_vcs_info.json b/rust-vendor/clang-sys/.cargo_vcs_info.json
new file mode 100644
index 0000000..deb83a6
--- /dev/null
+++ b/rust-vendor/clang-sys/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "cf3874b2480b9ca12f367a54a4835dd2920847de"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/clang-sys/.github/workflows/ci.yml b/rust-vendor/clang-sys/.github/workflows/ci.yml
new file mode 100644
index 0000000..08c2cba
--- /dev/null
+++ b/rust-vendor/clang-sys/.github/workflows/ci.yml
@@ -0,0 +1,56 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ test:
+ name: Test
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [macos-latest, ubuntu-latest, windows-latest]
+ clang: [["14.0", "clang_14_0"]]
+ rust: ["1.60.0"]
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v4
+ # LLVM and Clang
+ - name: Install LLVM and Clang
+ uses: KyleMayes/install-llvm-action@v2.0.3
+ with:
+ version: ${{ matrix.clang[0] }}
+ directory: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}
+ # Rust
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: ${{ matrix.rust }}
+ # Test
+ - name: Cargo Test (Dynamic)
+ run: cargo test --verbose --features ${{ matrix.clang[1] }} -- --nocapture
+ - name: Cargo Test (Runtime)
+ run: cargo test --verbose --features "${{ matrix.clang[1] }} runtime" -- --nocapture
+ test-bindgen:
+ name: Test (bindgen)
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v4
+ # LLVM and Clang
+ - name: Install LLVM and Clang
+ uses: KyleMayes/install-llvm-action@v2.0.3
+ with:
+ version: 14
+ directory: ${{ runner.temp }}/llvm
+ # Rust
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ # Test
+ - name: Cargo Run (bindgen-test)
+ run: cargo run --manifest-path bindgen-test/Cargo.toml
diff --git b/rust-vendor/clang-sys/.github/workflows/ssh.yml b/rust-vendor/clang-sys/.github/workflows/ssh.yml
new file mode 100644
index 0000000..188fa3d
--- /dev/null
+++ b/rust-vendor/clang-sys/.github/workflows/ssh.yml
@@ -0,0 +1,40 @@
+name: SSH
+
+on:
+ workflow_dispatch:
+ inputs:
+ os:
+ description: "Operating System"
+ required: true
+ default: "ubuntu-latest"
+
+jobs:
+ ssh:
+ name: SSH
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [macos-latest, ubuntu-latest, windows-latest]
+ clang: [["13.0", "clang_13_0"]]
+ rust: ["1.60.0"]
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v2
+ if: github.event.inputs.os == matrix.os
+ # LLVM and Clang
+ - name: Install LLVM and Clang
+ uses: KyleMayes/install-llvm-action@v2.0.3
+ if: github.event.inputs.os == matrix.os
+ with:
+ version: ${{ matrix.clang[0] }}
+ directory: ${{ runner.temp }}/llvm-${{ matrix.clang[0] }}
+ # Rust
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ if: github.event.inputs.os == matrix.os
+ with:
+ toolchain: ${{ matrix.rust }}
+ # SSH
+ - name: Enable SSH
+ uses: mxschmitt/action-tmate@v3
+ if: github.event.inputs.os == matrix.os
diff --git b/rust-vendor/clang-sys/Cargo.toml.orig b/rust-vendor/clang-sys/Cargo.toml.orig
new file mode 100644
index 0000000..475e9d6
--- /dev/null
+++ b/rust-vendor/clang-sys/Cargo.toml.orig
@@ -0,0 +1,67 @@
+[package]
+
+edition = "2021"
+
+name = "clang-sys"
+authors = ["Kyle Mayes <kyle@mayeses.com>"]
+
+version = "1.8.1"
+
+readme = "README.md"
+license = "Apache-2.0"
+
+description = "Rust bindings for libclang."
+
+documentation = "https://docs.rs/clang-sys"
+repository = "https://github.com/KyleMayes/clang-sys"
+
+links = "clang"
+build = "build.rs"
+
+[features]
+
+clang_3_5 = []
+clang_3_6 = ["clang_3_5"]
+clang_3_7 = ["clang_3_6"]
+clang_3_8 = ["clang_3_7"]
+clang_3_9 = ["clang_3_8"]
+clang_4_0 = ["clang_3_9"]
+clang_5_0 = ["clang_4_0"]
+clang_6_0 = ["clang_5_0"]
+clang_7_0 = ["clang_6_0"]
+clang_8_0 = ["clang_7_0"]
+clang_9_0 = ["clang_8_0"]
+clang_10_0 = ["clang_9_0"]
+clang_11_0 = ["clang_10_0"]
+clang_12_0 = ["clang_11_0"]
+clang_13_0 = ["clang_12_0"]
+clang_14_0 = ["clang_13_0"]
+clang_15_0 = ["clang_14_0"]
+clang_16_0 = ["clang_15_0"]
+clang_17_0 = ["clang_16_0"]
+clang_18_0 = ["clang_17_0"]
+
+runtime = ["libloading"]
+static = []
+
+libcpp = []
+
+[dependencies]
+
+glob = "0.3"
+libc = { version = "0.2.39", default-features = false }
+libloading = { version = "0.8", optional = true }
+
+[build-dependencies]
+
+glob = "0.3"
+
+[dev-dependencies]
+
+glob = "0.3"
+lazy_static = "1"
+tempfile = ">=3.0.0, <3.7.0"
+
+[package.metadata.docs.rs]
+
+features = ["clang_18_0", "runtime"]
diff --git b/rust-vendor/clap/.cargo_vcs_info.json b/rust-vendor/clap/.cargo_vcs_info.json
new file mode 100644
index 0000000..e195260
--- /dev/null
+++ b/rust-vendor/clap/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "20aac9d46e0852292bd43d845b6d9cb69c598c9e"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/clap/Cargo.toml.orig b/rust-vendor/clap/Cargo.toml.orig
new file mode 100644
index 0000000..2d23b68
--- /dev/null
+++ b/rust-vendor/clap/Cargo.toml.orig
@@ -0,0 +1,538 @@
+[workspace]
+resolver = "2"
+members = [
+ "clap_bench",
+ "clap_builder",
+ "clap_derive",
+ "clap_lex",
+ "clap_complete",
+ "clap_complete_nushell",
+ "clap_mangen",
+]
+
+[workspace.package]
+repository = "https://github.com/clap-rs/clap"
+license = "MIT OR Apache-2.0"
+edition = "2021"
+rust-version = "1.74" # MSRV
+include = [
+ "build.rs",
+ "src/**/*",
+ "Cargo.toml",
+ "LICENSE*",
+ "README.md",
+ "examples/**/*"
+]
+
+[workspace.lints.rust]
+rust_2018_idioms = { level = "warn", priority = -1 }
+unnameable_types = "allow"
+unreachable_pub = "warn"
+unsafe_op_in_unsafe_fn = "warn"
+unused_lifetimes = "warn"
+unused_macro_rules = "warn"
+unused_qualifications = "warn"
+
+[workspace.lints.clippy]
+bool_assert_comparison = "allow"
+branches_sharing_code = "allow"
+checked_conversions = "warn"
+collapsible_else_if = "allow"
+create_dir = "warn"
+dbg_macro = "warn"
+debug_assert_with_mut_call = "warn"
+doc_markdown = "warn"
+empty_enums = "warn"
+enum_glob_use = "warn"
+expl_impl_clone_on_copy = "warn"
+explicit_deref_methods = "warn"
+explicit_into_iter_loop = "warn"
+fallible_impl_from = "warn"
+filter_map_next = "warn"
+flat_map_option = "warn"
+float_cmp_const = "warn"
+fn_params_excessive_bools = "warn"
+from_iter_instead_of_collect = "warn"
+if_same_then_else = "allow"
+implicit_clone = "warn"
+imprecise_flops = "warn"
+inconsistent_struct_constructor = "warn"
+inefficient_to_string = "warn"
+infinite_loop = "warn"
+invalid_upcast_comparisons = "warn"
+large_digit_groups = "warn"
+large_stack_arrays = "warn"
+large_types_passed_by_value = "warn"
+let_and_return = "allow" # sometimes good to name what you are returning
+linkedlist = "warn"
+lossy_float_literal = "warn"
+macro_use_imports = "warn"
+mem_forget = "warn"
+mutex_integer = "warn"
+needless_continue = "allow"
+needless_for_each = "warn"
+negative_feature_names = "warn"
+path_buf_push_overwrite = "warn"
+ptr_as_ptr = "warn"
+rc_mutex = "warn"
+redundant_feature_names = "warn"
+ref_option_ref = "warn"
+rest_pat_in_fully_bound_structs = "warn"
+result_large_err = "allow"
+same_functions_in_if_condition = "warn"
+self_named_module_files = "warn"
+semicolon_if_nothing_returned = "warn"
+# str_to_string = "warn"
+# string_add = "warn"
+string_add_assign = "warn"
+string_lit_as_bytes = "warn"
+todo = "warn"
+trait_duplication_in_bounds = "warn"
+uninlined_format_args = "warn"
+verbose_file_reads = "warn"
+# wildcard_imports = "warn"
+zero_sized_map_values = "warn"
+# Fix later:
+multiple_bound_locations = "allow"
+assigning_clones = "allow"
+blocks_in_conditions = "allow"
+
+[profile.dev]
+panic = "abort"
+
+[profile.release]
+panic = "abort"
+codegen-units = 1
+lto = true
+# debug = "line-tables-only" # requires Cargo 1.71
+
+[package]
+name = "clap"
+version = "4.5.60"
+description = "A simple to use, efficient, and full-featured Command Line Argument Parser"
+categories = ["command-line-interface"]
+keywords = [
+ "argument",
+ "cli",
+ "arg",
+ "parser",
+ "parse"
+]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+features = ["unstable-doc"]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[package.metadata.playground]
+features = ["unstable-doc"]
+
+[package.metadata.release]
+shared-version = true
+tag-name = "v{{version}}"
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/clap-rs/clap/compare/{{tag_name}}...HEAD", exactly=1},
+ {file="CITATION.cff", search="^date-released: ....-..-..", replace="date-released: {{date}}"},
+ {file="CITATION.cff", search="^version: .+\\..+\\..+", replace="version: {{version}}"},
+ {file="src/lib.rs", search="blob/v.+\\..+\\..+/CHANGELOG.md", replace="blob/v{{version}}/CHANGELOG.md", exactly=1},
+]
+
+[features]
+default = [
+ "std",
+ "color",
+ "help",
+ "usage",
+ "error-context",
+ "suggestions",
+]
+debug = ["clap_builder/debug", "clap_derive?/debug"] # Enables debug messages
+unstable-doc = ["clap_builder/unstable-doc", "derive"] # for docs.rs
+
+# Used in default
+std = ["clap_builder/std"] # support for no_std in a backwards-compatible way
+color = ["clap_builder/color"]
+help = ["clap_builder/help"]
+usage = ["clap_builder/usage"]
+error-context = ["clap_builder/error-context"]
+suggestions = ["clap_builder/suggestions"]
+
+# Optional
+deprecated = ["clap_builder/deprecated", "clap_derive?/deprecated"] # Guided experience to prepare for next breaking release (at different stages of development, this may become default)
+derive = ["dep:clap_derive"]
+cargo = ["clap_builder/cargo"] # Disable if you're not using Cargo, enables Cargo-env-var-dependent macros
+wrap_help = ["clap_builder/wrap_help"]
+env = ["clap_builder/env"] # Use environment variables during arg parsing
+unicode = ["clap_builder/unicode"] # Support for unicode characters in arguments and help messages
+string = ["clap_builder/string"] # Allow runtime generated strings
+
+# In-work features
+unstable-v5 = ["clap_builder/unstable-v5", "clap_derive?/unstable-v5", "deprecated"]
+unstable-ext = ["clap_builder/unstable-ext"]
+unstable-styles = ["clap_builder/unstable-styles"] # deprecated
+unstable-derive-ui-tests = []
+unstable-markdown = ["clap_derive/unstable-markdown"]
+
+[lib]
+bench = false
+
+[dependencies]
+clap_builder = { path = "./clap_builder", version = "=4.5.60", default-features = false }
+clap_derive = { path = "./clap_derive", version = "=4.5.55", optional = true }
+
+[dev-dependencies]
+trybuild = "1.0.91"
+rustversion = "1.0.15"
+# Cutting out `filesystem` feature
+trycmd = { version = "0.15.3", default-features = false, features = ["color-auto", "diff", "examples"] }
+jiff = "0.2.3"
+snapbox = { version = "0.6.16", features = ["term-svg"] }
+shlex = "1.3.0"
+automod = "1.0.14"
+clap-cargo = { version = "0.15.0", default-features = false }
+semver = "1.0.26"
+
+[[example]]
+name = "demo"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "cargo-example"
+required-features = ["cargo", "color"]
+doc-scrape-examples = true
+
+[[example]]
+name = "cargo-example-derive"
+required-features = ["derive", "color"]
+doc-scrape-examples = true
+
+[[example]]
+name = "escaped-positional"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "escaped-positional-derive"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "find"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "git-derive"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "typed-derive"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "busybox"
+path = "examples/multicall-busybox.rs"
+doc-scrape-examples = true
+
+[[example]]
+name = "hostname"
+path = "examples/multicall-hostname.rs"
+doc-scrape-examples = true
+
+[[example]]
+name = "repl"
+path = "examples/repl.rs"
+required-features = ["help"]
+doc-scrape-examples = true
+
+[[example]]
+name = "repl-derive"
+path = "examples/repl-derive.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "01_quick"
+path = "examples/tutorial_builder/01_quick.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "02_apps"
+path = "examples/tutorial_builder/02_apps.rs"
+doc-scrape-examples = true
+
+[[example]]
+name = "02_crate"
+path = "examples/tutorial_builder/02_crate.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "02_app_settings"
+path = "examples/tutorial_builder/02_app_settings.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_01_flag_bool"
+path = "examples/tutorial_builder/03_01_flag_bool.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_01_flag_count"
+path = "examples/tutorial_builder/03_01_flag_count.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_02_option"
+path = "examples/tutorial_builder/03_02_option.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_02_option_mult"
+path = "examples/tutorial_builder/03_02_option_mult.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_03_positional"
+path = "examples/tutorial_builder/03_03_positional.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_03_positional_mult"
+path = "examples/tutorial_builder/03_03_positional_mult.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_04_subcommands"
+path = "examples/tutorial_builder/03_04_subcommands.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_05_default_values"
+path = "examples/tutorial_builder/03_05_default_values.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_06_required"
+path = "examples/tutorial_builder/03_06_required.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_01_possible"
+path = "examples/tutorial_builder/04_01_possible.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_01_enum"
+path = "examples/tutorial_builder/04_01_enum.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_02_parse"
+path = "examples/tutorial_builder/04_02_parse.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_02_validate"
+path = "examples/tutorial_builder/04_02_validate.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_03_relations"
+path = "examples/tutorial_builder/04_03_relations.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_04_custom"
+path = "examples/tutorial_builder/04_04_custom.rs"
+required-features = ["cargo"]
+doc-scrape-examples = true
+
+[[example]]
+name = "05_01_assert"
+path = "examples/tutorial_builder/05_01_assert.rs"
+required-features = ["cargo"]
+test = true
+doc-scrape-examples = true
+
+[[example]]
+name = "01_quick_derive"
+path = "examples/tutorial_derive/01_quick.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "02_apps_derive"
+path = "examples/tutorial_derive/02_apps.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "02_crate_derive"
+path = "examples/tutorial_derive/02_crate.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "02_app_settings_derive"
+path = "examples/tutorial_derive/02_app_settings.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_01_flag_bool_derive"
+path = "examples/tutorial_derive/03_01_flag_bool.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_01_flag_count_derive"
+path = "examples/tutorial_derive/03_01_flag_count.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_02_option_derive"
+path = "examples/tutorial_derive/03_02_option.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_02_option_mult_derive"
+path = "examples/tutorial_derive/03_02_option_mult.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_03_positional_derive"
+path = "examples/tutorial_derive/03_03_positional.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_03_positional_mult_derive"
+path = "examples/tutorial_derive/03_03_positional_mult.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_04_subcommands_derive"
+path = "examples/tutorial_derive/03_04_subcommands.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_04_subcommands_alt_derive"
+path = "examples/tutorial_derive/03_04_subcommands_alt.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_05_default_values_derive"
+path = "examples/tutorial_derive/03_05_default_values.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "03_06_optional_derive"
+path = "examples/tutorial_derive/03_06_optional.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_01_enum_derive"
+path = "examples/tutorial_derive/04_01_enum.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_02_parse_derive"
+path = "examples/tutorial_derive/04_02_parse.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_02_validate_derive"
+path = "examples/tutorial_derive/04_02_validate.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_03_relations_derive"
+path = "examples/tutorial_derive/04_03_relations.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "04_04_custom_derive"
+path = "examples/tutorial_derive/04_04_custom.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "05_01_assert_derive"
+path = "examples/tutorial_derive/05_01_assert.rs"
+required-features = ["derive"]
+test = true
+doc-scrape-examples = true
+
+[[example]]
+name = "interop_augment_args"
+path = "examples/derive_ref/augment_args.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "interop_augment_subcommands"
+path = "examples/derive_ref/augment_subcommands.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "interop_hand_subcommand"
+path = "examples/derive_ref/hand_subcommand.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[[example]]
+name = "interop_flatten_hand_args"
+path = "examples/derive_ref/flatten_hand_args.rs"
+required-features = ["derive"]
+doc-scrape-examples = true
+
+[profile.test]
+opt-level = 1
+
+[profile.bench]
+lto = true
+codegen-units = 1
+
+[lints]
+workspace = true
diff --git b/rust-vendor/clap_builder/.cargo_vcs_info.json b/rust-vendor/clap_builder/.cargo_vcs_info.json
new file mode 100644
index 0000000..66512bc
--- /dev/null
+++ b/rust-vendor/clap_builder/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "20aac9d46e0852292bd43d845b6d9cb69c598c9e"
+ },
+ "path_in_vcs": "clap_builder"
+}
\ No newline at end of file
diff --git b/rust-vendor/clap_builder/Cargo.toml.orig b/rust-vendor/clap_builder/Cargo.toml.orig
new file mode 100644
index 0000000..eec8eb7
--- /dev/null
+++ b/rust-vendor/clap_builder/Cargo.toml.orig
@@ -0,0 +1,77 @@
+[package]
+name = "clap_builder"
+version = "4.5.60"
+description = "A simple to use, efficient, and full-featured Command Line Argument Parser"
+categories = ["command-line-interface"]
+keywords = [
+ "argument",
+ "cli",
+ "arg",
+ "parser",
+ "parse"
+]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+features = ["unstable-doc"]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[package.metadata.playground]
+features = ["unstable-doc"]
+
+[package.metadata.release]
+shared-version = true
+dependent-version = "upgrade"
+tag-name = "v{{version}}"
+
+[features]
+default = ["std", "color", "help", "usage", "error-context", "suggestions"]
+debug = ["dep:backtrace"] # Enables debug messages
+unstable-doc = ["cargo", "wrap_help", "env", "unicode", "string", "unstable-ext"] # for docs.rs
+
+# Used in default
+std = ["anstyle/std"] # support for no_std in a backwards-compatible way
+color = ["dep:anstream"]
+help = []
+usage = []
+error-context = []
+suggestions = ["dep:strsim", "error-context"]
+
+# Optional
+deprecated = [] # Guided experience to prepare for next breaking release (at different stages of development, this may become default)
+cargo = [] # Disable if you're not using Cargo, enables Cargo-env-var-dependent macros
+wrap_help = ["help", "dep:terminal_size"]
+env = [] # Use environment variables during arg parsing
+unicode = ["dep:unicode-width", "dep:unicase"] # Support for unicode characters in arguments and help messages
+string = [] # Allow runtime generated strings
+
+# In-work features
+unstable-v5 = ["deprecated"]
+unstable-ext = []
+unstable-styles = ["color"] # deprecated
+
+[lib]
+bench = false
+
+[dependencies]
+clap_lex = { path = "../clap_lex", version = "1.0.0" }
+unicase = { version = "2.6.0", optional = true }
+strsim = { version = "0.11.0", optional = true }
+anstream = { version = "0.6.7", optional = true }
+anstyle = "1.0.8"
+terminal_size = { version = "0.4.0", optional = true }
+backtrace = { version = "0.3.73", optional = true }
+unicode-width = { version = "0.2.0", optional = true }
+
+[dev-dependencies]
+static_assertions = "1.1.0"
+unic-emoji-char = "0.9.0"
+color-print = "0.3.6"
+snapbox = { version = "0.6.16" }
+
+[lints]
+workspace = true
diff --git b/rust-vendor/clap_complete/.cargo_vcs_info.json b/rust-vendor/clap_complete/.cargo_vcs_info.json
new file mode 100644
index 0000000..ccc99b3
--- /dev/null
+++ b/rust-vendor/clap_complete/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "05bac738ebc886143cceb80dd6905a41b42952bf"
+ },
+ "path_in_vcs": "clap_complete"
+}
\ No newline at end of file
diff --git b/rust-vendor/clap_complete/Cargo.toml.orig b/rust-vendor/clap_complete/Cargo.toml.orig
new file mode 100644
index 0000000..c325338
--- /dev/null
+++ b/rust-vendor/clap_complete/Cargo.toml.orig
@@ -0,0 +1,62 @@
+[package]
+name = "clap_complete"
+version = "4.5.66"
+description = "Generate shell completion scripts for your clap::Command"
+categories = ["command-line-interface"]
+keywords = [
+ "clap",
+ "cli",
+ "completion",
+ "bash",
+]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+features = ["unstable-doc"]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/clap-rs/clap/compare/{{tag_name}}...HEAD", exactly=1},
+ {file="README.md", search="github.com/clap-rs/clap/blob/[^/]+/", replace="github.com/clap-rs/clap/blob/{{tag_name}}/", exactly=4, prerelease = true},
+]
+
+[lib]
+bench = false
+
+[dependencies]
+clap = { path = "../", version = "4.5.20", default-features = false, features = ["std"] }
+clap_lex = { path = "../clap_lex", version = "1.0.0", optional = true }
+is_executable = { version = "1.0.1", optional = true }
+shlex = { version = "1.3.0", optional = true }
+completest = { version = "0.4.2", optional = true }
+completest-pty = { version = "0.5.5", optional = true }
+
+[dev-dependencies]
+snapbox = { version = "0.6.0", features = ["diff", "dir", "examples"] }
+# Cutting out `filesystem` feature
+trycmd = { version = "0.15.1", default-features = false, features = ["color-auto", "diff", "examples"] }
+clap = { path = "../", version = "4.5.20", default-features = false, features = ["std", "derive", "help"] }
+automod = "1.0.14"
+
+[[example]]
+name = "dynamic"
+required-features = ["unstable-dynamic"]
+
+[features]
+default = []
+unstable-doc = ["unstable-dynamic"] # for docs.rs
+unstable-dynamic = ["dep:clap_lex", "dep:shlex", "dep:is_executable", "clap/unstable-ext"]
+unstable-shell-tests = ["dep:completest", "dep:completest-pty"]
+debug = ["clap/debug"]
+
+[lints]
+workspace = true
diff --git b/rust-vendor/clap_lex/.cargo_vcs_info.json b/rust-vendor/clap_lex/.cargo_vcs_info.json
new file mode 100644
index 0000000..c60b74d
--- /dev/null
+++ b/rust-vendor/clap_lex/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d37483586ff582e07a3fc62b10fa98ce7d227b4f"
+ },
+ "path_in_vcs": "clap_lex"
+}
\ No newline at end of file
diff --git b/rust-vendor/clap_lex/Cargo.toml.orig b/rust-vendor/clap_lex/Cargo.toml.orig
new file mode 100644
index 0000000..a632f58
--- /dev/null
+++ b/rust-vendor/clap_lex/Cargo.toml.orig
@@ -0,0 +1,36 @@
+[package]
+name = "clap_lex"
+version = "1.0.0"
+description = "Minimal, flexible command line parser"
+categories = ["command-line-interface"]
+keywords = [
+ "argument",
+ "cli",
+ "arg",
+ "parser",
+ "parse"
+]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/clap-rs/clap/compare/{{tag_name}}...HEAD", exactly=1},
+ {file="README.md", search="github.com/clap-rs/clap/blob/[^/]+/", replace="github.com/clap-rs/clap/blob/{{tag_name}}/", exactly=4, prerelease = true},
+]
+
+[dev-dependencies]
+automod = "1.0.14"
+
+[lib]
+bench = false
+
+[lints]
+workspace = true
diff --git b/rust-vendor/clap_mangen/.cargo_vcs_info.json b/rust-vendor/clap_mangen/.cargo_vcs_info.json
new file mode 100644
index 0000000..77afed9
--- /dev/null
+++ b/rust-vendor/clap_mangen/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "df7bdfc4996ba2f4388e2c01a6ab4cbe26b2e4df"
+ },
+ "path_in_vcs": "clap_mangen"
+}
\ No newline at end of file
diff --git b/rust-vendor/clap_mangen/Cargo.toml.orig b/rust-vendor/clap_mangen/Cargo.toml.orig
new file mode 100644
index 0000000..b89f417
--- /dev/null
+++ b/rust-vendor/clap_mangen/Cargo.toml.orig
@@ -0,0 +1,49 @@
+[package]
+name = "clap_mangen"
+version = "0.2.31"
+description = "A manpage generator for clap"
+categories = ["command-line-interface"]
+keywords = [
+ "clap",
+ "cli",
+ "generate",
+ "manpage",
+]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/clap-rs/clap/compare/{{tag_name}}...HEAD", exactly=1},
+ {file="README.md", search="github.com/clap-rs/clap/blob/[^/]+/", replace="github.com/clap-rs/clap/blob/{{tag_name}}/", exactly=4, prerelease = true},
+]
+
+[lib]
+bench = false
+
+[dependencies]
+roff = "0.2.1"
+clap = { path = "../", version = "4.0.0", default-features = false, features = ["std", "env"] }
+
+[dev-dependencies]
+snapbox = { version = "0.6.0", features = ["diff"] }
+clap = { path = "../", version = "4.0.0", default-features = false, features = ["std", "help"] }
+automod = "1.0.14"
+
+[features]
+default = []
+debug = ["clap/debug"]
+
+[lints]
+workspace = true
diff --git b/rust-vendor/codspeed/.cargo_vcs_info.json b/rust-vendor/codspeed/.cargo_vcs_info.json
new file mode 100644
index 0000000..68696e3
--- /dev/null
+++ b/rust-vendor/codspeed/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a8754dda6b0ee316b995b135df1645a05a252089"
+ },
+ "path_in_vcs": "crates/codspeed"
+}
\ No newline at end of file
diff --git b/rust-vendor/codspeed/Cargo.toml.orig b/rust-vendor/codspeed/Cargo.toml.orig
new file mode 100644
index 0000000..e522bb0
--- /dev/null
+++ b/rust-vendor/codspeed/Cargo.toml.orig
@@ -0,0 +1,39 @@
+[package]
+name = "codspeed"
+version = "4.3.0"
+rust-version = "1.74" # MSRV
+edition = "2021"
+description = "Core instrumentation library for CodSpeed"
+authors = ["Arthur Pastel <arthur@codspeed.io>"]
+documentation = "https://docs.codspeed.io"
+readme = "README.md"
+repository = "https://github.com/CodSpeedHQ/codspeed-rust"
+homepage = "https://codspeed.io"
+license = "MIT OR Apache-2.0"
+categories = [
+ "development-tools",
+ "development-tools::profiling",
+ "development-tools::testing",
+]
+keywords = ["codspeed", "benchmark"]
+
+[dependencies]
+anyhow = { workspace = true }
+colored = "2.0.0"
+glob = "0.3.2"
+libc = "^0.2"
+nix = { version = "0.30.1", features = ["time"] }
+getrandom = "0.2"
+serde = { workspace = true }
+serde_json = { workspace = true }
+statrs = { version = "0.18.0", default-features = false }
+
+[[bench]]
+name = "native"
+harness = false
+
+[dev-dependencies]
+tempfile = { workspace = true }
+
+[build-dependencies]
+cc = "1.0"
diff --git b/rust-vendor/codspeed/instrument-hooks/.clang-format b/rust-vendor/codspeed/instrument-hooks/.clang-format
new file mode 100644
index 0000000..e7d00fe
--- /dev/null
+++ b/rust-vendor/codspeed/instrument-hooks/.clang-format
@@ -0,0 +1,5 @@
+---
+Language: Cpp
+BasedOnStyle: Google
+PointerAlignment: Left
+...
diff --git b/rust-vendor/codspeed/instrument-hooks/.github/workflows/ci.yml b/rust-vendor/codspeed/instrument-hooks/.github/workflows/ci.yml
new file mode 100644
index 0000000..2f4eacb
--- /dev/null
+++ b/rust-vendor/codspeed/instrument-hooks/.github/workflows/ci.yml
@@ -0,0 +1,282 @@
+name: CI
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ workflow_dispatch:
+
+env:
+ COMMON_CFLAGS: >-
+ -Wall
+ -Werror
+ -Wno-format
+ -Wno-format-security
+ -Wno-unused-but-set-variable
+ -Wno-unused-const-variable
+ -Wno-type-limits
+ -Wno-uninitialized
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: mlugg/setup-zig@v2
+ - uses: pre-commit/action@v3.0.1
+ with:
+ extra_args: --all-files
+
+ tests:
+ strategy:
+ matrix:
+ os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: mlugg/setup-zig@v2
+ - uses: extractions/setup-just@v3
+ - name: Run tests
+ run: zig build test --summary all
+
+ # Skip installing package docs to avoid wasting time when installing valgrind
+ # See: https://github.com/actions/runner-images/issues/10977#issuecomment-2810713336
+ - name: Skip installing package docs
+ if: runner.os == 'Linux'
+ run: |
+ sudo tee /etc/dpkg/dpkg.cfg.d/01_nodoc > /dev/null << 'EOF'
+ path-exclude /usr/share/doc/*
+ path-exclude /usr/share/man/*
+ path-exclude /usr/share/info/*
+ EOF
+
+ - name: Run valgrind tests
+ if: runner.os == 'Linux'
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y valgrind
+ just test-valgrind
+
+ build:
+ strategy:
+ matrix:
+ os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: mlugg/setup-zig@v2
+ - name: Build
+ run: zig build
+
+ test-build-cmake:
+ strategy:
+ matrix:
+ include:
+ - name: Linux GCC
+ os: ubuntu-latest
+ compiler: gcc
+
+ - name: Linux Clang
+ os: ubuntu-latest
+ compiler: clang
+
+ - name: macOS Clang
+ os: macos-latest
+ compiler: clang
+
+ - name: Windows MSVC
+ os: windows-latest
+ compiler: cl
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: mlugg/setup-zig@v2
+ - uses: extractions/setup-just@v3
+
+ - name: Cache build
+ uses: actions/cache@v4
+ with:
+ path: example/build
+ key: ${{ runner.os }}-build-${{ hashFiles('**/CMakeLists.txt') }}
+
+ - name: "Enable MSVC command prompt"
+ if: matrix.os == 'windows-latest'
+ uses: ilammy/msvc-dev-cmd@v1
+
+ - name: "Install cmake"
+ uses: lukka/get-cmake@latest
+
+ - name: "Build debug mode"
+ shell: bash
+ run: |
+ cd example
+ mkdir -p out
+ cd out
+ cmake .. -DCMAKE_C_COMPILER=${{ matrix.compiler }} -DCMAKE_BUILD_TYPE=Debug
+ cmake --build . --target example
+
+ - name: "Run example (Windows)"
+ if: runner.os == 'Windows'
+ shell: bash
+ run: |
+ cd example/out/Debug
+ ./example.exe
+
+ - name: "Run example (Unix)"
+ if: runner.os != 'Windows'
+ shell: bash
+ run: |
+ cd example/out
+ ./example
+
+ test-build-bazel:
+ strategy:
+ matrix:
+ include:
+ - name: Linux
+ os: ubuntu-latest
+ - name: macOS
+ os: macos-latest
+ - name: Windows
+ os: windows-latest
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Set up Bazel
+ uses: bazel-contrib/setup-bazel@0.14.0
+ with:
+ # Avoid downloading Bazel every time.
+ bazelisk-cache: true
+ # Store build cache per workflow.
+ disk-cache: ${{ github.workflow }}
+ # Share repository cache between workflows.
+ repository-cache: true
+
+ # Symlinks on windows are broken with bazel
+ - name: Fix symlink on Windows
+ if: runner.os == 'Windows'
+ shell: powershell
+ run: |
+ Get-ChildItem -Path example/instrument-hooks -Force | Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
+ Copy-Item -Path dist -Destination example/instrument-hooks/dist -Recurse
+ Copy-Item -Path includes -Destination example/instrument-hooks/includes -Recurse
+
+ - name: Build benchmarks
+ working-directory: example
+ run: |
+ bazel build //:example
+
+ - name: Run benchmarks
+ working-directory: example
+ run: |
+ bazel run //:example
+
+ test-gcc-versions:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ version: [15, 14, 13, 12, 11, 10, 9]
+ container:
+ image: gcc:${{ matrix.version }}
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Build example with GCC ${{ matrix.version }}
+ run: |
+ gcc -std=c11 -O3 example/main.c dist/core.c \
+ -I includes/ \
+ ${{ env.COMMON_CFLAGS }} \
+ -o test-example
+
+ - name: Run example
+ run: ./test-example
+
+ test-clang-versions:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ version: [19, 18, 17, 16, 15, 14, 13]
+ container:
+ image: silkeh/clang:${{ matrix.version }}
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Build example with Clang ${{ matrix.version }}
+ run: |
+ clang -std=c11 -O3 example/main.c dist/core.c \
+ -I includes/ \
+ ${{ env.COMMON_CFLAGS }} \
+ -o test-example
+
+ - name: Run example
+ run: ./test-example
+
+ cross-compile:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ target:
+ # Linux targets - x86/x64
+ - { arch: x86_64-linux-gnu, name: "Linux x86_64 (glibc)" }
+ - { arch: x86_64-linux-musl, name: "Linux x86_64 (musl)" }
+ - { arch: x86-linux-gnu, name: "Linux x86 (32-bit)" }
+
+ # Linux targets - ARM
+ - { arch: aarch64-linux-gnu, name: "Linux ARM64 (glibc)" }
+ - { arch: aarch64-linux-musl, name: "Linux ARM64 (musl)" }
+ - { arch: arm-linux-gnueabihf, name: "Linux ARM (hard-float)" }
+ - { arch: arm-linux-gnueabi, name: "Linux ARM (soft-float)" }
+
+ # Linux targets - RISC-V
+ - { arch: riscv64-linux-gnu, name: "Linux RISC-V 64 (glibc)" }
+ - { arch: riscv64-linux-musl, name: "Linux RISC-V 64 (musl)" }
+
+ # Linux targets - Other architectures
+ - { arch: powerpc64le-linux-gnu, name: "Linux PowerPC64 LE" }
+ - { arch: s390x-linux-gnu, name: "Linux s390x (IBM Z)" }
+ - { arch: mips64el-linux-gnuabi64, name: "Linux MIPS64 LE" }
+ - { arch: loongarch64-linux-gnu, name: "Linux LoongArch64" }
+
+ # macOS targets
+ - { arch: x86_64-macos, name: "macOS x86_64 (Intel)" }
+ - { arch: aarch64-macos, name: "macOS ARM64 (Apple Silicon)" }
+
+ # Windows targets
+ - { arch: x86_64-windows-gnu, name: "Windows x86_64" }
+ - { arch: x86-windows-gnu, name: "Windows x86 (32-bit)" }
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: mlugg/setup-zig@v2
+
+ - name: Compile the example
+ run: |
+ zig cc example/main.c dist/core.c \
+ -I includes/ \
+ -target ${{ matrix.target.arch }} \
+ ${{ env.COMMON_CFLAGS }} \
+ -Wno-constant-conversion \
+ -Wno-incompatible-pointer-types \
+ -Wno-unused-function \
+ -o example.out
+
+ check:
+ runs-on: ubuntu-latest
+ if: always()
+ needs:
+ - lint
+ - tests
+ - build
+ - test-build-cmake
+ - test-build-bazel
+ - test-gcc-versions
+ - test-clang-versions
+ - cross-compile
+ steps:
+ - uses: re-actors/alls-green@release/v1
+ with:
+ jobs: ${{ toJson( needs ) }}
diff --git b/rust-vendor/codspeed/instrument-hooks/.gitignore b/rust-vendor/codspeed/instrument-hooks/.gitignore
new file mode 100644
index 0000000..51d2d4b
--- /dev/null
+++ b/rust-vendor/codspeed/instrument-hooks/.gitignore
@@ -0,0 +1,9 @@
+.zig-cache
+zig-out
+target/
+./main
+
+**/build
+
+# Bazel output
+**/bazel-*
diff --git b/rust-vendor/codspeed/instrument-hooks/.pre-commit-config.yaml b/rust-vendor/codspeed/instrument-hooks/.pre-commit-config.yaml
new file mode 100644
index 0000000..dfb00d2
--- /dev/null
+++ b/rust-vendor/codspeed/instrument-hooks/.pre-commit-config.yaml
@@ -0,0 +1,21 @@
+exclude: ^(includes/(valgrind|callgrind|zig)\.h|dist/core\.c)
+repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v2.4.0
+ hooks:
+ - id: trailing-whitespace
+ - id: end-of-file-fixer
+ - id: check-added-large-files
+
+ - repo: https://github.com/batmac/pre-commit-zig
+ rev: v0.3.0
+ hooks:
+ - id: zig-fmt
+ - id: zig-build
+ - id: zig-build-test
+
+ - repo: https://github.com/cpp-linter/cpp-linter-hooks
+ rev: v0.6.1
+ hooks:
+ - id: clang-format
+ files: \.(c|h)$
diff --git b/rust-vendor/codspeed/instrument-hooks/example/.bazelversion b/rust-vendor/codspeed/instrument-hooks/example/.bazelversion
new file mode 100644
index 0000000..e8be684
--- /dev/null
+++ b/rust-vendor/codspeed/instrument-hooks/example/.bazelversion
@@ -0,0 +1 @@
+7.6.1
diff --git b/rust-vendor/codspeed-divan-compat/.cargo_vcs_info.json b/rust-vendor/codspeed-divan-compat/.cargo_vcs_info.json
new file mode 100644
index 0000000..0320473
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a8754dda6b0ee316b995b135df1645a05a252089"
+ },
+ "path_in_vcs": "crates/divan_compat"
+}
\ No newline at end of file
diff --git b/rust-vendor/codspeed-divan-compat/Cargo.toml.orig b/rust-vendor/codspeed-divan-compat/Cargo.toml.orig
new file mode 100644
index 0000000..0c66f08
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat/Cargo.toml.orig
@@ -0,0 +1,45 @@
+[package]
+name = "codspeed-divan-compat"
+version = "4.3.0"
+rust-version = "1.80"
+edition = "2021"
+description = "Divan compatibility layer for CodSpeed"
+authors = ["Arthur Pastel <arthur@codspeed.io>"]
+documentation = "https://codspeed.io/docs/reference/codspeed-rust/divan"
+readme = "README.md"
+repository = "https://github.com/CodSpeedHQ/codspeed-rust"
+homepage = "https://codspeed.io"
+license = "MIT OR Apache-2.0"
+categories = [
+ "development-tools",
+ "development-tools::profiling",
+ "development-tools::testing",
+]
+keywords = ["codspeed", "benchmark", "divan"]
+
+[dependencies]
+codspeed = { path = "../codspeed", version = "=4.3.0" }
+divan = { package = "codspeed-divan-compat-walltime", path = "./divan_fork", version = "=4.3.0" }
+codspeed-divan-compat-macros = { version = "=4.3.0", path = './macros' }
+regex = "1.11.3"
+clap = { version = "4", default-features = false, features = ["std", "env"] }
+
+[[bench]]
+name = "basic_example"
+harness = false
+
+[[bench]]
+name = "sleep_benches"
+harness = false
+
+[[bench]]
+name = "drop_example"
+harness = false
+
+[[bench]]
+name = "thread_example"
+harness = false
+
+[[bench]]
+name = "fib_example"
+harness = false
diff --git b/rust-vendor/codspeed-divan-compat-macros/.cargo_vcs_info.json b/rust-vendor/codspeed-divan-compat-macros/.cargo_vcs_info.json
new file mode 100644
index 0000000..6415de4
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat-macros/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a8754dda6b0ee316b995b135df1645a05a252089"
+ },
+ "path_in_vcs": "crates/divan_compat/macros"
+}
\ No newline at end of file
diff --git b/rust-vendor/codspeed-divan-compat-macros/Cargo.toml.orig b/rust-vendor/codspeed-divan-compat-macros/Cargo.toml.orig
new file mode 100644
index 0000000..7052095
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat-macros/Cargo.toml.orig
@@ -0,0 +1,37 @@
+[package]
+name = "codspeed-divan-compat-macros"
+version = "4.3.0"
+rust-version = "1.80"
+edition = "2021"
+description = "Macros for the Divan compatibility layer for CodSpeed"
+authors = ["Arthur Pastel <arthur@codspeed.io>"]
+documentation = "https://docs.codspeed.io"
+readme = "../README.md"
+repository = "https://github.com/CodSpeedHQ/codspeed-rust"
+homepage = "https://codspeed.io"
+license = "MIT OR Apache-2.0"
+categories = [
+ "development-tools",
+ "development-tools::profiling",
+ "development-tools::testing",
+]
+keywords = ["codspeed", "benchmark", "divan"]
+
+[lib]
+proc-macro = true
+
+[dependencies]
+divan-macros = { version = "=0.1.17" }
+itertools = { workspace = true }
+proc-macro-crate = "3.2.0"
+proc-macro2 = "1"
+quote = { version = "1", default-features = false }
+# Versions prior to *.18 fail to parse empty attribute metadata.
+syn = { version = "^2.0.18", default-features = false, features = [
+ "full",
+ "clone-impls",
+ "parsing",
+ "printing",
+ "proc-macro",
+ "extra-traits",
+] }
diff --git b/rust-vendor/codspeed-divan-compat-walltime/.cargo_vcs_info.json b/rust-vendor/codspeed-divan-compat-walltime/.cargo_vcs_info.json
new file mode 100644
index 0000000..6b5ce4e
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat-walltime/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a8754dda6b0ee316b995b135df1645a05a252089"
+ },
+ "path_in_vcs": "crates/divan_compat/divan_fork"
+}
\ No newline at end of file
diff --git b/rust-vendor/codspeed-divan-compat-walltime/.github/FUNDING.yml b/rust-vendor/codspeed-divan-compat-walltime/.github/FUNDING.yml
new file mode 100644
index 0000000..662ce5d
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat-walltime/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+github: ['nvzqz']
+custom: ['https://paypal.me/nvzqz']
diff --git b/rust-vendor/codspeed-divan-compat-walltime/.github/workflows/ci.yml b/rust-vendor/codspeed-divan-compat-walltime/.github/workflows/ci.yml
new file mode 100644
index 0000000..5fecd89
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat-walltime/.github/workflows/ci.yml
@@ -0,0 +1,191 @@
+on: [push, pull_request]
+
+name: CI
+
+env:
+ CARGO_HOME: ${{ github.workspace }}/.cargo
+ CARGO_TERM_COLOR: always
+ RUSTFLAGS: -D warnings -A unused-imports
+ RUSTDOCFLAGS: -D warnings
+ RUST_BACKTRACE: full
+
+jobs:
+ # Check formatting.
+ rustfmt:
+ name: Rustfmt
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: rustup update stable --no-self-update
+ - run: rustc -Vv
+ - run: cargo fmt --all -- --check
+
+ # Build documentation.
+ rustdoc:
+ name: Rustdoc
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v3.3.2
+ with:
+ path: |
+ ${{ env.CARGO_HOME }}
+ target
+ key: rustdoc-${{ runner.os }}
+ - run: rustup update stable --no-self-update
+ - run: rustc -Vv
+ - run: cargo rustdoc --all-features -- --document-private-items
+
+ # Run linter.
+ clippy:
+ name: Clippy
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v3.3.2
+ with:
+ path: |
+ ${{ env.CARGO_HOME }}
+ target
+ key: clippy-${{ runner.os }}
+ - run: rustup update stable --no-self-update
+ - run: rustc -Vv
+ - run: cargo clippy --all --all-targets --all-features
+
+ # Run tests in `src/` and `tests/`.
+ unit-test:
+ name: Unit Test
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ rust:
+ - stable
+ - nightly
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v3.3.2
+ with:
+ path: |
+ ${{ env.CARGO_HOME }}
+ target
+ key: unit-test-${{ runner.os }}-${{ matrix.rust }}
+ - run: rustup default ${{ matrix.rust }}
+ - run: rustup update ${{ matrix.rust }} --no-self-update
+ - run: rustc -Vv
+ - run: cargo test -p divan -p divan-macros
+
+ # Run tests in `src/` and `tests/` using Miri.
+ unit-test-miri:
+ name: Unit Test (Miri)
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v3.3.2
+ with:
+ path: |
+ ${{ env.CARGO_HOME }}
+ target
+ key: miri-${{ runner.os }}
+ - run: rustup default nightly
+ - run: rustup update nightly --no-self-update
+ - run: rustup component add miri
+ - run: rustc -Vv
+ - run: cargo miri test -p divan -p divan-macros
+
+ # Run `examples/` directory as tests.
+ examples-test:
+ name: Examples Test
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ rust:
+ - stable
+ - nightly
+ env:
+ DIVAN_ITEMS_COUNT: 0
+ DIVAN_BYTES_COUNT: 1
+ DIVAN_CHARS_COUNT: 2
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v3.3.2
+ with:
+ path: |
+ ${{ env.CARGO_HOME }}
+ target
+ key: examples-test-${{ runner.os }}-${{ matrix.rust }}
+ - run: rustup default ${{ matrix.rust }}
+ - run: rustup update ${{ matrix.rust }} --no-self-update
+ - run: rustc -Vv
+ - run: cargo test -p examples --all-features --benches
+
+ # Run `examples/` directory as benchmarks.
+ examples-bench:
+ name: Examples Bench
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ${{ matrix.os }}
+ env:
+ # Run each benchmark within 2 seconds.
+ DIVAN_MAX_TIME: 2
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v3.3.2
+ with:
+ path: |
+ ${{ env.CARGO_HOME }}
+ target
+ key: examples-bench-${{ runner.os }}
+ - run: rustup update stable --no-self-update
+ - run: rustc -Vv
+ - run: cargo bench -p examples --all-features
+
+ # Run `internal_benches/` directory as benchmarks.
+ internals-bench:
+ name: Internals Bench
+ if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository
+ runs-on: ${{ matrix.os }}
+ env:
+ # Run each benchmark within 2 seconds.
+ DIVAN_MAX_TIME: 2
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v3.3.2
+ with:
+ path: |
+ ${{ env.CARGO_HOME }}
+ target
+ key: internals-bench-${{ runner.os }}
+ - run: rustup update stable --no-self-update
+ - run: rustc -Vv
+ - run: cargo bench -p internal_benches --all-features
diff --git b/rust-vendor/codspeed-divan-compat-walltime/Cargo.toml.orig b/rust-vendor/codspeed-divan-compat-walltime/Cargo.toml.orig
new file mode 100644
index 0000000..41a612d
--- /dev/null
+++ b/rust-vendor/codspeed-divan-compat-walltime/Cargo.toml.orig
@@ -0,0 +1,51 @@
+[package]
+name = "codspeed-divan-compat-walltime"
+version = "4.3.0"
+rust-version = "1.80.0"
+edition = "2021"
+authors = ["Nikolai Vazquez"]
+license = "MIT OR Apache-2.0"
+description = "A temporary compatibility layer for CodSpeed to use Divan's walltime entrypoint."
+repository = "https://github.com/nvzqz/divan"
+homepage = "https://github.com/nvzqz/divan"
+documentation = "https://docs.rs/divan"
+categories = ["development-tools::profiling"]
+keywords = ["benchmark", "criterion", "instrument", "measure", "performance"]
+readme = "README.md"
+
+[dependencies]
+divan-macros = { version = "=0.1.17" }
+
+cfg-if = "1"
+clap = { version = "4", default-features = false, features = ["std", "env"] }
+condtype = "1.3"
+regex = { package = "regex-lite", version = "0.1", default-features = false, features = [
+ "std",
+ "string",
+] }
+codspeed = { path = "../../codspeed", version = "=4.3.0" }
+
+[target.'cfg(unix)'.dependencies]
+libc = "0.2.148"
+
+
+[dev-dependencies]
+mimalloc = "0.1"
+
+[features]
+default = ["wrap_help"]
+help = ["clap/help"]
+wrap_help = ["help", "clap/wrap_help"]
+
+# Opt out of faster static thread-local access and instead always dynamically
+# allocate thread-local storage.
+#
+# On x86_64 macOS we use TLS key 11 (reserved for Windows ABI compatability):
+# https://github.com/apple-oss-distributions/libpthread/blob/libpthread-519/private/pthread/tsd_private.h#L99
+dyn_thread_local = []
+
+# Benchmark internals. Not meant for public use.
+internal_benches = []
+
+[lib]
+doctest = false # Disable doctests for the fork
diff --git b/rust-vendor/colorchoice/.cargo_vcs_info.json b/rust-vendor/colorchoice/.cargo_vcs_info.json
new file mode 100644
index 0000000..04e61cd
--- /dev/null
+++ b/rust-vendor/colorchoice/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "886539c95318db5de9db49b6d66d19413bd308cc"
+ },
+ "path_in_vcs": "crates/colorchoice"
+}
\ No newline at end of file
diff --git b/rust-vendor/colorchoice/Cargo.toml.orig b/rust-vendor/colorchoice/Cargo.toml.orig
new file mode 100644
index 0000000..82fa1f4
--- /dev/null
+++ b/rust-vendor/colorchoice/Cargo.toml.orig
@@ -0,0 +1,27 @@
+[package]
+name = "colorchoice"
+version = "1.0.4"
+description = "Global override of color control"
+categories = ["command-line-interface"]
+keywords = ["cli", "color", "no-std", "terminal", "ansi"]
+repository.workspace = true
+license.workspace = true
+edition.workspace = true
+rust-version.workspace = true
+include.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/rust-cli/anstyle/compare/{{tag_name}}...HEAD", exactly=1},
+]
+
+[lints]
+workspace = true
diff --git b/rust-vendor/colored/.cargo_vcs_info.json b/rust-vendor/colored/.cargo_vcs_info.json
new file mode 100644
index 0000000..2645afe
--- /dev/null
+++ b/rust-vendor/colored/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ef1484c713e1340d842cc7b76f79dc976afe891f"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/colored/.devcontainer/devcontainer.json b/rust-vendor/colored/.devcontainer/devcontainer.json
new file mode 100644
index 0000000..bd0e607
--- /dev/null
+++ b/rust-vendor/colored/.devcontainer/devcontainer.json
@@ -0,0 +1,11 @@
+{
+ "name": "Rust",
+ "image": "mcr.microsoft.com/vscode/devcontainers/rust:1",
+ "customizations": {
+ "vscode": {
+ "extensions": ["rust-lang.rust-analyzer"]
+ }
+ },
+ "postCreateCommand": "cargo install cargo-insta",
+ "remoteUser": "vscode"
+}
diff --git b/rust-vendor/colored/.git-blame-ignore-revs b/rust-vendor/colored/.git-blame-ignore-revs
new file mode 100644
index 0000000..0e60f18
--- /dev/null
+++ b/rust-vendor/colored/.git-blame-ignore-revs
@@ -0,0 +1,2 @@
+# pedantic clippy fixes
+58a06a44c7640a83a65df6c5afae5ed8f0014fd0
diff --git b/rust-vendor/colored/.github/dependabot.yml b/rust-vendor/colored/.github/dependabot.yml
new file mode 100644
index 0000000..e43cdcd
--- /dev/null
+++ b/rust-vendor/colored/.github/dependabot.yml
@@ -0,0 +1,7 @@
+# https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
+version: 2
+updates:
+ - package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: monthly
diff --git b/rust-vendor/colored/.github/workflows/publish.yml b/rust-vendor/colored/.github/workflows/publish.yml
new file mode 100644
index 0000000..0555741
--- /dev/null
+++ b/rust-vendor/colored/.github/workflows/publish.yml
@@ -0,0 +1,41 @@
+name: Publish
+on:
+ push:
+ branches: [master]
+permissions:
+ contents: write
+
+jobs:
+ publish:
+ name: Publish
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Get local crate version
+ id: local-version
+ run: cargo metadata --no-deps --format-version=1 | jq -r '.packages[0].version' | echo "VERSION=$(cat)" >> "${GITHUB_OUTPUT}"
+ - name: Get crates.io crate version
+ id: remote-version
+ run: curl 'https://index.crates.io/co/lo/colored' | jq -r '.vers' | tail -n 1 | echo "VERSION=$(cat)" >> "${GITHUB_OUTPUT}"
+ - name: Check if crates.io version is older than local version
+ id: needs-update
+ run: |
+ if ! printf '%s\n' "${{ steps.local-version.outputs.VERSION }}" "${{ steps.remote-version.outputs.VERSION }}" | sort -V | tail -n 1 | grep -Fw "${{ steps.remote-version.outputs.VERSION }}"; then
+ echo "UPDATE=true" >> "${GITHUB_OUTPUT}"
+ else
+ echo "UPDATE=false" >> "${GITHUB_OUTPUT}"
+ fi
+ - name: Install parse-changelog
+ if: steps.needs-update.outputs.UPDATE == 'true'
+ uses: taiki-e/install-action@parse-changelog
+ - name: Create GitHub release
+ if: steps.needs-update.outputs.UPDATE == 'true'
+ run: gh release create "v${{ steps.local-version.outputs.VERSION }}" -t "v${{ steps.local-version.outputs.VERSION }}" -n "$(parse-changelog CHANGELOG.md "${{ steps.local-version.outputs.VERSION }}")"
+ env:
+ GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
+ - name: Publish to crates.io
+ if: steps.needs-update.outputs.UPDATE == 'true'
+ run: cargo publish
+ env:
+ CARGO_REGISTRY_TOKEN: "${{ secrets.CARGO_REGISTRY_TOKEN }}"
diff --git b/rust-vendor/colored/.github/workflows/test.yml b/rust-vendor/colored/.github/workflows/test.yml
new file mode 100644
index 0000000..1e1da8f
--- /dev/null
+++ b/rust-vendor/colored/.github/workflows/test.yml
@@ -0,0 +1,62 @@
+name: Run tests
+on: pull_request
+env:
+ CLICOLOR_FORCE: 1
+ COLORTERM: "truecolor"
+
+jobs:
+ cargo-fmt:
+ name: cargo-fmt@stable
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Install Rust stable
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: rustfmt
+ - name: Run formatting checks
+ run: cargo fmt --check
+ cargo-clippy:
+ name: "${{ matrix.os }}:cargo-clippy@stable"
+ runs-on: "${{ matrix.os }}-latest"
+ strategy:
+ matrix:
+ os: ["ubuntu", "windows", "macos"]
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Install Rust stable
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: clippy
+ - name: Run clippy checks
+ run: cargo clippy --all-features -- -D warnings
+ cargo-test:
+ name: "${{ matrix.os }}:cargo-test@${{ matrix.version }}"
+ runs-on: "${{ matrix.os }}-latest"
+ strategy:
+ matrix:
+ os: ["ubuntu", "windows", "macos"]
+ version: ["stable", "beta", "1.70"]
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Install Rust ${{ matrix.version }}
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.version }}
+ - name: Run tests
+ run: cargo test
+ check-semver:
+ name: Check semver compatibility
+ if: github.base_ref == 'master'
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v3
+ - name: Check semver
+ uses: obi1kenobi/cargo-semver-checks-action@v2
+
diff --git b/rust-vendor/colored/Cargo.toml.orig b/rust-vendor/colored/Cargo.toml.orig
new file mode 100644
index 0000000..9d6c6c1
--- /dev/null
+++ b/rust-vendor/colored/Cargo.toml.orig
@@ -0,0 +1,31 @@
+[package]
+name = "colored"
+description = "The most simple way to add colors in your terminal"
+version = "2.2.0"
+edition = "2021"
+authors = ["Thomas Wickham <mackwic@gmail.com>"]
+license = "MPL-2.0"
+homepage = "https://github.com/mackwic/colored"
+repository = "https://github.com/mackwic/colored"
+readme = "README.md"
+keywords = ["color", "string", "term", "ansi_term", "term-painter"]
+rust-version = "1.70"
+
+[features]
+# with this feature, no color will ever be written
+no-color = []
+
+[dependencies]
+lazy_static = "1"
+
+[target.'cfg(windows)'.dependencies.windows-sys]
+version = ">=0.48,<=0.59"
+features = [
+ "Win32_Foundation",
+ "Win32_System_Console",
+]
+
+[dev-dependencies]
+ansi_term = "0.12"
+insta = "1"
+rspec = "1"
diff --git b/rust-vendor/compare/.travis.yml b/rust-vendor/compare/.travis.yml
new file mode 100644
index 0000000..f62145c
--- /dev/null
+++ b/rust-vendor/compare/.travis.yml
@@ -0,0 +1,13 @@
+language: rust
+sudo: false
+script:
+ - cargo build
+ - cargo test
+ - cargo doc --no-deps
+after_success: |
+ [ $TRAVIS_BRANCH = master ] &&
+ [ $TRAVIS_PULL_REQUEST = false ] &&
+ bash deploy-docs.sh
+notifications:
+ webhooks: http://huon.me:54857/travis
+
diff --git b/rust-vendor/condtype/.cargo_vcs_info.json b/rust-vendor/condtype/.cargo_vcs_info.json
new file mode 100644
index 0000000..24d8b41
--- /dev/null
+++ b/rust-vendor/condtype/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a4850f4f8e9eef4fc93f9b9050bc0c85fac1182a"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/condtype/Cargo.toml.orig b/rust-vendor/condtype/Cargo.toml.orig
new file mode 100644
index 0000000..343b732
--- /dev/null
+++ b/rust-vendor/condtype/Cargo.toml.orig
@@ -0,0 +1,20 @@
+[package]
+name = "condtype"
+version = "1.3.0"
+edition = "2021"
+authors = ["Nikolai Vazquez"]
+license = "MIT OR Apache-2.0"
+description = "Choose types at compile-time via boolean constants."
+repository = "https://github.com/nvzqz/condtype"
+homepage = "https://github.com/nvzqz/condtype"
+documentation = "https://docs.rs/condtype"
+categories = ["no-std", "rust-patterns"]
+keywords = ["boolean", "condition", "const", "depend", "type"]
+readme = "README.md"
+
+# Const generics ordered before type generics.
+rust-version = "1.59.0"
+
+[dev-dependencies]
+libc = "0.2.141"
+cfg-if = "1"
diff --git b/rust-vendor/console/.cargo_vcs_info.json b/rust-vendor/console/.cargo_vcs_info.json
new file mode 100644
index 0000000..7574f3b
--- /dev/null
+++ b/rust-vendor/console/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "0bf645d987e74d9b9717e03fdae523fe43a07673"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/console/Cargo.toml.orig b/rust-vendor/console/Cargo.toml.orig
new file mode 100644
index 0000000..6649f61
--- /dev/null
+++ b/rust-vendor/console/Cargo.toml.orig
@@ -0,0 +1,73 @@
+[package]
+name = "console"
+description = "A terminal and console abstraction for Rust"
+version = "0.16.2"
+keywords = ["cli", "terminal", "colors", "console", "ansi"]
+license = "MIT"
+edition = "2021"
+homepage = "https://github.com/console-rs/console"
+repository = "https://github.com/console-rs/console"
+documentation = "https://docs.rs/console"
+readme = "README.md"
+rust-version = "1.71"
+include = ["CHANGELOG.md", "Cargo.toml", "LICENSE", "README.md", "src/**/*.rs"]
+
+[features]
+default = ["unicode-width", "ansi-parsing", "std"]
+std = ["dep:libc", "dep:once_cell", "alloc"]
+alloc = []
+windows-console-colors = ["ansi-parsing"]
+ansi-parsing = []
+
+[dependencies]
+libc = { version = "0.2.99", optional = true }
+once_cell = { version = "1.8", optional = true }
+unicode-width = { version = "0.2", optional = true }
+
+[target.'cfg(windows)'.dependencies]
+encode_unicode = "1"
+
+[target.'cfg(windows)'.dependencies.windows-sys]
+version = "0.61"
+features = [
+ "Win32_Foundation",
+ "Win32_System_Console",
+ "Win32_Storage_FileSystem",
+ "Win32_UI_Input_KeyboardAndMouse",
+]
+
+[dev-dependencies]
+# Pick a setup for proptest that works with wasi
+proptest = { version = "1.0.0", default-features = false, features = [
+ "std",
+ "bit-set",
+ "break-dead-code",
+] }
+regex = "1.4.2"
+
+[[example]]
+name = "colors"
+required-features = ["std"]
+
+[[example]]
+name = "colors256"
+required-features = ["std"]
+
+[[example]]
+name = "cursor_at"
+required-features = ["std"]
+
+[[example]]
+name = "keyboard"
+required-features = ["std"]
+
+[[example]]
+name = "term"
+required-features = ["std"]
+
+## These are currently disabled. If you want to play around with the benchmarks
+## uncommit this.
+#criterion = "0.3.5"
+#[[bench]]
+#name = "ansi_parser"
+#harness = false
diff --git b/rust-vendor/const-random/.cargo_vcs_info.json b/rust-vendor/const-random/.cargo_vcs_info.json
new file mode 100644
index 0000000..c2bfb6a
--- /dev/null
+++ b/rust-vendor/const-random/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "4f71cb510e77eb6a26f8c7296c17811d0416fd41"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/const-random/.github/workflows/rust.yml b/rust-vendor/const-random/.github/workflows/rust.yml
new file mode 100644
index 0000000..651f16f
--- /dev/null
+++ b/rust-vendor/const-random/.github/workflows/rust.yml
@@ -0,0 +1,29 @@
+name: Rust
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ - name: Build
+ run: cargo build --verbose
+ - name: Run tests
+ run: cargo test --verbose
+ - name: Run tests (deterministic based on span)
+ env:
+ CONST_RANDOM_SEED: testSeed
+ run: cargo test --verbose
diff --git b/rust-vendor/const-random/Cargo.toml.orig b/rust-vendor/const-random/Cargo.toml.orig
new file mode 100644
index 0000000..eea4eea
--- /dev/null
+++ b/rust-vendor/const-random/Cargo.toml.orig
@@ -0,0 +1,14 @@
+[package]
+name = "const-random"
+version = "0.1.18"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/tkaitchuck/constrandom"
+documentation = "https://docs.rs/const-random"
+authors = ["Tom Kaitchuck <Tom.Kaitchuck@gmail.com>"]
+keywords = ["rust", "constants", "macro"]
+description = "Provides compile time random number generation."
+readme = "README.md"
+edition = "2018"
+
+[dependencies]
+const-random-macro = { path = "macro", version = "0.1.16"}
diff --git b/rust-vendor/const-random-macro/.cargo_vcs_info.json b/rust-vendor/const-random-macro/.cargo_vcs_info.json
new file mode 100644
index 0000000..3efdcca
--- /dev/null
+++ b/rust-vendor/const-random-macro/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "58c94b75e2be66c35213e573ba72e59af846e1ce"
+ },
+ "path_in_vcs": "macro"
+}
\ No newline at end of file
diff --git b/rust-vendor/const-random-macro/Cargo.toml.orig b/rust-vendor/const-random-macro/Cargo.toml.orig
new file mode 100644
index 0000000..b96979f
--- /dev/null
+++ b/rust-vendor/const-random-macro/Cargo.toml.orig
@@ -0,0 +1,18 @@
+[package]
+name = "const-random-macro"
+version = "0.1.16"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/tkaitchuck/constrandom"
+documentation = "https://docs.rs/const-random"
+authors = ["Tom Kaitchuck <Tom.Kaitchuck@gmail.com>"]
+keywords = ["rust", "constants", "macro"]
+description = "Provides the procedural macro used by const-random"
+edition = "2018"
+
+[lib]
+proc-macro = true
+
+[dependencies]
+getrandom = "0.2.0"
+tiny-keccak = { version = "2.0.2", features = ["shake"] }
+once_cell = { version = "1.15", default-features = false, features = ["race", "alloc"] }
diff --git b/rust-vendor/constant_time_eq/.cargo_vcs_info.json b/rust-vendor/constant_time_eq/.cargo_vcs_info.json
new file mode 100644
index 0000000..1156532
--- /dev/null
+++ b/rust-vendor/constant_time_eq/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "86f38ed9ad4d0500c5472bb8cb2ddc4fe5ac7143"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/constant_time_eq/.github/workflows/ci.yml b/rust-vendor/constant_time_eq/.github/workflows/ci.yml
new file mode 100644
index 0000000..afd7dd5
--- /dev/null
+++ b/rust-vendor/constant_time_eq/.github/workflows/ci.yml
@@ -0,0 +1,161 @@
+name: tests
+
+on: [push, pull_request]
+permissions:
+ contents: read
+
+jobs:
+ tests:
+ name: Run tests
+ strategy:
+ matrix:
+ toolchain: [1.85.0, stable, beta, nightly]
+ os: [ubuntu-latest, macos-latest, windows-latest, ubuntu-24.04-arm]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v4
+ with:
+ path: |
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ target/
+ key: ${{ matrix.os }}-cargo-${{ matrix.toolchain }}-${{ hashFiles('**/Cargo.lock','**/Cargo.toml') }}
+ - run: rustup toolchain install ${{ matrix.toolchain }} --profile=minimal --no-self-update
+ - run: rustup default ${{ matrix.toolchain }}
+ - run: rustup override set ${{ matrix.toolchain }}
+ - run: rustc --verbose --version
+ - run: cargo --verbose --version
+ - run: cargo build --verbose
+ - run: cargo build --verbose --no-default-features
+ - run: cargo build --verbose --release
+ - run: cargo build --verbose --release --no-default-features
+ - run: cargo test --verbose
+ - run: cargo test --verbose --no-default-features
+ - run: cargo test --verbose --release
+ - run: cargo test --verbose --release --no-default-features
+ - name: Cross-compile x86_64-unknown-linux-gnu
+ env:
+ TARGET: x86_64-unknown-linux-gnu
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile i686-unknown-linux-gnu
+ env:
+ TARGET: i686-unknown-linux-gnu
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile aarch64-unknown-linux-gnu
+ env:
+ TARGET: aarch64-unknown-linux-gnu
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile armv7-unknown-linux-gnueabihf
+ env:
+ TARGET: armv7-unknown-linux-gnueabihf
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile aarch64-apple-darwin
+ env:
+ TARGET: aarch64-apple-darwin
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile riscv64gc-unknown-linux-gnu
+ env:
+ TARGET: riscv64gc-unknown-linux-gnu
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile riscv32imafc-unknown-none-elf
+ env:
+ TARGET: riscv32imafc-unknown-none-elf
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile loongarch64-unknown-linux-gnu
+ env:
+ TARGET: loongarch64-unknown-linux-gnu
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile s390x-unknown-linux-gnu
+ env:
+ TARGET: s390x-unknown-linux-gnu
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile wasm32-unknown-unknown
+ env:
+ TARGET: wasm32-unknown-unknown
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Cross-compile wasm32-wasip1
+ env:
+ TARGET: wasm32-wasip1
+ run: |
+ rustup target add ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }}
+ cargo build --verbose --target ${{ env.TARGET }} --no-default-features
+ cargo build --verbose --release --target ${{ env.TARGET }}
+ cargo build --verbose --release --target ${{ env.TARGET }} --no-default-features
+ - name: Count instructions
+ if: ${{ runner.os == 'Linux' }}
+ run: |
+ cargo test --verbose --release --features count_instructions_test
+ cargo test --verbose --release --no-default-features --features count_instructions_test
+
+ miri:
+ name: Run tests under Miri
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions/cache@v4
+ with:
+ path: |
+ ~/.cargo/registry/index/
+ ~/.cargo/registry/cache/
+ ~/.cargo/git/db/
+ target/
+ key: ubuntu-latest-cargo-nightly-${{ hashFiles('**/Cargo.lock','**/Cargo.toml') }}-miri
+ - run: rustup toolchain install nightly --profile=minimal --no-self-update
+ - run: rustup default nightly
+ - run: rustup override set nightly
+ - run: rustup component add miri
+ - run: rustc --verbose --version
+ - run: cargo --verbose --version
+ - run: cargo miri test --verbose
+ - run: cargo miri test --verbose --no-default-features
diff --git b/rust-vendor/constant_time_eq/Cargo.toml.orig b/rust-vendor/constant_time_eq/Cargo.toml.orig
new file mode 100644
index 0000000..35d1404
--- /dev/null
+++ b/rust-vendor/constant_time_eq/Cargo.toml.orig
@@ -0,0 +1,38 @@
+[package]
+name = "constant_time_eq"
+version = "0.4.2"
+edition = "2024"
+authors = ["Cesar Eduardo Barros <cesarb@cesarb.eti.br>"]
+description = "Compares two equal-sized byte strings in constant time."
+documentation = "https://docs.rs/constant_time_eq"
+repository = "https://github.com/cesarb/constant_time_eq"
+readme = "README"
+keywords = ["constant_time"]
+categories = ["cryptography", "no-std"]
+license = "CC0-1.0 OR MIT-0 OR Apache-2.0"
+rust-version = "1.85.0"
+
+[dev-dependencies]
+criterion = { version = "0.5.1", features = ["cargo_bench_support", "html_reports"] }
+count_instructions = "0.2.0"
+
+[features]
+default = ["std"]
+
+# Necessary to detect at runtime whether DIT is available on aarch64.
+std = []
+
+# Enables tests which depend on the count_instructions crate.
+count_instructions_test = []
+
+[[bench]]
+name = "bench"
+harness = false
+
+[[bench]]
+name = "bench_generic"
+harness = false
+
+[[bench]]
+name = "bench_classic"
+harness = false
diff --git b/rust-vendor/core_maths/.cargo_vcs_info.json b/rust-vendor/core_maths/.cargo_vcs_info.json
new file mode 100644
index 0000000..1ac3260
--- /dev/null
+++ b/rust-vendor/core_maths/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d8ea96acac3893ad9a7e16cd7526936fbfc51021"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/core_maths/Cargo.toml.orig b/rust-vendor/core_maths/Cargo.toml.orig
new file mode 100644
index 0000000..2b52a49
--- /dev/null
+++ b/rust-vendor/core_maths/Cargo.toml.orig
@@ -0,0 +1,11 @@
+[package]
+name = "core_maths"
+version = "0.1.1"
+description = "Extension trait for full float functionality in `#[no_std]` backed by `libm`."
+authors = ["Robert Bastian <me@robertbastian.dev"]
+repository = "https://github.com/robertbastian/core_maths"
+categories = ["no-std", "mathematics", "api-bindings"]
+license = "MIT"
+
+[dependencies]
+libm = "0.2"
diff --git b/rust-vendor/cpufeatures/.cargo_vcs_info.json b/rust-vendor/cpufeatures/.cargo_vcs_info.json
new file mode 100644
index 0000000..ac21e03
--- /dev/null
+++ b/rust-vendor/cpufeatures/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "9d92d5e95ab4c07c5d8bfd024bf2a17e96d20feb"
+ },
+ "path_in_vcs": "cpufeatures"
+}
\ No newline at end of file
diff --git b/rust-vendor/cpufeatures/Cargo.toml.orig b/rust-vendor/cpufeatures/Cargo.toml.orig
new file mode 100644
index 0000000..307faea
--- /dev/null
+++ b/rust-vendor/cpufeatures/Cargo.toml.orig
@@ -0,0 +1,27 @@
+[package]
+name = "cpufeatures"
+version = "0.2.17"
+description = """
+Lightweight runtime CPU feature detection for aarch64, loongarch64, and x86/x86_64 targets,
+with no_std support and support for mobile targets including Android and iOS
+"""
+authors = ["RustCrypto Developers"]
+license = "MIT OR Apache-2.0"
+documentation = "https://docs.rs/cpufeatures"
+repository = "https://github.com/RustCrypto/utils"
+keywords = ["cpuid", "target-feature"]
+categories = ["hardware-support", "no-std"]
+edition = "2018"
+readme = "README.md"
+
+[target.'cfg(all(target_arch = "aarch64", target_vendor = "apple"))'.dependencies]
+libc = { version = "0.2.155", default-features = false }
+
+[target.'cfg(all(target_arch = "aarch64", target_os = "linux"))'.dependencies]
+libc = { version = "0.2.155", default-features = false }
+
+[target.'cfg(all(target_arch = "loongarch64", target_os = "linux"))'.dependencies]
+libc = { version = "0.2.155", default-features = false }
+
+[target.aarch64-linux-android.dependencies]
+libc = { version = "0.2.155", default-features = false }
diff --git b/rust-vendor/crc/.cargo_vcs_info.json b/rust-vendor/crc/.cargo_vcs_info.json
new file mode 100644
index 0000000..715ad11
--- /dev/null
+++ b/rust-vendor/crc/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "77da9d4e77b55274b47aebb680c78131124dded3"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/crc/.github/workflows/ci.yaml b/rust-vendor/crc/.github/workflows/ci.yaml
new file mode 100644
index 0000000..a6889f4
--- /dev/null
+++ b/rust-vendor/crc/.github/workflows/ci.yaml
@@ -0,0 +1,49 @@
+name: ci
+
+on:
+ pull_request: {}
+ push:
+ branches:
+ - master
+ schedule:
+ - cron: '0 0 * * 0'
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: rustfmt, clippy
+ - run: cargo clippy -- -D warnings
+ - run: cargo fmt --all -- --check
+ build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - 1.65.0
+ - stable
+ - beta
+ steps:
+ - uses: actions/checkout@v3
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - run: cargo check
+ - run: cargo build
+ test:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ - beta
+ steps:
+ - uses: actions/checkout@v3
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - run: cargo test
diff --git b/rust-vendor/crc/Cargo.toml.orig b/rust-vendor/crc/Cargo.toml.orig
new file mode 100644
index 0000000..7964d90
--- /dev/null
+++ b/rust-vendor/crc/Cargo.toml.orig
@@ -0,0 +1,22 @@
+[package]
+name = "crc"
+version = "3.3.0"
+authors = ["Rui Hu <code@mrhooray.com>", "Akhil Velagapudi <4@4khil.com>"]
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+repository = "https://github.com/mrhooray/crc-rs.git"
+documentation = "https://docs.rs/crc"
+description = "Rust implementation of CRC with support of various standards"
+keywords = ["crc", "crc16", "crc32", "crc64", "hash"]
+categories = ["algorithms", "no-std"]
+edition = "2021"
+rust-version = "1.65"
+
+[dependencies]
+crc-catalog = "2.4.0"
+
+[dev-dependencies]
+
+[[bench]]
+name = "bench"
+harness = true
diff --git b/rust-vendor/crc-catalog/.cargo_vcs_info.json b/rust-vendor/crc-catalog/.cargo_vcs_info.json
new file mode 100644
index 0000000..9eecc3e
--- /dev/null
+++ b/rust-vendor/crc-catalog/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "b500ea693c552f8d946e290722a7b3ee8b9a7ee2"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/crc-catalog/.github/workflows/rust.yaml b/rust-vendor/crc-catalog/.github/workflows/rust.yaml
new file mode 100644
index 0000000..452d888
--- /dev/null
+++ b/rust-vendor/crc-catalog/.github/workflows/rust.yaml
@@ -0,0 +1,51 @@
+name: rust
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ components: rustfmt, clippy
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: clippy
+ args: -- -D warnings
+ - uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --all -- --check
+ test:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - 1.46.0
+ - stable
+ - beta
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: ${{ matrix.rust }}
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: check
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
diff --git b/rust-vendor/crc-catalog/Cargo.toml.orig b/rust-vendor/crc-catalog/Cargo.toml.orig
new file mode 100644
index 0000000..f0083ab
--- /dev/null
+++ b/rust-vendor/crc-catalog/Cargo.toml.orig
@@ -0,0 +1,16 @@
+[package]
+name = "crc-catalog"
+version = "2.4.0"
+authors = ["Akhil Velagapudi <akhilvelagapudi@gmail.com>"]
+edition = "2018"
+description = "Catalog of CRC algorithms (generated from http://reveng.sourceforge.net/crc-catalogue) expressed as simple Rust structs."
+repository = "https://github.com/akhilles/crc-catalog.git"
+readme = "README.md"
+keywords = ["crc"]
+categories = ["no-std", "network-programming"]
+license = "MIT OR Apache-2.0"
+
+exclude = ["generate_catalog.sh"]
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
diff --git b/rust-vendor/crc-fast/.cargo_vcs_info.json b/rust-vendor/crc-fast/.cargo_vcs_info.json
new file mode 100644
index 0000000..f9831ec
--- /dev/null
+++ b/rust-vendor/crc-fast/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "2d96340aade5d1b152f961328e9c4d97d80ea83c"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.github/PULL_REQUEST_TEMPLATE.md b/rust-vendor/crc-fast/.github/PULL_REQUEST_TEMPLATE.md
new file mode 100644
index 0000000..9fce4a3
--- /dev/null
+++ b/rust-vendor/crc-fast/.github/PULL_REQUEST_TEMPLATE.md
@@ -0,0 +1,28 @@
+## The Problem
+
+[ What are you trying to solve? Why are you trying to solve it? ]
+
+## The Solution
+
+[ How are you fixing the problem? High-level explanation. ]
+
+### Changes
+
+[ A more detailed explanation of the solution to guide reviewers. Point out tricky or magic areas. ]
+
+### Planned version bump
+
+- Which: [ `MAJOR`, `MINOR`, `PATCH` ]
+- Why: [ non-breaking bug fix, doc change, test coverage, formatting, debugging, profiling, security fix, internal change, experimental change, non-breaking new functionality, breaking change, etc ]
+
+### Links
+
+* [ Any important other PRs, Issues, PRs, etc? ]
+
+## Notes
+
+[ @mentions for anyone who should be alerted to this PR ]
+
+[ **Please assign reviewers if you want someone specific to review this** ]
+
+[ **Please do not forget to add labels specific to this PR** ]
diff --git b/rust-vendor/crc-fast/.github/workflows/release.yml b/rust-vendor/crc-fast/.github/workflows/release.yml
new file mode 100644
index 0000000..cb5e860
--- /dev/null
+++ b/rust-vendor/crc-fast/.github/workflows/release.yml
@@ -0,0 +1,706 @@
+name: Release
+
+on:
+ workflow_run:
+ workflows: [Tests]
+ types:
+ - completed
+ workflow_dispatch:
+
+permissions:
+ contents: write
+
+jobs:
+ check-trigger:
+ name: Check if triggered by tag
+ runs-on: ubuntu-latest
+ if: github.event.workflow_run.conclusion == 'success'
+ outputs:
+ is_tag: ${{ steps.check.outputs.is_tag }}
+ tag_name: ${{ steps.check.outputs.tag_name }}
+ steps:
+ - name: Check if workflow was triggered by a version tag
+ id: check
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ echo "Workflow run event: ${{ github.event.workflow_run.event }}"
+ echo "Head branch: ${{ github.event.workflow_run.head_branch }}"
+ echo "Head SHA: ${{ github.event.workflow_run.head_sha }}"
+
+ # Get tags for this commit
+ TAGS=$(gh api repos/${{ github.repository }}/git/refs/tags --jq '.[] | select(.object.sha == "${{ github.event.workflow_run.head_sha }}") | .ref' | sed 's|refs/tags/||')
+
+ if [ -z "$TAGS" ]; then
+ echo "No tags found for this commit"
+ echo "is_tag=false" >> $GITHUB_OUTPUT
+ else
+ # Check if any tag matches version pattern
+ VERSION_TAG=$(echo "$TAGS" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' | head -n 1)
+ if [ -n "$VERSION_TAG" ]; then
+ echo "Found version tag: $VERSION_TAG"
+ echo "is_tag=true" >> $GITHUB_OUTPUT
+ echo "tag_name=$VERSION_TAG" >> $GITHUB_OUTPUT
+ else
+ echo "Tags found but none match version pattern"
+ echo "is_tag=false" >> $GITHUB_OUTPUT
+ fi
+ fi
+
+ validate:
+ name: Validate
+ needs: check-trigger
+ if: needs.check-trigger.outputs.is_tag == 'true'
+ runs-on: ubuntu-latest
+ timeout-minutes: 60
+ outputs:
+ tag_name: ${{ needs.check-trigger.outputs.tag_name }}
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ with:
+ ref: ${{ github.event.workflow_run.head_sha }}
+
+ - name: Setup Rust toolchain
+ uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # pinned commit for 1.15.2
+ with:
+ toolchain: stable
+ components: rustfmt, clippy
+
+ - name: Check code formatting
+ run: cargo fmt --check
+
+ - name: Run clippy
+ run: cargo clippy -- -D warnings
+
+ - name: Run tests
+ run: cargo test
+
+ build:
+ name: Build ${{ matrix.platform }}-${{ matrix.arch }}
+ needs: validate
+ runs-on: ${{ matrix.os }}
+ env:
+ TAG_NAME: ${{ needs.validate.outputs.tag_name }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ - target: x86_64-unknown-linux-gnu
+ os: ubuntu-22.04
+ platform: linux
+ arch: x86_64
+ ext: tar.gz
+
+ - target: i686-unknown-linux-gnu
+ os: ubuntu-22.04
+ platform: linux
+ arch: x86
+ ext: tar.gz
+
+ - target: aarch64-unknown-linux-gnu
+ os: ubuntu-22.04-arm
+ platform: linux
+ arch: aarch64
+ ext: tar.gz
+
+ - target: aarch64-apple-darwin
+ os: macos-14
+ platform: macos
+ arch: aarch64
+ ext: tar.gz
+
+ - target: x86_64-pc-windows-msvc
+ os: windows-2022
+ platform: windows
+ arch: x86_64
+ ext: zip
+
+ - target: i686-pc-windows-msvc
+ os: windows-2022
+ platform: windows
+ arch: x86
+ ext: zip
+
+ - target: aarch64-pc-windows-msvc
+ os: windows-11-arm
+ platform: windows
+ arch: aarch64
+ ext: zip
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+
+ - name: Setup Rust toolchain
+ uses: actions-rust-lang/setup-rust-toolchain@1780873c7b576612439a134613cc4cc74ce5538c # pinned commit for 1.15.2
+ with:
+ toolchain: stable
+
+ - name: Install cross
+ if: matrix.target == 'i686-unknown-linux-gnu'
+ run: cargo install cross --git https://github.com/cross-rs/cross
+
+ - name: Build release binaries (native)
+ if: matrix.target != 'i686-unknown-linux-gnu'
+ run: cargo build --all-features --release --target ${{ matrix.target }}
+
+ - name: Build release binaries (cross)
+ if: matrix.target == 'i686-unknown-linux-gnu'
+ run: cross build --all-features --release --target ${{ matrix.target }}
+
+ - name: Verify library files (Unix)
+ if: runner.os != 'Windows'
+ shell: bash
+ run: |
+ echo "Verifying library files..."
+ if [ "${{ matrix.platform }}" = "linux" ]; then
+ test -f target/${{ matrix.target }}/release/libcrc_fast.so || { echo "Missing libcrc_fast.so"; exit 1; }
+ test -f target/${{ matrix.target }}/release/libcrc_fast.a || { echo "Missing libcrc_fast.a"; exit 1; }
+ echo "✓ Found libcrc_fast.so and libcrc_fast.a"
+ elif [ "${{ matrix.platform }}" = "macos" ]; then
+ test -f target/${{ matrix.target }}/release/libcrc_fast.dylib || { echo "Missing libcrc_fast.dylib"; exit 1; }
+ test -f target/${{ matrix.target }}/release/libcrc_fast.a || { echo "Missing libcrc_fast.a"; exit 1; }
+ echo "✓ Found libcrc_fast.dylib and libcrc_fast.a"
+ fi
+
+ - name: Verify library files (Windows)
+ if: runner.os == 'Windows'
+ shell: pwsh
+ run: |
+ Write-Host "Verifying library files..."
+ if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.dll")) {
+ Write-Error "Missing crc_fast.dll"
+ exit 1
+ }
+ if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.dll.lib")) {
+ Write-Error "Missing crc_fast.dll.lib"
+ exit 1
+ }
+ if (-not (Test-Path "target/${{ matrix.target }}/release/crc_fast.lib")) {
+ Write-Error "Missing crc_fast.lib"
+ exit 1
+ }
+ Write-Host "✓ Found crc_fast.dll, crc_fast.dll.lib, and crc_fast.lib"
+
+ - name: Verify CLI binaries (Unix)
+ if: runner.os != 'Windows'
+ shell: bash
+ run: |
+ echo "Verifying CLI binaries..."
+ test -f target/${{ matrix.target }}/release/checksum || { echo "Missing checksum"; exit 1; }
+ test -f target/${{ matrix.target }}/release/arch-check || { echo "Missing arch-check"; exit 1; }
+ test -f target/${{ matrix.target }}/release/get-custom-params || { echo "Missing get-custom-params"; exit 1; }
+ echo "✓ Found checksum, arch-check, and get-custom-params"
+
+ - name: Verify CLI binaries (Windows)
+ if: runner.os == 'Windows'
+ shell: pwsh
+ run: |
+ Write-Host "Verifying CLI binaries..."
+ if (-not (Test-Path "target/${{ matrix.target }}/release/checksum.exe")) {
+ Write-Error "Missing checksum.exe"
+ exit 1
+ }
+ if (-not (Test-Path "target/${{ matrix.target }}/release/arch-check.exe")) {
+ Write-Error "Missing arch-check.exe"
+ exit 1
+ }
+ if (-not (Test-Path "target/${{ matrix.target }}/release/get-custom-params.exe")) {
+ Write-Error "Missing get-custom-params.exe"
+ exit 1
+ }
+ Write-Host "✓ Found checksum.exe, arch-check.exe, and get-custom-params.exe"
+
+ - name: Stage Linux package
+ if: matrix.platform == 'linux'
+ shell: bash
+ run: |
+ PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
+ echo "Creating package directory structure for $PKG_NAME..."
+
+ mkdir -p "$PKG_NAME/lib"
+ mkdir -p "$PKG_NAME/include"
+ mkdir -p "$PKG_NAME/bin"
+
+ echo "Copying library files..."
+ cp target/${{ matrix.target }}/release/libcrc_fast.so "$PKG_NAME/lib/"
+ cp target/${{ matrix.target }}/release/libcrc_fast.a "$PKG_NAME/lib/"
+
+ echo "Copying header file..."
+ cp libcrc_fast.h "$PKG_NAME/include/"
+
+ echo "Copying CLI binaries..."
+ cp target/${{ matrix.target }}/release/checksum "$PKG_NAME/bin/"
+ cp target/${{ matrix.target }}/release/arch-check "$PKG_NAME/bin/"
+ cp target/${{ matrix.target }}/release/get-custom-params "$PKG_NAME/bin/"
+
+ echo "Setting executable permissions on binaries..."
+ chmod +x "$PKG_NAME/bin/checksum"
+ chmod +x "$PKG_NAME/bin/arch-check"
+ chmod +x "$PKG_NAME/bin/get-custom-params"
+
+ echo "Creating VERSION file..."
+ echo "$TAG_NAME" > "$PKG_NAME/VERSION"
+
+ echo "Creating README.txt..."
+ cat > "$PKG_NAME/README.txt" <<EOF
+ crc-fast Binary Distribution
+ Version: $TAG_NAME
+ Platform: Linux ${{ matrix.arch }}
+
+ CONTENTS
+ ========
+ This package contains:
+ - Dynamic library (libcrc_fast.so) and static library (libcrc_fast.a)
+ - C/C++ header file (libcrc_fast.h)
+ - Command-line utilities (checksum, arch-check, get-custom-params)
+
+ INSTALLATION
+ ============
+ 1. Extract this archive to your desired location
+ 2. Add the lib/ directory to your library path:
+ export LD_LIBRARY_PATH=/path/to/crc-fast/lib:$LD_LIBRARY_PATH
+ 3. Add the bin/ directory to your PATH:
+ export PATH=/path/to/crc-fast/bin:$PATH
+
+ For system-wide installation (requires root):
+ sudo cp lib/* /usr/local/lib/
+ sudo cp include/* /usr/local/include/
+ sudo cp bin/* /usr/local/bin/
+ sudo ldconfig
+
+ LINKING
+ =======
+ Dynamic linking:
+ gcc your_program.c -lcrc_fast -L/path/to/crc-fast/lib -I/path/to/crc-fast/include
+
+ Static linking:
+ gcc your_program.c /path/to/crc-fast/lib/libcrc_fast.a -I/path/to/crc-fast/include
+
+ USAGE
+ =====
+ Command-line tools:
+ checksum --help # Calculate CRC checksums
+ arch-check # Display CPU architecture features
+ get-custom-params --help # Generate CRC parameters
+
+ DOCUMENTATION
+ =============
+ Full documentation: https://github.com/awesomized/crc-fast-rust
+
+ LICENSE
+ =======
+ This software is dual-licensed under MIT OR Apache-2.0.
+ See LICENSE-MIT and LICENSE-Apache files for details.
+ EOF
+
+ echo "Copying license files..."
+ cp LICENSE-MIT "$PKG_NAME/"
+ cp LICENSE-Apache "$PKG_NAME/"
+
+ echo "✓ Linux package staged successfully"
+ ls -lR "$PKG_NAME"
+
+ - name: Create tar.gz package (Linux)
+ if: matrix.platform == 'linux'
+ shell: bash
+ run: |
+ PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
+ ARCHIVE_NAME="${PKG_NAME}.tar.gz"
+
+ echo "Creating compressed archive: $ARCHIVE_NAME"
+ tar -czf "$ARCHIVE_NAME" "$PKG_NAME"
+
+ echo "Verifying archive was created..."
+ test -f "$ARCHIVE_NAME" || { echo "Failed to create $ARCHIVE_NAME"; exit 1; }
+
+ echo "Archive details:"
+ ls -lh "$ARCHIVE_NAME"
+
+ echo "✓ tar.gz package created successfully"
+
+ - name: Generate SHA256 checksum (Linux)
+ if: matrix.platform == 'linux'
+ shell: bash
+ run: |
+ ARCHIVE_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}.tar.gz"
+ CHECKSUM_FILE="${ARCHIVE_NAME}.sha256"
+
+ echo "Generating SHA256 checksum for $ARCHIVE_NAME..."
+ sha256sum "$ARCHIVE_NAME" > "$CHECKSUM_FILE"
+
+ echo "Verifying checksum file was created..."
+ test -f "$CHECKSUM_FILE" || { echo "Failed to create $CHECKSUM_FILE"; exit 1; }
+
+ echo "Checksum file contents:"
+ cat "$CHECKSUM_FILE"
+
+ echo "✓ SHA256 checksum generated successfully"
+
+ - name: Stage macOS package
+ if: matrix.platform == 'macos'
+ shell: bash
+ run: |
+ PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
+ echo "Creating package directory structure for $PKG_NAME..."
+
+ mkdir -p "$PKG_NAME/lib"
+ mkdir -p "$PKG_NAME/include"
+ mkdir -p "$PKG_NAME/bin"
+
+ echo "Copying library files..."
+ cp target/${{ matrix.target }}/release/libcrc_fast.dylib "$PKG_NAME/lib/"
+ cp target/${{ matrix.target }}/release/libcrc_fast.a "$PKG_NAME/lib/"
+
+ echo "Copying header file..."
+ cp libcrc_fast.h "$PKG_NAME/include/"
+
+ echo "Copying CLI binaries..."
+ cp target/${{ matrix.target }}/release/checksum "$PKG_NAME/bin/"
+ cp target/${{ matrix.target }}/release/arch-check "$PKG_NAME/bin/"
+ cp target/${{ matrix.target }}/release/get-custom-params "$PKG_NAME/bin/"
+
+ echo "Setting executable permissions on binaries..."
+ chmod +x "$PKG_NAME/bin/checksum"
+ chmod +x "$PKG_NAME/bin/arch-check"
+ chmod +x "$PKG_NAME/bin/get-custom-params"
+
+ echo "Creating VERSION file..."
+ echo "$TAG_NAME" > "$PKG_NAME/VERSION"
+
+ echo "Creating README.txt..."
+ cat > "$PKG_NAME/README.txt" <<EOF
+ crc-fast Binary Distribution
+ Version: $TAG_NAME
+ Platform: macOS ${{ matrix.arch }}
+
+ CONTENTS
+ ========
+ This package contains:
+ - Dynamic library (libcrc_fast.dylib) and static library (libcrc_fast.a)
+ - C/C++ header file (libcrc_fast.h)
+ - Command-line utilities (checksum, arch-check, get-custom-params)
+
+ INSTALLATION
+ ============
+ 1. Extract this archive to your desired location
+ 2. Add the lib/ directory to your library path:
+ export DYLD_LIBRARY_PATH=/path/to/crc-fast/lib:$DYLD_LIBRARY_PATH
+ 3. Add the bin/ directory to your PATH:
+ export PATH=/path/to/crc-fast/bin:$PATH
+
+ For system-wide installation:
+ sudo cp lib/* /usr/local/lib/
+ sudo cp include/* /usr/local/include/
+ sudo cp bin/* /usr/local/bin/
+
+ LINKING
+ =======
+ Dynamic linking:
+ clang your_program.c -lcrc_fast -L/path/to/crc-fast/lib -I/path/to/crc-fast/include
+
+ Static linking:
+ clang your_program.c /path/to/crc-fast/lib/libcrc_fast.a -I/path/to/crc-fast/include
+
+ USAGE
+ =====
+ Command-line tools:
+ checksum --help # Calculate CRC checksums
+ arch-check # Display CPU architecture features
+ get-custom-params --help # Generate CRC parameters
+
+ DOCUMENTATION
+ =============
+ Full documentation: https://github.com/awesomized/crc-fast-rust
+
+ LICENSE
+ =======
+ This software is dual-licensed under MIT OR Apache-2.0.
+ See LICENSE-MIT and LICENSE-Apache files for details.
+ EOF
+
+ echo "Copying license files..."
+ cp LICENSE-MIT "$PKG_NAME/"
+ cp LICENSE-Apache "$PKG_NAME/"
+
+ echo "✓ macOS package staged successfully"
+ ls -lR "$PKG_NAME"
+
+ - name: Create tar.gz package (macOS)
+ if: matrix.platform == 'macos'
+ shell: bash
+ run: |
+ PKG_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
+ ARCHIVE_NAME="${PKG_NAME}.tar.gz"
+
+ echo "Creating compressed archive: $ARCHIVE_NAME"
+ tar -czf "$ARCHIVE_NAME" "$PKG_NAME"
+
+ echo "Verifying archive was created..."
+ test -f "$ARCHIVE_NAME" || { echo "Failed to create $ARCHIVE_NAME"; exit 1; }
+
+ echo "Archive details:"
+ ls -lh "$ARCHIVE_NAME"
+
+ echo "✓ tar.gz package created successfully"
+
+ - name: Generate SHA256 checksum (macOS)
+ if: matrix.platform == 'macos'
+ shell: bash
+ run: |
+ ARCHIVE_NAME="crc-fast-$TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}.tar.gz"
+ CHECKSUM_FILE="${ARCHIVE_NAME}.sha256"
+
+ echo "Generating SHA256 checksum for $ARCHIVE_NAME..."
+ shasum -a 256 "$ARCHIVE_NAME" > "$CHECKSUM_FILE"
+
+ echo "Verifying checksum file was created..."
+ test -f "$CHECKSUM_FILE" || { echo "Failed to create $CHECKSUM_FILE"; exit 1; }
+
+ echo "Checksum file contents:"
+ cat "$CHECKSUM_FILE"
+
+ echo "✓ SHA256 checksum generated successfully"
+
+ - name: Stage Windows package
+ if: matrix.platform == 'windows'
+ shell: pwsh
+ run: |
+ $PKG_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
+ Write-Host "Creating package directory structure for $PKG_NAME..."
+
+ New-Item -ItemType Directory -Path "$PKG_NAME/bin" -Force | Out-Null
+ New-Item -ItemType Directory -Path "$PKG_NAME/lib" -Force | Out-Null
+ New-Item -ItemType Directory -Path "$PKG_NAME/include" -Force | Out-Null
+
+ Write-Host "Copying library files..."
+ Copy-Item "target/${{ matrix.target }}/release/crc_fast.dll" "$PKG_NAME/bin/"
+ Copy-Item "target/${{ matrix.target }}/release/crc_fast.dll.lib" "$PKG_NAME/lib/"
+ Copy-Item "target/${{ matrix.target }}/release/crc_fast.lib" "$PKG_NAME/lib/"
+
+ Write-Host "Copying header file..."
+ Copy-Item "libcrc_fast.h" "$PKG_NAME/include/"
+
+ Write-Host "Copying CLI binaries..."
+ Copy-Item "target/${{ matrix.target }}/release/checksum.exe" "$PKG_NAME/bin/"
+ Copy-Item "target/${{ matrix.target }}/release/arch-check.exe" "$PKG_NAME/bin/"
+ Copy-Item "target/${{ matrix.target }}/release/get-custom-params.exe" "$PKG_NAME/bin/"
+
+ Write-Host "Creating VERSION file..."
+ "$env:TAG_NAME" | Out-File -FilePath "$PKG_NAME/VERSION" -Encoding utf8 -NoNewline
+
+ Write-Host "Creating README.txt..."
+ @"
+ crc-fast Binary Distribution
+ Version: $env:TAG_NAME
+ Platform: Windows ${{ matrix.arch }}
+
+ CONTENTS
+ ========
+ This package contains:
+ - Dynamic library (crc_fast.dll) with import library (crc_fast.dll.lib)
+ - Static library (crc_fast.lib)
+ - C/C++ header file (libcrc_fast.h)
+ - Command-line utilities (checksum.exe, arch-check.exe, get-custom-params.exe)
+
+ INSTALLATION
+ ============
+ 1. Extract this archive to your desired location
+ 2. Add the bin\ directory to your PATH environment variable:
+ - Open System Properties > Environment Variables
+ - Edit the PATH variable and add: C:\path\to\crc-fast\bin
+
+ For development:
+ - Add lib\ directory to your linker library path
+ - Add include\ directory to your compiler include path
+
+ LINKING
+ =======
+ Dynamic linking (MSVC):
+ cl your_program.c /I"C:\path\to\crc-fast\include" /link crc_fast.dll.lib /LIBPATH:"C:\path\to\crc-fast\lib"
+ Note: crc_fast.dll must be in PATH or same directory as your executable
+
+ Static linking (MSVC):
+ cl your_program.c /I"C:\path\to\crc-fast\include" /link crc_fast.lib /LIBPATH:"C:\path\to\crc-fast\lib"
+
+ Dynamic linking (MinGW):
+ gcc your_program.c -I"C:\path\to\crc-fast\include" -L"C:\path\to\crc-fast\lib" -lcrc_fast
+
+ USAGE
+ =====
+ Command-line tools:
+ checksum.exe --help # Calculate CRC checksums
+ arch-check.exe # Display CPU architecture features
+ get-custom-params.exe --help # Generate CRC parameters
+
+ DOCUMENTATION
+ =============
+ Full documentation: https://github.com/awesomized/crc-fast-rust
+
+ LICENSE
+ =======
+ This software is dual-licensed under MIT OR Apache-2.0.
+ See LICENSE-MIT and LICENSE-Apache files for details.
+ "@ | Out-File -FilePath "$PKG_NAME/README.txt" -Encoding utf8
+
+ Write-Host "Copying license files..."
+ Copy-Item "LICENSE-MIT" "$PKG_NAME/"
+ Copy-Item "LICENSE-Apache" "$PKG_NAME/"
+
+ Write-Host "✓ Windows package staged successfully"
+ Get-ChildItem -Recurse "$PKG_NAME"
+
+ - name: Create zip package (Windows)
+ if: matrix.platform == 'windows'
+ shell: pwsh
+ run: |
+ $PKG_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}"
+ $ARCHIVE_NAME = "${PKG_NAME}.zip"
+
+ Write-Host "Creating compressed archive: $ARCHIVE_NAME"
+ Compress-Archive -Path "$PKG_NAME" -DestinationPath "$ARCHIVE_NAME" -CompressionLevel Optimal
+
+ Write-Host "Verifying archive was created..."
+ if (-not (Test-Path "$ARCHIVE_NAME")) {
+ Write-Error "Failed to create $ARCHIVE_NAME"
+ exit 1
+ }
+
+ Write-Host "Archive details:"
+ Get-Item "$ARCHIVE_NAME" | Format-List Name, Length, LastWriteTime
+
+ Write-Host "✓ zip package created successfully"
+
+ - name: Generate SHA256 checksum (Windows)
+ if: matrix.platform == 'windows'
+ shell: pwsh
+ run: |
+ $ARCHIVE_NAME = "crc-fast-$env:TAG_NAME-${{ matrix.platform }}-${{ matrix.arch }}.zip"
+ $CHECKSUM_FILE = "${ARCHIVE_NAME}.sha256"
+
+ Write-Host "Generating SHA256 checksum for $ARCHIVE_NAME..."
+ $hash = (Get-FileHash -Path "$ARCHIVE_NAME" -Algorithm SHA256).Hash.ToLower()
+ "$hash $ARCHIVE_NAME" | Out-File -FilePath "$CHECKSUM_FILE" -Encoding utf8 -NoNewline
+
+ Write-Host "Verifying checksum file was created..."
+ if (-not (Test-Path "$CHECKSUM_FILE")) {
+ Write-Error "Failed to create $CHECKSUM_FILE"
+ exit 1
+ }
+
+ Write-Host "Checksum file contents:"
+ Get-Content "$CHECKSUM_FILE"
+
+ Write-Host "✓ SHA256 checksum generated successfully"
+
+ - name: Upload package artifact
+ uses: actions/upload-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ with:
+ name: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}
+ path: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}
+ if-no-files-found: error
+ retention-days: 90
+
+ - name: Upload checksum artifact
+ uses: actions/upload-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ with:
+ name: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}.sha256
+ path: crc-fast-${{ needs.validate.outputs.tag_name }}-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.ext }}.sha256
+ if-no-files-found: error
+ retention-days: 90
+
+ publish:
+ name: Publish
+ needs: [validate, build]
+ runs-on: ubuntu-latest
+ env:
+ TAG_NAME: ${{ needs.validate.outputs.tag_name }}
+ steps:
+ - name: Download all artifacts
+ uses: actions/download-artifact@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ with:
+ path: artifacts
+ merge-multiple: false
+
+ - name: Check for existing release
+ id: check_release
+ shell: bash
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ echo "Checking if release exists for tag: $TAG_NAME"
+
+ RELEASE_DATA=$(curl -s -H "Authorization: Bearer $GITHUB_TOKEN" \
+ -H "Accept: application/vnd.github+json" \
+ "https://api.github.com/repos/${{ github.repository }}/releases/tags/$TAG_NAME")
+
+ if echo "$RELEASE_DATA" | jq -e '.id' > /dev/null 2>&1; then
+ RELEASE_ID=$(echo "$RELEASE_DATA" | jq -r '.id')
+ echo "release_exists=true" >> $GITHUB_OUTPUT
+ echo "release_id=$RELEASE_ID" >> $GITHUB_OUTPUT
+ echo "✓ Release already exists with ID: $RELEASE_ID"
+ else
+ echo "release_exists=false" >> $GITHUB_OUTPUT
+ echo "release_id=" >> $GITHUB_OUTPUT
+ echo "✓ No existing release found for this tag"
+ fi
+
+ - name: Organize files for upload
+ shell: bash
+ run: |
+ echo "Organizing downloaded artifacts..."
+
+ mkdir -p release-assets
+
+ echo "Moving packages and checksums to release-assets directory..."
+ find artifacts -type f \( -name "*.tar.gz" -o -name "*.zip" -o -name "*.sha256" \) -exec mv {} release-assets/ \;
+
+ echo "Release assets ready for upload:"
+ ls -lh release-assets/
+
+ echo "Verifying all expected files are present..."
+ EXPECTED_FILES=(
+ "crc-fast-$TAG_NAME-linux-x86_64.tar.gz"
+ "crc-fast-$TAG_NAME-linux-x86_64.tar.gz.sha256"
+ "crc-fast-$TAG_NAME-linux-x86.tar.gz"
+ "crc-fast-$TAG_NAME-linux-x86.tar.gz.sha256"
+ "crc-fast-$TAG_NAME-linux-aarch64.tar.gz"
+ "crc-fast-$TAG_NAME-linux-aarch64.tar.gz.sha256"
+ "crc-fast-$TAG_NAME-macos-aarch64.tar.gz"
+ "crc-fast-$TAG_NAME-macos-aarch64.tar.gz.sha256"
+ "crc-fast-$TAG_NAME-windows-x86_64.zip"
+ "crc-fast-$TAG_NAME-windows-x86_64.zip.sha256"
+ "crc-fast-$TAG_NAME-windows-x86.zip"
+ "crc-fast-$TAG_NAME-windows-x86.zip.sha256"
+ "crc-fast-$TAG_NAME-windows-aarch64.zip"
+ "crc-fast-$TAG_NAME-windows-aarch64.zip.sha256"
+ )
+
+ MISSING_FILES=()
+ for file in "${EXPECTED_FILES[@]}"; do
+ if [ ! -f "release-assets/$file" ]; then
+ MISSING_FILES+=("$file")
+ fi
+ done
+
+ if [ ${#MISSING_FILES[@]} -gt 0 ]; then
+ echo "ERROR: Missing expected files:"
+ printf '%s\n' "${MISSING_FILES[@]}"
+ exit 1
+ fi
+
+ echo "✓ All expected files are present"
+
+ echo "Total number of files: $(ls -1 release-assets/ | wc -l)"
+ echo "Total size: $(du -sh release-assets/ | cut -f1)"
+
+ - name: Create or update GitHub release
+ uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # pinned commit for 2.4.1
+ with:
+ files: release-assets/*
+ draft: true
+ prerelease: false
+ fail_on_unmatched_files: true
+ generate_release_notes: true
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git b/rust-vendor/crc-fast/.github/workflows/tests.yml b/rust-vendor/crc-fast/.github/workflows/tests.yml
new file mode 100644
index 0000000..5135a9e
--- /dev/null
+++ b/rust-vendor/crc-fast/.github/workflows/tests.yml
@@ -0,0 +1,377 @@
+name: Tests
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+
+jobs:
+ check-previous-run:
+ name: Check for previous successful run
+ runs-on: ubuntu-latest
+ outputs:
+ should_skip: ${{ steps.check.outputs.should_skip }}
+ steps:
+ - name: Check if commit was already tested
+ id: check
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ run: |
+ echo "Current commit: ${{ github.sha }}"
+ echo "Current ref: ${{ github.ref }}"
+
+ # Check if there's a previous successful workflow run for this exact commit
+ PREVIOUS_RUN=$(gh api \
+ -H "Accept: application/vnd.github+json" \
+ "/repos/${{ github.repository }}/actions/workflows/tests.yml/runs?status=success&per_page=5" \
+ --jq '.workflow_runs[] | select(.head_sha == "${{ github.sha }}") | .id' \
+ | head -n 1)
+
+ if [ -n "$PREVIOUS_RUN" ] && [ "$PREVIOUS_RUN" != "${{ github.run_id }}" ]; then
+ echo "Found previous successful run: $PREVIOUS_RUN"
+ echo "should_skip=true" >> $GITHUB_OUTPUT
+ else
+ echo "No previous successful run found for this commit"
+ echo "should_skip=false" >> $GITHUB_OUTPUT
+ fi
+
+ test-aarch64:
+ name: Test aarch64
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ strategy:
+ matrix:
+ os: [ubuntu-22.04-arm, ubuntu-24.04-arm, macos-14, macos-15, macos-26, macos-latest, windows-11-arm]
+ rust-toolchain:
+ - "1.81" # minimum for this crate
+ - "stable"
+ - "nightly"
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: ${{ matrix.rust-toolchain }}
+ components: rustfmt, clippy
+ cache-key: ${{ matrix.os }}-${{ matrix.rust-toolchain }}-v2
+ - name: Check
+ run: cargo check --all-features
+ - name: Architecture check
+ run: cargo run --features cli --bin arch-check
+ - if: ${{ matrix.rust-toolchain != 'nightly' }}
+ name: Format
+ run: cargo fmt -- --check
+ - if: ${{ matrix.rust-toolchain != 'nightly' }}
+ name: Clippy
+ run: cargo clippy --all-features -- -D warnings
+ - name: Test
+ run: cargo test --all-features
+
+ test-x86_64:
+ name: Test x86_64
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ strategy:
+ matrix:
+ os: [ ubuntu-latest, ubuntu-22.04, ubuntu-24.04, macos-15-intel, windows-2022, windows-2025, windows-latest ]
+ rust-toolchain:
+ - "1.81" # minimum for this crate
+ - "1.89" # when AVX-512 VPCLMULQDQ was stabilized
+ - "stable"
+ - "nightly"
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: ${{ matrix.rust-toolchain }}
+ components: rustfmt, clippy
+ cache-key: ${{ matrix.os }}-${{ matrix.rust-toolchain }}-v2
+ - name: Check
+ run: cargo check --all-features
+ - name: Architecture check
+ run: cargo run --features cli --bin arch-check
+ - if: ${{ matrix.rust-toolchain != 'nightly' }}
+ name: Format
+ run: cargo fmt -- --check
+ - if: ${{ matrix.rust-toolchain != 'nightly' }}
+ name: Clippy
+ run: cargo clippy --all-features -- -D warnings
+ - name: Test
+ run: cargo test --all-features
+
+ test-x86-linux:
+ name: Test x86 Linux
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target: [i586-unknown-linux-gnu, i686-unknown-linux-gnu]
+ rust-toolchain:
+ - "1.81" # minimum for this crate
+ - "stable"
+ - "nightly"
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: ${{ matrix.rust-toolchain }}
+ components: rustfmt, clippy
+ - name: Set up cross
+ run: cargo install cross --locked --version 0.2.5
+ - name: Check
+ run: cross check --all-features --target ${{ matrix.target }}
+ - name: Architecture check
+ run: cross run --features cli --bin arch-check --target ${{ matrix.target }}
+ - name: Test
+ run: cross test --all-features --target ${{ matrix.target }}
+
+ test-x86-windows:
+ name: Test x86 Windows
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ runs-on: windows-2022
+ strategy:
+ matrix:
+ rust-toolchain:
+ - "1.81" # minimum for this crate
+ - "stable"
+ - "nightly"
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: ${{ matrix.rust-toolchain }}
+ target: i686-pc-windows-msvc
+ components: rustfmt, clippy
+ cache-key: windows-x86-${{ matrix.rust-toolchain }}
+ - name: Check
+ run: cargo check --all-features --target i686-pc-windows-msvc
+ - name: Architecture check
+ run: cargo run --features cli --bin arch-check --target i686-pc-windows-msvc
+ - if: ${{ matrix.rust-toolchain != 'nightly' }}
+ name: Format
+ run: cargo fmt -- --check
+ - if: ${{ matrix.rust-toolchain != 'nightly' }}
+ name: Clippy
+ run: cargo clippy --all-features --target i686-pc-windows-msvc -- -D warnings
+ - name: Test
+ run: cargo test --all-features --target i686-pc-windows-msvc
+
+ test-software:
+ name: Test software fallback
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target: [powerpc-unknown-linux-gnu, powerpc64-unknown-linux-gnu]
+ rust-toolchain:
+ - "1.81" # minimum for this crate
+ - "stable"
+ - "nightly"
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: ${{ matrix.rust-toolchain }}
+ components: rustfmt, clippy
+ - name: Set up cross
+ run: cargo install cross --locked --version 0.2.5
+ - name: Check
+ run: cross check --all-features --target ${{ matrix.target }}
+ - name: Architecture check
+ run: cross run --features cli --bin arch-check --target ${{ matrix.target }}
+ - name: Test
+ run: cross test --all-features --target ${{ matrix.target }}
+
+ miri-test-x86_64:
+ name: Miri Test x86_64
+ needs: [check-previous-run, test-x86_64]
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ runs-on: ubuntu-24.04
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9
+ with:
+ toolchain: nightly
+ components: miri
+ - name: Detect CPU cores
+ id: cores
+ run: |
+ CORES=$(nproc)
+ echo "count=$CORES" >> $GITHUB_OUTPUT
+ echo "use_nextest=$([[ $CORES -ge 2 ]] && echo 'true' || echo 'false')" >> $GITHUB_OUTPUT
+ - name: Install nextest
+ if: steps.cores.outputs.use_nextest == 'true'
+ run: cargo install cargo-nextest --locked
+ - name: Setup Miri
+ run: cargo miri setup
+ - name: Run Miri tests (parallel)
+ if: steps.cores.outputs.use_nextest == 'true'
+ run: cargo miri nextest run --all-features -j${{ steps.cores.outputs.count }}
+ - name: Run Miri tests (serial)
+ if: steps.cores.outputs.use_nextest == 'false'
+ run: cargo miri test --all-features
+
+ test-no-std:
+ name: Test no_std
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - thumbv7em-none-eabihf # ARM Cortex-M4F/M7F
+ - thumbv8m.main-none-eabihf # ARM Cortex-M33/M35P
+ - riscv32imac-unknown-none-elf # RISC-V 32-bit
+ rust-toolchain:
+ - "1.81" # minimum for this crate
+ - "stable"
+ - "nightly"
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: ${{ matrix.rust-toolchain }}
+ target: ${{ matrix.target }}
+ components: rustfmt, clippy
+ cache-key: ${{ matrix.target }}-${{ matrix.rust-toolchain }}-v2
+ - name: Check no_std (no features)
+ run: cargo check --target ${{ matrix.target }} --no-default-features --features panic-handler --lib
+ - name: Check no_std with alloc
+ run: cargo check --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib
+ - name: Check no_std with cache
+ run: cargo check --target ${{ matrix.target }} --no-default-features --features cache,panic-handler --lib
+ - name: Run no_std tests (on host with std test harness)
+ run: cargo test --test no_std_tests
+
+ test-wasm:
+ name: Test WASM
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ include:
+ # WASM 1.0/2.0 (32-bit) - all toolchains
+ - target: wasm32-unknown-unknown
+ rust-toolchain: "1.81"
+ - target: wasm32-unknown-unknown
+ rust-toolchain: "stable"
+ - target: wasm32-unknown-unknown
+ rust-toolchain: "nightly"
+ # WASI preview 1 (32-bit) - all toolchains
+ - target: wasm32-wasip1
+ rust-toolchain: "1.81"
+ - target: wasm32-wasip1
+ rust-toolchain: "stable"
+ - target: wasm32-wasip1
+ rust-toolchain: "nightly"
+ # WASI preview 2 (32-bit) - nightly only (experimental)
+ - target: wasm32-wasip2
+ rust-toolchain: "nightly"
+ # Note: wasm64-unknown-unknown removed - not consistently available in nightly
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: ${{ matrix.rust-toolchain }}
+ target: ${{ matrix.target }}
+ components: rustfmt, clippy
+ cache-key: ${{ matrix.target }}-${{ matrix.rust-toolchain }}-v2
+ - name: Check WASM (no features)
+ run: cargo check --target ${{ matrix.target }} --no-default-features --features panic-handler --lib
+ - name: Check WASM with alloc
+ run: cargo check --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib
+ - name: Check WASM with cache
+ run: cargo check --target ${{ matrix.target }} --no-default-features --features cache,panic-handler --lib
+ - name: Build WASM release
+ run: cargo build --target ${{ matrix.target }} --no-default-features --features alloc,panic-handler --lib --release
+ - name: Run WASM tests (on host with std test harness)
+ run: cargo test --test wasm_tests
+ - if: ${{ matrix.target == 'wasm32-unknown-unknown' && matrix.rust-toolchain == 'stable' }}
+ name: Install wasm-pack
+ run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
+ - if: ${{ matrix.target == 'wasm32-unknown-unknown' && matrix.rust-toolchain == 'stable' }}
+ name: Build WASM package with wasm-pack
+ run: wasm-pack build --target web --no-default-features --features alloc,panic-handler
+
+ fuzz-test:
+ name: Fuzz Testing
+ needs: check-previous-run
+ if: needs.check-previous-run.outputs.should_skip != 'true'
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-24.04, ubuntu-24.04-arm]
+ fuzz-target:
+ - digest_crc32_autosar
+ - digest_crc32_bzip2
+ - digest_crc32_iscsi
+ - digest_crc32_iso_hdlc
+ - digest_crc64_ecma_182
+ - digest_crc64_nvme
+ - checksum_crc32_autosar
+ - checksum_crc32_bzip2
+ - checksum_crc32_iscsi
+ - checksum_crc32_iso_hdlc
+ - checksum_crc64_ecma_182
+ - checksum_crc64_nvme
+ steps:
+ - uses: actions/checkout@v4 # not pinning to commit hash since this is a GitHub action, which we trust
+ - uses: actions-rust-lang/setup-rust-toolchain@9d7e65c320fdb52dcd45ffaa68deb6c02c8754d9 # v1.12.0
+ with:
+ toolchain: nightly
+ cache-key: ${{ matrix.os }}-nightly-fuzz
+ - name: Install cargo-fuzz
+ run: cargo install cargo-fuzz
+ - name: Run fuzzer
+ run: |
+ cargo fuzz run ${{ matrix.fuzz-target }} -- \
+ -max_total_time=60 \
+ -rss_limit_mb=2048 \
+ -timeout=10 \
+ -print_final_stats=1
+ continue-on-error: true
+ - name: Upload artifacts on crash
+ if: failure()
+ uses: actions/upload-artifact@v4
+ with:
+ name: fuzz-artifacts-${{ matrix.os }}-${{ matrix.fuzz-target }}
+ path: fuzz/artifacts/${{ matrix.fuzz-target }}/
+
+ tests-complete:
+ name: All tests complete
+ needs: [check-previous-run, test-aarch64, test-x86_64, test-x86-linux, test-x86-windows, test-software, miri-test-x86_64, test-no-std, test-wasm, fuzz-test]
+ if: always()
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check test results
+ run: |
+ echo "Checking test results..."
+ echo "Previous run check: ${{ needs.check-previous-run.result }}"
+ echo "Should skip: ${{ needs.check-previous-run.outputs.should_skip }}"
+
+ if [ "${{ needs.check-previous-run.outputs.should_skip }}" == "true" ]; then
+ echo "✓ Tests were skipped because this commit was already tested successfully"
+ exit 0
+ fi
+
+ # Check if any test job failed
+ if [ "${{ needs.test-aarch64.result }}" == "failure" ] || \
+ [ "${{ needs.test-x86_64.result }}" == "failure" ] || \
+ [ "${{ needs.test-x86-linux.result }}" == "failure" ] || \
+ [ "${{ needs.test-x86-windows.result }}" == "failure" ] || \
+ [ "${{ needs.test-software.result }}" == "failure" ] || \
+ [ "${{ needs.miri-test-x86_64.result }}" == "failure" ] || \
+ [ "${{ needs.test-no-std.result }}" == "failure" ] || \
+ [ "${{ needs.test-wasm.result }}" == "failure" ] || \
+ [ "${{ needs.fuzz-test.result }}" == "failure" ]; then
+ echo "✗ One or more test jobs failed"
+ exit 1
+ fi
+
+ echo "✓ All test jobs passed"
diff --git b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/design.md b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/design.md
new file mode 100644
index 0000000..26cf154
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/design.md
@@ -0,0 +1,202 @@
+# Design Document
+
+## Overview
+
+This design extends the existing `bin/checksum.rs` tool with benchmark functionality through a new `-b` flag. The benchmark mode will measure CRC performance using either user-provided data (files/strings) or randomly generated data, reporting throughput in GiB/s along with the acceleration target used.
+
+The design maintains backward compatibility while adding a clean benchmark interface that leverages existing patterns from the `benches/benchmark.rs` implementation.
+
+## Architecture
+
+### Command Line Interface
+
+The tool will extend the existing argument parsing to support:
+- `-b`: Enable benchmark mode
+- `--size <bytes>`: Specify data size for random generation (when no file/string provided)
+- `--duration <seconds>`: Benchmark duration as floating-point seconds (default: 10.0)
+- Existing `-a <algorithm>`: CRC algorithm (required in benchmark mode)
+- Existing `-f <file>` or `-s <string>`: Optional data source for benchmarking
+
+### Data Flow
+
+```
+User Input → Argument Parsing → Mode Detection → Benchmark Execution → Results Display
+ ↓
+ [Normal Checksum Mode]
+ ↓
+ [Existing Functionality]
+```
+
+In benchmark mode:
+1. Parse and validate benchmark parameters
+2. Determine data source (file, string, or generated)
+3. For string/generated data: Load/generate test data once; For file data: use file path directly
+4. Run benchmark loop for specified duration using appropriate checksum function
+5. Calculate and display results
+
+## Components and Interfaces
+
+### Enhanced Config Structure
+
+```rust
+#[derive(Debug)]
+struct Config {
+ algorithm: String,
+ file: Option<String>,
+ string: Option<String>,
+ format: OutputFormat,
+ benchmark: Option<BenchmarkConfig>,
+}
+
+#[derive(Debug)]
+struct BenchmarkConfig {
+ size: Option<usize>,
+ duration: f64,
+}
+```
+
+### Benchmark Execution Module
+
+```rust
+enum BenchmarkData {
+ InMemory(Vec<u8>),
+ File(String),
+}
+
+struct BenchmarkRunner {
+ algorithm: CrcAlgorithm,
+ data: BenchmarkData,
+ duration: f64,
+}
+
+impl BenchmarkRunner {
+ fn new(algorithm: CrcAlgorithm, data: BenchmarkData, duration: f64) -> Self
+ fn run(&self) -> BenchmarkResult
+}
+
+struct BenchmarkResult {
+ iterations: u64,
+ elapsed_seconds: f64,
+ throughput_gibs: f64,
+ time_per_iteration_nanos: f64,
+ acceleration_target: String,
+ data_size: u64,
+}
+```
+
+### Data Generation
+
+The benchmark will reuse the random data generation pattern from `benches/benchmark.rs`:
+
+```rust
+fn generate_random_data(size: usize) -> Vec<u8> {
+ let mut rng = rand::rng();
+ let mut buf = vec![0u8; size];
+ rng.fill_bytes(&mut buf);
+ buf
+}
+```
+
+## Data Models
+
+### Input Data Sources
+
+1. **File Input**: Use `checksum_file()` function to benchmark the entire file I/O and checksum stack
+2. **String Input**: Use string bytes directly with in-memory `checksum()` function
+3. **Generated Data**: Create random data of specified size using `rand::RngCore::fill_bytes()` and use in-memory `checksum()` function
+
+### Benchmark Metrics
+
+- **Iterations**: Number of checksum calculations performed
+- **Elapsed Time**: Actual benchmark duration in seconds
+- **Throughput**: Calculated as `(data_size * iterations) / elapsed_time / (1024^3)` GiB/s
+- **Acceleration Target**: Result from `crc_fast::get_calculator_target(algorithm)`
+
+## Error Handling
+
+### Validation Errors
+
+- Invalid algorithm names (reuse existing validation)
+- Invalid size parameters (non-positive values)
+- Invalid duration parameters (non-positive values)
+- File read errors (reuse existing error handling)
+
+### Runtime Errors
+
+- Memory allocation failures for large data sizes
+- Timer precision issues (fallback to alternative timing methods)
+
+### Error Messages
+
+All errors will follow the existing pattern of displaying the error message followed by usage information.
+
+## Testing Strategy
+
+### Unit Tests
+
+- Argument parsing validation for benchmark flags
+- BenchmarkConfig creation and validation
+- Data generation with various sizes
+- Throughput calculation accuracy
+
+### Integration Tests
+
+- End-to-end benchmark execution with different algorithms
+- File and string input handling in benchmark mode
+- Error handling for invalid parameters
+- Backward compatibility verification
+
+### Performance Validation
+
+- Verify benchmark results are reasonable (within expected ranges)
+- Compare with existing `benches/benchmark.rs` results for consistency
+- Test with various data sizes to ensure linear scaling
+
+## Implementation Notes
+
+### Timing Mechanism
+
+Use `std::time::Instant` for high-precision timing, with different approaches for different data sources:
+
+```rust
+let start = std::time::Instant::now();
+let mut iterations = 0u64;
+
+while start.elapsed().as_secs_f64() < duration {
+ match &self.data {
+ BenchmarkData::InMemory(data) => {
+ std::hint::black_box(checksum(algorithm, data));
+ }
+ BenchmarkData::File(filename) => {
+ std::hint::black_box(checksum_file(algorithm, filename, None).unwrap());
+ }
+ }
+ iterations += 1;
+}
+
+let elapsed = start.elapsed().as_secs_f64();
+```
+
+### Memory Considerations
+
+- Pre-allocate test data once before benchmark loop
+- Use `std::hint::black_box()` to prevent compiler optimizations
+- Consider memory alignment for optimal performance (optional enhancement)
+
+### Output Format
+
+```
+Algorithm: CRC-32/ISCSI
+Acceleration Target: aarch64-neon-sha3
+Data Size: 1,048,576 bytes (1.0 MiB)
+Duration: 10.00 seconds
+Iterations: 12,345
+Throughput: 45.67 GiB/s
+Time per iteration: 810.2 μs
+```
+
+### Default Values
+
+- **Size**: 1,048,576 bytes (1 MiB)
+- **Duration**: 10.0 seconds
+- **Algorithm**: Must be specified via `-a` flag (no default)
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/requirements.md b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/requirements.md
new file mode 100644
index 0000000..4da3195
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/requirements.md
@@ -0,0 +1,52 @@
+# Requirements Document
+
+## Introduction
+
+This feature adds a simple benchmark option to the existing `bin/checksum.rs` tool via a command-line flag. The benchmark will allow users to test performance across different platforms using a single binary, reporting throughput in GiB/s and the acceleration target used. This enables cross-platform performance comparison without requiring a full development environment checkout.
+
+## Glossary
+
+- **Checksum_Tool**: The existing `bin/checksum.rs` binary application
+- **Benchmark_Mode**: A new operational mode that measures and reports performance metrics
+- **Acceleration_Target**: The hardware-specific optimization path returned by `get_calculator_target()`
+- **Throughput_Metric**: Performance measurement expressed in GiB/s (gibibytes per second)
+- **Test_Data**: Randomly generated byte array used for benchmark measurements
+- **Black_Box**: Rust's `std::hint::black_box()` function that prevents compiler optimizations during benchmarking
+
+## Requirements
+
+### Requirement 1
+
+**User Story:** As a developer, I want to run performance benchmarks from the checksum tool, so that I can compare CRC performance across different hardware platforms without setting up a full development environment.
+
+#### Acceptance Criteria
+
+1. WHEN the user provides a `-b` flag, THE Checksum_Tool SHALL enter Benchmark_Mode
+2. WHILE in Benchmark_Mode, THE Checksum_Tool SHALL generate Test_Data of the specified size once and reuse it for all iterations
+3. THE Checksum_Tool SHALL report Throughput_Metric in GiB/s format
+4. THE Checksum_Tool SHALL display the Acceleration_Target used for the benchmark
+5. THE Checksum_Tool SHALL use Black_Box to prevent compiler optimizations during measurement
+
+### Requirement 2
+
+**User Story:** As a developer, I want to specify benchmark parameters, so that I can control the test conditions for consistent cross-platform comparisons.
+
+#### Acceptance Criteria
+
+1. WHEN the user provides `-a` parameter with `-b` flag, THE Checksum_Tool SHALL use the specified CRC algorithm for benchmarking
+2. WHEN the user provides `--size` parameter, THE Checksum_Tool SHALL generate Test_Data of the specified byte size
+3. WHEN the user provides `--duration` parameter, THE Checksum_Tool SHALL run the benchmark for the specified number of seconds
+4. WHERE no benchmark parameters are provided, THE Checksum_Tool SHALL use default values of 1 MiB for size and 10 seconds for duration
+5. THE Checksum_Tool SHALL validate all benchmark parameter values before starting the benchmark
+
+### Requirement 3
+
+**User Story:** As a developer, I want the benchmark to support both file/string input and generated data, so that I can benchmark with specific data or use random data for consistent testing.
+
+#### Acceptance Criteria
+
+1. WHEN the user provides `-b` with `-f` or `-s` flags, THE Checksum_Tool SHALL use the file or string content as Test_Data for benchmarking
+2. WHEN the user provides `-b` with `--size` parameter but no `-f` or `-s` flags, THE Checksum_Tool SHALL generate random Test_Data of the specified size
+3. IF the user provides `-b` without any data source or size specification, THEN THE Checksum_Tool SHALL generate random Test_Data using the default size
+4. THE Checksum_Tool SHALL display appropriate usage information when benchmark parameters are invalid
+5. THE Checksum_Tool SHALL maintain backward compatibility with existing checksum functionality
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/tasks.md b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/tasks.md
new file mode 100644
index 0000000..492dd08
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/checksum-benchmark-option/tasks.md
@@ -0,0 +1,49 @@
+# Implementation Plan
+
+- [x] 1. Extend command line argument parsing for benchmark options
+ - Add `-b` flag to enable benchmark mode in the argument parser
+ - Add `--size` parameter for specifying random data size
+ - Add `--duration` parameter for benchmark duration (floating-point seconds)
+ - Update the `Config` struct to include optional `BenchmarkConfig`
+ - Update usage/help text to include new benchmark options
+ - _Requirements: 1.1, 2.1, 2.2, 2.3, 2.4_
+
+- [x] 2. Implement benchmark data structures and validation
+ - Create `BenchmarkConfig` struct with size and duration fields
+ - Create `BenchmarkData` enum to handle in-memory vs file data sources
+ - Create `BenchmarkRunner` struct with algorithm, data, and duration
+ - Create `BenchmarkResult` struct with all metrics including time per iteration
+ - Add validation logic for benchmark parameters (positive values)
+ - _Requirements: 2.5, 3.4_
+
+- [x] 3. Implement benchmark execution logic
+ - Create benchmark runner with timing loop using `std::time::Instant`
+ - Implement separate execution paths for in-memory data vs file data
+ - Use `std::hint::black_box()` to prevent compiler optimizations
+ - Calculate throughput in GiB/s and time per iteration with appropriate units
+ - Integrate `get_calculator_target()` for acceleration target reporting
+ - _Requirements: 1.2, 1.3, 1.4, 1.5_
+
+- [x] 4. Implement data source handling
+ - Add random data generation function using `rand::RngCore::fill_bytes()`
+ - Implement logic to determine data source (file, string, or generated)
+ - Handle file size detection for throughput calculations
+ - Create `BenchmarkData` instances based on user input
+ - _Requirements: 3.1, 3.2, 3.3_
+
+- [x] 5. Integrate benchmark mode into main application flow
+ - Modify main function to detect benchmark mode and route accordingly
+ - Ensure mutual exclusivity validation between benchmark and normal modes
+ - Add benchmark result formatting and display
+ - Update error handling to include benchmark-specific errors
+ - Maintain backward compatibility with existing functionality
+ - _Requirements: 3.4, 3.5_
+
+- [x] 6. Add comprehensive testing for benchmark functionality
+ - Write unit tests for argument parsing with benchmark flags
+ - Test benchmark parameter validation (invalid sizes, durations)
+ - Test data source selection logic (file vs string vs generated)
+ - Test benchmark execution with different algorithms
+ - Verify throughput calculation accuracy
+ - Test error handling for invalid benchmark configurations
+ - _Requirements: All requirements_
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/design.md b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/design.md
new file mode 100644
index 0000000..b204e65
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/design.md
@@ -0,0 +1,270 @@
+# Design Document
+
+## Overview
+
+The CRC parameters caching system will add a thread-safe, memory-efficient cache to the `CrcParams::new()` method. The cache will store pre-computed folding keys indexed by the input parameters, eliminating redundant key generation for identical parameter sets. The design prioritizes performance, thread safety, and minimal memory overhead while maintaining complete API compatibility.
+
+## Architecture
+
+### Cache Structure
+
+The caching system will use a global, thread-safe cache implemented with:
+
+- **Cache Storage**: `std::collections::HashMap<CrcParamsCacheKey, [u64; 23]>`
+- **Thread Safety**: `std::sync::RwLock` for concurrent read access with exclusive write access
+- **Cache Key**: Custom struct containing all parameters that affect key generation
+- **Lazy Initialization**: `std::sync::OnceLock` to initialize the cache on first use
+
+### Cache Key Design
+
+```rust
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+struct CrcParamsCacheKey {
+ width: u8,
+ poly: u64,
+ reflected: bool,
+}
+```
+
+The cache key includes only the parameters that directly affect key generation (`width`, `poly`, `reflected`), excluding parameters like `name`, `init`, `xorout`, and `check` which don't influence the mathematical key computation.
+
+### Cache Access Pattern
+
+1. **Cache Hit Path**: Read lock → HashMap lookup → Return cached keys
+2. **Cache Miss Path**: Read lock → Cache miss → Generate keys → Write lock → Store in cache → Return keys
+3. **Concurrent Access**: Multiple readers can access simultaneously; writers get exclusive access
+
+## Components and Interfaces
+
+### Core Components
+
+#### 1. Cache Module (`src/cache.rs`)
+
+```rust
+use std::collections::HashMap;
+use std::sync::{OnceLock, RwLock};
+
+static CACHE: OnceLock<RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>>> = OnceLock::new();
+
+pub fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23]
+pub fn clear_cache() // For testing and memory management
+```
+
+#### 2. Cache Key Structure
+
+```rust
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+struct CrcParamsCacheKey {
+ width: u8,
+ poly: u64,
+ reflected: bool,
+}
+```
+
+#### 3. Modified CrcParams Implementation
+
+The existing `CrcParams::new()` method will be updated to use the cache:
+
+```rust
+impl CrcParams {
+ pub fn new(
+ name: &'static str,
+ width: u8,
+ poly: u64,
+ init: u64,
+ reflected: bool,
+ xorout: u64,
+ check: u64,
+ ) -> Self {
+ let keys = cache::get_or_generate_keys(width, poly, reflected);
+
+ let algorithm = match width {
+ 32 => CrcAlgorithm::Crc32Custom,
+ 64 => CrcAlgorithm::Crc64Custom,
+ _ => panic!("Unsupported width: {}", width),
+ };
+
+ Self {
+ algorithm,
+ name,
+ width,
+ poly,
+ init,
+ refin: reflected,
+ refout: reflected,
+ xorout,
+ check,
+ keys,
+ }
+ }
+}
+```
+
+### Interface Design
+
+#### Public Interface
+- No changes to existing public APIs
+- `CrcParams::new()` maintains identical signature and behavior
+- Cache operations are completely internal
+
+#### Internal Interface
+- `cache::get_or_generate_keys()` - Primary cache interface
+- `cache::clear_cache()` - For testing and memory management
+- Cache key creation and hashing handled internally
+
+## Data Models
+
+### Cache Key Model
+```rust
+#[derive(Debug, Clone, PartialEq, Eq, Hash)]
+struct CrcParamsCacheKey {
+ width: u8, // CRC width (32 or 64)
+ poly: u64, // Polynomial value
+ reflected: bool, // Reflection mode
+}
+```
+
+### Cache Storage Model
+```rust
+type CacheStorage = HashMap<CrcParamsCacheKey, [u64; 23]>;
+type ThreadSafeCache = RwLock<CacheStorage>;
+```
+
+### Memory Layout Considerations
+- Cache keys: ~17 bytes per entry (8 + 8 + 1 bytes + HashMap overhead)
+- Cache values: 184 bytes per entry (23 × 8 bytes)
+- Total per entry: ~201 bytes + HashMap overhead
+- Expected usage: 1-10 unique parameter sets in typical applications (single parameter set most common)
+
+## Error Handling
+
+### Cache Access Errors
+- **RwLock Poisoning**: If a thread panics while holding the write lock, subsequent accesses will fall back to direct key generation
+- **Memory Allocation**: HashMap growth failures will be handled by Rust's standard allocation error handling
+
+### Fallback Strategy
+```rust
+fn get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] {
+ let cache_key = CrcParamsCacheKey { width, poly, reflected };
+
+ // Try cache read first
+ if let Ok(cache) = get_cache().read() {
+ if let Some(keys) = cache.get(&cache_key) {
+ return *keys;
+ }
+ }
+
+ // Generate keys outside of write lock to minimize lock hold time
+ let keys = generate::keys(width, poly, reflected);
+
+ // Try to cache the result (best effort)
+ if let Ok(mut cache) = get_cache().write() {
+ cache.insert(cache_key, keys);
+ }
+
+ keys
+}
+```
+
+### Error Recovery
+- Lock poisoning: Continue with direct key generation
+- Memory pressure: Cache operations become no-ops, functionality preserved
+- Hash collisions: Handled by HashMap implementation
+
+## Testing Strategy
+
+### Unit Tests
+1. **Cache Functionality**
+ - Verify cache hits return identical keys
+ - Verify cache misses generate and store keys
+ - Test cache key equality and hashing
+
+2. **Thread Safety**
+ - Concurrent read access tests
+ - Read-write contention tests
+ - Cache consistency under concurrent access
+
+3. **Performance Tests**
+ - Benchmark cache hit vs. miss performance
+ - Memory usage validation
+ - Comparison with uncached implementation
+
+4. **Edge Cases**
+ - Empty cache behavior
+ - Cache with single entry
+ - Maximum realistic cache size
+ - Lock poisoning recovery
+
+### Integration Tests
+1. **API Compatibility**
+ - Existing CrcParams::new() behavior unchanged
+ - All existing tests continue to pass
+ - Identical results for cached vs. uncached keys
+
+2. **Real-world Usage Patterns**
+ - Multiple CrcParams instances with same parameters
+ - Mixed usage with different parameters
+ - Long-running application simulation
+
+### Performance Benchmarks
+1. **Cache Hit Performance**: Measure lookup time vs. key generation time
+2. **Cache Miss Performance**: Measure overhead of cache check + generation
+3. **Memory Usage**: Track cache memory consumption over time
+4. **Concurrent Access**: Measure performance under thread contention
+
+## Implementation Phases
+
+### Phase 1: Core Cache Implementation
+- Create cache module with basic HashMap storage
+- Implement thread-safe access with RwLock
+- Add cache key structure and hashing
+
+### Phase 2: Integration
+- Modify CrcParams::new() to use cache
+- Add fallback error handling
+- Ensure API compatibility
+
+### Phase 3: Testing and Optimization
+- Comprehensive test suite
+- Performance benchmarking
+- Memory usage optimization
+- Documentation updates
+
+## Performance Considerations
+
+### Cache Hit Performance
+- Expected improvement: 50-100x faster than key generation
+- RwLock read access: ~10-20ns overhead
+- HashMap lookup: O(1) average case, ~50-100ns
+
+### Cache Miss Performance
+- Additional overhead: ~100-200ns for cache check
+- Write lock acquisition: ~50-100ns
+- HashMap insertion: O(1) average case
+
+### Memory Efficiency
+- Cache overhead per entry: ~201 bytes
+- Expected cache size: 200 bytes - 2KB for typical applications
+- Memory growth: Linear with unique parameter combinations
+
+### Thread Contention
+- Read-heavy workload: Excellent scalability
+- Write contention: Minimal impact (writes are rare after warmup)
+- Lock-free reads: Multiple threads can read simultaneously
+
+## Security Considerations
+
+### Memory Safety
+- All cache operations use safe Rust constructs
+- No unsafe code in cache implementation
+- HashMap provides memory safety guarantees
+
+### Thread Safety
+- RwLock prevents data races
+- Cache key immutability prevents modification after creation
+- Atomic operations for cache initialization
+
+### Resource Management
+- Cache growth is bounded by unique parameter combinations
+- No automatic eviction policy (acceptable for typical usage)
+- Manual cache clearing available for memory management
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/requirements.md b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/requirements.md
new file mode 100644
index 0000000..3817d14
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/requirements.md
@@ -0,0 +1,57 @@
+# Requirements Document
+
+## Introduction
+
+This feature adds a caching layer to the `CrcParams::new()` method to optimize performance when the same CRC parameters are used multiple times during program execution. Currently, each call to `CrcParams::new()` regenerates the folding keys through expensive mathematical operations, even when identical parameters have been used before. The caching system will store generated keys in memory and reuse them for subsequent requests with matching parameters, significantly improving performance for applications that create multiple CRC instances with the same configuration.
+
+## Requirements
+
+### Requirement 1
+
+**User Story:** As a developer using the crc-fast library, I want CrcParams::new() to cache generated keys so that repeated calls with identical parameters don't regenerate keys unnecessarily.
+
+#### Acceptance Criteria
+
+1. WHEN CrcParams::new() is called with parameters that have been used before THEN the system SHALL return cached keys instead of regenerating them
+2. WHEN CrcParams::new() is called with new parameters for the first time THEN the system SHALL generate the keys and cache them for future use
+3. WHEN multiple threads call CrcParams::new() concurrently with the same parameters THEN the system SHALL handle thread safety correctly without data races
+
+### Requirement 2
+
+**User Story:** As a performance-conscious developer, I want the caching mechanism to have minimal overhead so that it doesn't negatively impact single-use scenarios.
+
+#### Acceptance Criteria
+
+1. WHEN CrcParams::new() is called for the first time with any parameters THEN the performance overhead SHALL be minimal compared to the current implementation
+2. WHEN CrcParams::new() is called with cached parameters THEN the lookup SHALL be significantly faster than key generation
+3. WHEN the cache is accessed THEN the lookup mechanism SHALL use efficient data structures optimized for the expected access patterns
+
+### Requirement 3
+
+**User Story:** As a developer working with custom CRC parameters, I want the cache to correctly identify identical parameter sets so that functionally equivalent calls are properly cached.
+
+#### Acceptance Criteria
+
+1. WHEN two CrcParams::new() calls use identical values for all parameters (name, width, poly, init, reflected, xorout, check) THEN the system SHALL treat them as cache hits
+2. WHEN two CrcParams::new() calls differ in any parameter value THEN the system SHALL treat them as separate cache entries
+3. WHEN parameter comparison is performed THEN the system SHALL use all relevant fields to determine cache key uniqueness
+
+### Requirement 4
+
+**User Story:** As a developer concerned about memory usage, I want the cache to have reasonable memory management so that it doesn't grow unbounded in long-running applications.
+
+#### Acceptance Criteria
+
+1. WHEN the cache stores parameter sets THEN it SHALL use memory-efficient storage for the cache keys and values
+2. WHEN the application runs for extended periods THEN the cache SHALL not consume excessive memory for typical usage patterns
+3. IF the cache grows large THEN the system SHALL provide a way to clear or manage cache size (though automatic eviction is not required for this initial implementation)
+
+### Requirement 5
+
+**User Story:** As a developer integrating this library, I want the caching to be transparent so that existing code continues to work without modifications.
+
+#### Acceptance Criteria
+
+1. WHEN existing code calls CrcParams::new() THEN it SHALL work exactly as before with no API changes required
+2. WHEN CrcParams instances are created THEN they SHALL have identical behavior regardless of whether keys came from cache or generation
+3. WHEN the caching system is active THEN it SHALL not affect the public interface or return values of CrcParams::new()
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/tasks.md b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/tasks.md
new file mode 100644
index 0000000..99019a6
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc-params-caching/tasks.md
@@ -0,0 +1,78 @@
+# Implementation Plan
+
+- [x] 1. Create cache module with core data structures
+ - Create `src/cache.rs` module file
+ - Define `CrcParamsCacheKey` struct with `width`, `poly`, and `reflected` fields
+ - Implement `Debug`, `Clone`, `PartialEq`, `Eq`, and `Hash` traits for the cache key
+ - Add module declaration to `src/lib.rs`
+ - _Requirements: 1.1, 3.1, 3.2_
+
+- [x] 2. Implement thread-safe cache storage
+ - Define global cache using `std::sync::OnceLock<RwLock<HashMap<CrcParamsCacheKey, [u64; 23]>>>`
+ - Implement `get_cache()` function to initialize and return cache reference
+ - Add necessary imports for `std::collections::HashMap`, `std::sync::{OnceLock, RwLock}`
+ - _Requirements: 1.3, 2.3_
+
+- [x] 3. Implement cache lookup and storage functions
+ - Create `get_or_generate_keys(width: u8, poly: u64, reflected: bool) -> [u64; 23]` function
+ - Implement cache hit path with read lock and HashMap lookup
+ - Implement cache miss path with key generation followed by write lock and storage
+ - Add error handling for lock poisoning with fallback to direct key generation
+ - _Requirements: 1.1, 1.2, 4.1_
+
+- [x] 4. Add cache management utilities
+ - Implement `clear_cache()` function for testing and memory management
+ - Add proper error handling for all cache operations
+ - Ensure all cache operations are best-effort with graceful degradation
+ - _Requirements: 4.3_
+
+- [x] 5. Integrate cache into CrcParams::new()
+ - Modify `CrcParams::new()` in `src/structs.rs` to use `cache::get_or_generate_keys()`
+ - Replace direct call to `generate::keys()` with cache lookup
+ - Ensure all existing functionality remains unchanged
+ - Verify that the function signature and behavior are identical
+ - _Requirements: 1.1, 1.2, 5.1, 5.2, 5.3_
+
+- [x] 6. Create comprehensive unit tests for cache functionality
+ - Add tests to `src/cache.rs`
+ - Write tests for cache key creation, equality, and hashing
+ - Test cache hit scenarios (same parameters return cached keys)
+ - Test cache miss scenarios (new parameters generate and cache keys)
+ - Test that cached keys are identical to directly generated keys
+ - _Requirements: 1.1, 1.2, 3.1, 3.2_
+
+- [x] 7. Add thread safety tests
+ - Write concurrent access tests using `std::thread`
+ - Test multiple threads reading from cache simultaneously
+ - Test read-write contention scenarios
+ - Verify cache consistency under concurrent access
+ - Test lock poisoning recovery behavior
+ - _Requirements: 1.3_
+
+- [x] 8. Create integration tests for CrcParams compatibility
+ - Add tests to verify `CrcParams::new()` behavior is unchanged
+ - Test that all existing CRC parameter combinations work correctly
+ - Verify that cached and uncached results are identical
+ - Test multiple `CrcParams` instances with same parameters use cached keys
+ - _Requirements: 5.1, 5.2, 5.3_
+
+- [x] 9. Add comprehensive error handling tests
+ - Test cache behavior when locks are poisoned
+ - Test memory allocation failure scenarios
+ - Verify fallback to direct key generation works correctly
+ - Test cache operations under memory pressure
+ - _Requirements: 4.1, 4.2_
+
+- [x] 10. Update existing tests to work with caching
+ - Run all existing tests to ensure no regressions
+ - Update any tests that might be affected by caching behavior
+ - Ensure test isolation by clearing cache between tests if needed
+ - Verify all CRC algorithm tests still pass
+ - _Requirements: 5.1, 5.2, 5.3_
+
+- [x] 11. Add documentation and finalize implementation
+ - Add inline documentation for all new public and internal functions
+ - Update module-level documentation
+ - Add usage examples in code comments
+ - Ensure all code follows existing project style and conventions
+ - _Requirements: 5.3_
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/design.md b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/design.md
new file mode 100644
index 0000000..05a86e0
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/design.md
@@ -0,0 +1,358 @@
+# Design Document: CRC Width-32 Shared Base
+
+## Overview
+
+This design refactors the CRC-16 and CRC-32 algorithm implementations to share a common base module. Since CRC-16 operates in 32-bit space (scaling 16-bit values up for processing, then down for results), both widths use nearly identical SIMD operations. By extracting this shared logic into `src/crc32/width32_ops.rs`, we eliminate ~200 lines of duplicated code and prepare the codebase for future CRC width additions.
+
+## Architecture
+
+### Current Structure
+
+```
+src/
+├── crc16/
+│ ├── algorithm.rs # Width16 impl + process_0_to_15 (duplicated)
+│ ├── consts.rs
+│ └── mod.rs
+├── crc32/
+│ ├── algorithm.rs # Width32 impl + process_0_to_15 (duplicated)
+│ ├── consts.rs
+│ └── mod.rs
+├── crc64/
+│ ├── algorithm.rs # Width64 impl + process_0_to_15 (unique)
+│ ├── consts.rs
+│ └── mod.rs
+└── algorithm.rs # Shared algorithm infrastructure
+```
+
+### Proposed Structure
+
+```
+src/
+├── crc16/
+│ ├── algorithm.rs # Width16 impl (delegates to width32_ops)
+│ ├── consts.rs
+│ └── mod.rs
+├── crc32/
+│ ├── algorithm.rs # Width32 impl (delegates to width32_ops)
+│ ├── consts.rs
+│ ├── mod.rs
+│ └── width32_ops.rs # NEW: Shared 32-bit-space operations
+├── crc64/
+│ ├── algorithm.rs # Width64 impl + process_0_to_15 (unchanged)
+│ ├── consts.rs
+│ └── mod.rs
+└── algorithm.rs # Shared algorithm infrastructure
+```
+
+## Components and Interfaces
+
+### 1. New Module: `src/crc32/width32_ops.rs`
+
+This module contains all shared 32-bit-space operations:
+
+```rust
+//! Shared operations for CRC widths that operate in 32-bit space (CRC-16, CRC-32).
+//!
+//! CRC-16 computation scales 16-bit values to 32-bit space, uses these operations,
+//! then scales results back to 16 bits. CRC-32 uses these operations directly.
+
+use crate::algorithm;
+use crate::consts::CRC_CHUNK_SIZE;
+use crate::crc32::consts::{PSHUFB_SHF_TABLE_FORWARD, PSHUFB_SHF_TABLE_REVERSE, SIMD_CONSTANTS};
+use crate::enums::Reflector;
+use crate::structs::CrcState;
+use crate::traits::{ArchOps, EnhancedCrcWidth};
+
+/// SIMD constants shared by CRC-16 and CRC-32
+pub const WIDTH32_CONSTANTS_REFLECTED: [[u64; 2]; 4] = [
+ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
+ [0x8080808080808080, 0x8080808080808080], // mask1
+ [0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF], // mask2 reverse
+ [0x0000000000000000, 0x0000000000000000], // unused
+];
+
+pub const WIDTH32_CONSTANTS_FORWARD: [[u64; 2]; 4] = [
+ [0x08090a0b0c0d0e0f, 0x0001020304050607], // smask
+ [0x8080808080808080, 0x8080808080808080], // mask1
+ [0xffffffffffffffff, 0x00000000ffffffff], // mask2 forward
+ [0x0000000000000000, 0x0000000000000000], // unused
+];
+
+/// Load constants for 32-bit-space CRC operations
+#[inline(always)]
+pub fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
+ if reflected {
+ WIDTH32_CONSTANTS_REFLECTED
+ } else {
+ WIDTH32_CONSTANTS_FORWARD
+ }
+}
+
+/// Fold 16 bytes for 32-bit-space CRC operations
+#[inline(always)]
+pub unsafe fn fold_16<T: ArchOps>(
+ state: &mut CrcState<T::Vector>,
+ coeff: T::Vector,
+ data_to_xor: T::Vector,
+ ops: &T,
+) where
+ T::Vector: Copy,
+{
+ let (h, l) = if state.reflected {
+ (
+ ops.carryless_mul_10(state.value, coeff),
+ ops.carryless_mul_01(state.value, coeff),
+ )
+ } else {
+ (
+ ops.carryless_mul_00(state.value, coeff),
+ ops.carryless_mul_11(state.value, coeff),
+ )
+ };
+ state.value = ops.xor3_vectors(h, l, data_to_xor);
+}
+
+/// Fold to width for 32-bit-space CRC operations
+#[inline(always)]
+pub unsafe fn fold_width<T: ArchOps>(
+ state: &mut CrcState<T::Vector>,
+ high: u64,
+ low: u64,
+ ops: &T,
+) where
+ T::Vector: Copy,
+{
+ let coeff_vector_low = ops.create_vector_from_u64_pair_non_reflected(0, low);
+ let coeff_vector_high = ops.create_vector_from_u64_pair_non_reflected(high, 0);
+
+ state.value = if state.reflected {
+ ops.xor_vectors(
+ ops.carryless_mul_00(state.value, coeff_vector_low),
+ ops.shift_right_8(state.value),
+ )
+ } else {
+ ops.xor_vectors(
+ ops.carryless_mul_01(state.value, coeff_vector_low),
+ ops.shift_left_8(state.value),
+ )
+ };
+
+ let (clmul, masked) = if state.reflected {
+ let mask2 = ops.load_aligned(&[0xFFFFFFFF00000000, 0xFFFFFFFFFFFFFFFF]);
+ let masked = ops.and_vectors(state.value, mask2);
+ let shifted = ops.shift_left_12(state.value);
+ let clmul = ops.carryless_mul_11(shifted, coeff_vector_high);
+ (clmul, masked)
+ } else {
+ let mask2 = ops.load_aligned(&[0xFFFFFFFFFFFFFFFF, 0x00000000FFFFFFFF]);
+ let masked = ops.and_vectors(state.value, mask2);
+ let shifted = ops.shift_right_12(state.value);
+ let clmul = ops.carryless_mul_10(shifted, coeff_vector_high);
+ (clmul, masked)
+ };
+
+ state.value = ops.xor_vectors(clmul, masked);
+}
+
+/// Barrett reduction for 32-bit-space CRC operations
+/// Returns the full u64 result; caller extracts appropriate bits
+#[inline(always)]
+pub unsafe fn barrett_reduction<T: ArchOps>(
+ state: &CrcState<T::Vector>,
+ poly: u64,
+ mu: u64,
+ ops: &T,
+) -> [u64; 2]
+where
+ T::Vector: Copy,
+{
+ let x = state.value;
+ let mu_poly = ops.create_vector_from_u64_pair_non_reflected(poly, mu);
+
+ if state.reflected {
+ let clmul1 = ops.carryless_mul_00(x, mu_poly);
+ let clmul2 = ops.carryless_mul_10(clmul1, mu_poly);
+ let xorred = ops.xor_vectors(x, clmul2);
+ ops.extract_u64s(xorred)
+ } else {
+ let clmul1 = ops.shift_left_4(ops.carryless_mul_01(x, mu_poly));
+ let clmul2_shifted = ops.shift_left_4(ops.carryless_mul_11(clmul1, mu_poly));
+ let final_xor = ops.xor_vectors(clmul2_shifted, x);
+ ops.extract_u64s(final_xor)
+ }
+}
+
+/// Create coefficient vector for 32-bit-space CRC operations
+#[inline(always)]
+pub unsafe fn create_coefficient<T: ArchOps>(
+ high: u64,
+ low: u64,
+ ops: &T,
+) -> T::Vector
+where
+ T::Vector: Copy,
+{
+ ops.create_vector_from_u64_pair_non_reflected(high, low)
+}
+
+/// Get shuffle table pointer for 32-bit-space CRC operations
+#[inline(always)]
+pub fn get_last_bytes_table_ptr(reflected: bool, remaining_len: usize) -> (*const u8, usize) {
+ if reflected {
+ let base_ptr = &PSHUFB_SHF_TABLE_REVERSE as *const _ as *const u8;
+ (base_ptr, remaining_len)
+ } else {
+ let base_ptr = &PSHUFB_SHF_TABLE_FORWARD as *const _ as *const u8;
+ (base_ptr, 16 - remaining_len)
+ }
+}
+
+/// Process inputs smaller than 16 bytes for 32-bit-space CRC operations
+#[inline]
+#[cfg_attr(
+ any(target_arch = "x86", target_arch = "x86_64"),
+ target_feature(enable = "ssse3,sse4.1,pclmulqdq")
+)]
+#[cfg_attr(target_arch = "aarch64", target_feature(enable = "aes"))]
+pub unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(
+ data: &[u8],
+ state: &mut CrcState<T::Vector>,
+ reflector: &Reflector<T::Vector>,
+ keys: [u64; 23],
+ ops: &T,
+) -> W::Value
+where
+ T::Vector: Copy,
+{
+ // Implementation shared by CRC-16 and CRC-32
+ // ... (full implementation)
+}
+```
+
+### 2. Updated `src/crc16/algorithm.rs`
+
+The Width16 implementation delegates to shared operations:
+
+```rust
+impl EnhancedCrcWidth for Width16 {
+ #[inline(always)]
+ fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
+ crate::crc32::width32_ops::load_constants(reflected)
+ }
+
+ #[inline(always)]
+ unsafe fn fold_16<T: ArchOps>(...) {
+ crate::crc32::width32_ops::fold_16(state, coeff, data_to_xor, ops)
+ }
+
+ #[inline(always)]
+ unsafe fn barrett_reduction<T: ArchOps>(...) -> Self::Value {
+ let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops);
+ // Extract 16-bit result
+ if state.reflected {
+ u64s[1] as u16
+ } else {
+ ((u64s[0] >> 32) >> 16) as u16
+ }
+ }
+
+ // ... other delegating methods
+}
+
+// process_0_to_15 delegates to shared implementation
+pub(crate) unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(...) -> W::Value {
+ crate::crc32::width32_ops::process_0_to_15::<T, W>(data, state, reflector, keys, ops)
+}
+```
+
+### 3. Updated `src/crc32/algorithm.rs`
+
+The Width32 implementation also delegates to shared operations:
+
+```rust
+impl EnhancedCrcWidth for Width32 {
+ #[inline(always)]
+ fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
+ crate::crc32::width32_ops::load_constants(reflected)
+ }
+
+ #[inline(always)]
+ unsafe fn barrett_reduction<T: ArchOps>(...) -> Self::Value {
+ let u64s = crate::crc32::width32_ops::barrett_reduction(state, poly, mu, ops);
+ // Extract 32-bit result
+ if state.reflected {
+ u64s[1] as u32
+ } else {
+ (u64s[0] >> 32) as u32
+ }
+ }
+
+ // ... other delegating methods
+}
+
+// process_0_to_15 delegates to shared implementation
+pub(crate) unsafe fn process_0_to_15<T: ArchOps, W: EnhancedCrcWidth>(...) -> W::Value {
+ crate::crc32::width32_ops::process_0_to_15::<T, W>(data, state, reflector, keys, ops)
+}
+```
+
+### 4. Updated `src/crc32/mod.rs`
+
+Export the new module:
+
+```rust
+pub mod algorithm;
+pub mod consts;
+pub(crate) mod width32_ops; // NEW
+```
+
+## Data Models
+
+No changes to data models. The refactoring only affects internal implementation.
+
+## Correctness Properties
+
+*A property is a characteristic or behavior that should hold true across all valid executions of a system.*
+
+### Property 1: CRC-16 Computation Unchanged
+
+*For any* input byte sequence and any CRC-16 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring.
+
+**Validates: Requirements 4.1**
+
+### Property 2: CRC-32 Computation Unchanged
+
+*For any* input byte sequence and any CRC-32 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring.
+
+**Validates: Requirements 4.2**
+
+### Property 3: CRC-64 Computation Unchanged
+
+*For any* input byte sequence and any CRC-64 parameters, the computed checksum after refactoring SHALL equal the checksum computed before refactoring.
+
+**Validates: Requirements 4.3**
+
+## Error Handling
+
+No changes to error handling. The refactoring is purely internal.
+
+## Testing Strategy
+
+### Existing Tests
+
+All existing tests serve as regression tests:
+- CRC-16 check value tests (0x906E, 0xD0DB)
+- CRC-32 check value tests
+- CRC-64 check value tests
+- Property-based tests comparing against `crc` crate
+- Length-based tests for various input sizes
+
+### Verification Approach
+
+1. Run `cargo test` before refactoring to establish baseline
+2. Perform refactoring
+3. Run `cargo test` after refactoring to verify no regressions
+4. Run `cargo fmt --check` and `cargo clippy -- -D warnings`
+
+No new tests are needed since this is a pure refactoring with no behavior changes.
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/prompt.md b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/prompt.md
new file mode 100644
index 0000000..f814f29
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/prompt.md
@@ -0,0 +1,28 @@
+# CRC Width-32 Shared Base Refactoring
+
+## Goal
+
+Refactor the CRC-16 and CRC-32 algorithm implementations to share a common base, reducing code duplication and preparing for future CRC width additions (like CRC-8).
+
+## Background
+
+CRC-16 computation is performed by scaling 16-bit values to 32-bit space, using the CRC-32 algorithm infrastructure, and then scaling the result back to 16 bits. This means CRC-16 and CRC-32 share nearly identical implementations for:
+
+- `process_0_to_15()` function (~100 lines each, nearly identical)
+- `load_constants()` - identical constants
+- `fold_16()` - identical logic
+- `fold_width()` - identical logic
+- `barrett_reduction()` - nearly identical (just different final extraction)
+- `create_coefficient()` - identical
+- `perform_final_reduction()` - identical
+- `get_last_bytes_table_ptr()` - identical
+
+## Approach
+
+Create a shared module (`src/crc32/width32_ops.rs`) containing the common 32-bit-space operations that both CRC-16 and CRC-32 use. The Width16 and Width32 trait implementations will delegate to these shared functions, with Width16 performing the final 16-bit extraction where needed.
+
+## Constraints
+
+- Must maintain full backwards compatibility with existing CRC-16, CRC-32, and CRC-64 functionality
+- All existing tests must continue to pass
+- The refactoring should make it easier to add future CRC widths (like CRC-8)
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/requirements.md b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/requirements.md
new file mode 100644
index 0000000..8c9d930
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/requirements.md
@@ -0,0 +1,81 @@
+# Requirements Document
+
+## Introduction
+
+This feature refactors the CRC-16 and CRC-32 algorithm implementations to share a common base module, reducing code duplication. Since CRC-16 operates in 32-bit space (scaling values up and down), both widths use nearly identical SIMD operations. Extracting this shared logic into a common module improves maintainability and prepares the codebase for future CRC width additions.
+
+## Glossary
+
+- **Width32_Ops**: The shared module containing 32-bit-space SIMD operations used by both CRC-16 and CRC-32
+- **EnhancedCrcWidth**: The trait that defines width-specific CRC operations
+- **Width16**: The CRC-16 width implementation that operates in 32-bit space
+- **Width32**: The CRC-32 width implementation
+- **Width64**: The CRC-64 width implementation (unchanged by this refactoring)
+- **process_0_to_15**: The function handling small inputs (0-15 bytes)
+- **Barrett_Reduction**: The algorithm for fast modular reduction used in final CRC computation
+
+## Requirements
+
+### Requirement 1: Create Shared Width32 Operations Module
+
+**User Story:** As a library maintainer, I want shared 32-bit-space operations in a common module, so that CRC-16 and CRC-32 implementations don't duplicate code.
+
+#### Acceptance Criteria
+
+1. THE system SHALL create a new module `src/crc32/width32_ops.rs` containing shared 32-bit-space operations
+2. THE Width32_Ops module SHALL export a `process_0_to_15_width32()` function that handles small inputs for both CRC-16 and CRC-32
+3. THE Width32_Ops module SHALL export helper functions for `fold_16`, `fold_width`, and `barrett_reduction` operations
+4. THE Width32_Ops module SHALL export the shared `load_constants()` values
+5. THE Width32_Ops module SHALL export the shared `get_last_bytes_table_ptr()` logic
+
+### Requirement 2: Refactor Width16 Implementation
+
+**User Story:** As a library maintainer, I want the Width16 implementation to delegate to shared operations, so that code duplication is eliminated.
+
+#### Acceptance Criteria
+
+1. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `fold_16()` to the shared Width32_Ops module
+2. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `fold_width()` to the shared Width32_Ops module
+3. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `create_coefficient()` to the shared Width32_Ops module
+4. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `perform_final_reduction()` to the shared Width32_Ops module
+5. THE Width16 `EnhancedCrcWidth` implementation SHALL delegate `get_last_bytes_table_ptr()` to the shared Width32_Ops module
+6. THE Width16 `barrett_reduction()` SHALL call the shared implementation and extract the 16-bit result
+7. THE crc16::algorithm::process_0_to_15 function SHALL be removed and replaced with a call to the shared implementation
+
+### Requirement 3: Refactor Width32 Implementation
+
+**User Story:** As a library maintainer, I want the Width32 implementation to use shared operations, so that code duplication is eliminated.
+
+#### Acceptance Criteria
+
+1. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `fold_16()` to the shared Width32_Ops module
+2. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `fold_width()` to the shared Width32_Ops module
+3. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `create_coefficient()` to the shared Width32_Ops module
+4. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `perform_final_reduction()` to the shared Width32_Ops module
+5. THE Width32 `EnhancedCrcWidth` implementation SHALL delegate `get_last_bytes_table_ptr()` to the shared Width32_Ops module
+6. THE Width32 `barrett_reduction()` SHALL call the shared implementation and extract the 32-bit result
+7. THE crc32::algorithm::process_0_to_15 function SHALL call the shared implementation
+
+### Requirement 4: Backwards Compatibility
+
+**User Story:** As an existing library user, I want all CRC functionality to remain unchanged, so that my existing code continues to work correctly.
+
+#### Acceptance Criteria
+
+1. WHEN computing CRC-16 checksums after refactoring, THE system SHALL produce identical results to the current implementation
+2. WHEN computing CRC-32 checksums after refactoring, THE system SHALL produce identical results to the current implementation
+3. WHEN computing CRC-64 checksums after refactoring, THE system SHALL produce identical results to the current implementation
+4. THE public API SHALL remain unchanged with no breaking changes
+5. ALL existing tests SHALL continue to pass without modification
+
+### Requirement 5: Code Quality
+
+**User Story:** As a library maintainer, I want the refactored code to be clean and maintainable, so that future development is easier.
+
+#### Acceptance Criteria
+
+1. THE refactored code SHALL pass `cargo fmt --check` without errors
+2. THE refactored code SHALL pass `cargo clippy -- -D warnings` without warnings
+3. THE refactored code SHALL pass all existing tests via `cargo test`
+4. THE shared module SHALL have clear documentation explaining its purpose
+5. THE Width16 and Width32 implementations SHALL have comments indicating delegation to shared operations where applicable
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/tasks.md b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/tasks.md
new file mode 100644
index 0000000..b2d1791
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc-width32-shared-base/tasks.md
@@ -0,0 +1,133 @@
+# Implementation Plan: CRC Width-32 Shared Base
+
+## Overview
+
+This implementation refactors CRC-16 and CRC-32 to share common 32-bit-space operations, eliminating ~200 lines of duplicated code. The refactoring creates a new `width32_ops.rs` module and updates both Width16 and Width32 implementations to delegate to it.
+
+## Tasks
+
+- [x] 1. Create shared width32_ops module
+ - [x] 1.1 Create src/crc32/width32_ops.rs with shared constants
+ - Add module documentation explaining purpose
+ - Add WIDTH32_CONSTANTS_REFLECTED and WIDTH32_CONSTANTS_FORWARD
+ - Add load_constants() function
+ - _Requirements: 1.1, 1.4_
+
+ - [x] 1.2 Add shared fold operations to width32_ops
+ - Implement fold_16() function
+ - Implement fold_width() function
+ - _Requirements: 1.3_
+
+ - [x] 1.3 Add shared barrett_reduction to width32_ops
+ - Implement barrett_reduction() returning [u64; 2] for caller to extract bits
+ - _Requirements: 1.3_
+
+ - [x] 1.4 Add shared helper functions to width32_ops
+ - Implement create_coefficient() function
+ - Implement get_last_bytes_table_ptr() function
+ - _Requirements: 1.3, 1.5_
+
+ - [x] 1.5 Add shared process_0_to_15 to width32_ops
+ - Move the shared implementation from crc32/algorithm.rs
+ - _Requirements: 1.2_
+
+ - [x] 1.6 Update src/crc32/mod.rs to export width32_ops
+ - Add `pub(crate) mod width32_ops;`
+ - _Requirements: 1.1_
+
+- [x] 2. Checkpoint - Verify module compiles
+ - Ensure `cargo check` passes
+
+- [x] 3. Refactor Width32 implementation
+ - [x] 3.1 Update Width32 load_constants to delegate
+ - Call width32_ops::load_constants()
+ - _Requirements: 3.1_
+
+ - [x] 3.2 Update Width32 fold_16 to delegate
+ - Call width32_ops::fold_16()
+ - _Requirements: 3.1_
+
+ - [x] 3.3 Update Width32 fold_width to delegate
+ - Call width32_ops::fold_width()
+ - _Requirements: 3.2_
+
+ - [x] 3.4 Update Width32 barrett_reduction to delegate
+ - Call width32_ops::barrett_reduction() and extract 32-bit result
+ - _Requirements: 3.6_
+
+ - [x] 3.5 Update Width32 create_coefficient to delegate
+ - Call width32_ops::create_coefficient()
+ - _Requirements: 3.3_
+
+ - [x] 3.6 Update Width32 perform_final_reduction to delegate
+ - Call width32_ops::fold_width() and width32_ops::barrett_reduction()
+ - _Requirements: 3.4_
+
+ - [x] 3.7 Update Width32 get_last_bytes_table_ptr to delegate
+ - Call width32_ops::get_last_bytes_table_ptr()
+ - _Requirements: 3.5_
+
+ - [x] 3.8 Update crc32::algorithm::process_0_to_15 to delegate
+ - Call width32_ops::process_0_to_15()
+ - _Requirements: 3.7_
+
+- [x] 4. Checkpoint - Verify CRC-32 still works
+ - Run `cargo test` to ensure CRC-32 tests pass
+
+- [x] 5. Refactor Width16 implementation
+ - [x] 5.1 Update Width16 load_constants to delegate
+ - Call width32_ops::load_constants()
+ - _Requirements: 2.1_
+
+ - [x] 5.2 Update Width16 fold_16 to delegate
+ - Call width32_ops::fold_16()
+ - _Requirements: 2.1_
+
+ - [x] 5.3 Update Width16 fold_width to delegate
+ - Call width32_ops::fold_width()
+ - _Requirements: 2.2_
+
+ - [x] 5.4 Update Width16 barrett_reduction to delegate
+ - Call width32_ops::barrett_reduction() and extract 16-bit result
+ - _Requirements: 2.6_
+
+ - [x] 5.5 Update Width16 create_coefficient to delegate
+ - Call width32_ops::create_coefficient()
+ - _Requirements: 2.3_
+
+ - [x] 5.6 Update Width16 perform_final_reduction to delegate
+ - Call width32_ops::fold_width() and width32_ops::barrett_reduction()
+ - _Requirements: 2.4_
+
+ - [x] 5.7 Update Width16 get_last_bytes_table_ptr to delegate
+ - Call width32_ops::get_last_bytes_table_ptr()
+ - _Requirements: 2.5_
+
+ - [x] 5.8 Update crc16::algorithm::process_0_to_15 to delegate
+ - Call width32_ops::process_0_to_15()
+ - _Requirements: 2.7_
+
+- [x] 6. Checkpoint - Verify CRC-16 still works
+ - Run `cargo test` to ensure CRC-16 tests pass
+
+- [x] 7. Final verification and cleanup
+ - [x] 7.1 Run full test suite
+ - Run `cargo test` to verify all tests pass
+ - _Requirements: 4.5_
+
+ - [x] 7.2 Run code quality checks
+ - Run `cargo fmt --check`
+ - Run `cargo clippy -- -D warnings`
+ - _Requirements: 5.1, 5.2, 5.3_
+
+ - [x] 7.3 Verify CRC-64 unchanged
+ - Confirm CRC-64 tests still pass
+ - _Requirements: 4.3_
+
+## Notes
+
+- This is a pure refactoring with no behavior changes
+- All existing tests serve as regression tests
+- The shared module is placed in crc32/ since CRC-32 is the "native" width for these operations
+- CRC-16 scales to 32-bit space, uses shared ops, then scales back to 16 bits
+- CRC-64 remains unchanged as it has different SIMD operations
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/design.md b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/design.md
new file mode 100644
index 0000000..b700722
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/design.md
@@ -0,0 +1,368 @@
+# Design Document: CRC-16 Hardware Acceleration
+
+## Overview
+
+This design extends the crc-fast library to support hardware-accelerated CRC-16 computation using the same PCLMULQDQ/PMULL-based approach already implemented for CRC-32 and CRC-64. The key insight from the reference implementations is that CRC-16 computation can be performed by scaling the 16-bit values to 32-bit space, using the existing CRC-32 algorithm infrastructure, and then scaling the result back to 16 bits.
+
+The implementation follows a two-phase approach:
+1. **Phase 1**: Extend the key generator (`generate.rs`) to produce correct CRC-16 folding keys
+2. **Phase 2**: Extend the algorithm module to handle width=16 by leveraging the CRC-32 code path with appropriate scaling
+
+## Architecture
+
+### High-Level Design
+
+```
+┌─────────────────────────────────────────────────────────────────────┐
+│ Public API │
+│ checksum(), Digest, checksum_with_params(), CrcParams::new() │
+└─────────────────────────────────────────────────────────────────────┘
+ │
+ ▼
+┌─────────────────────────────────────────────────────────────────────┐
+│ Width Dispatcher │
+│ arch/mod.rs: routes to Width16, Width32, or Width64 │
+└─────────────────────────────────────────────────────────────────────┘
+ │
+ ┌───────────────┼───────────────┐
+ ▼ ▼ ▼
+ ┌──────────┐ ┌──────────┐ ┌──────────┐
+ │ Width16 │ │ Width32 │ │ Width64 │
+ │ (NEW) │ │(existing)│ │(existing)│
+ └──────────┘ └──────────┘ └──────────┘
+ │ │ │
+ └───────────────┼───────────────┘
+ ▼
+┌─────────────────────────────────────────────────────────────────────┐
+│ SIMD Algorithm Core │
+│ algorithm.rs: fold-by-8, Barrett reduction │
+└─────────────────────────────────────────────────────────────────────┘
+```
+
+### CRC-16 Scaling Strategy
+
+The reference assembly implementations reveal that CRC-16 uses the same PCLMULQDQ algorithm as CRC-32, but with values scaled to 32-bit space:
+
+**Forward (non-reflected) CRC-16:**
+1. Scale initial CRC: `initial_crc << 16` (shift left 16 bits)
+2. Process using CRC-32 algorithm with CRC-16 polynomial scaled to 32 bits
+3. Scale result: `result >> 16` (shift right 16 bits)
+
+**Reflected CRC-16:**
+1. Initial CRC used directly (no scaling needed for reflected)
+2. Process using CRC-32 algorithm with reflected CRC-16 polynomial
+3. Result extracted from appropriate register position
+
+## Components and Interfaces
+
+### 1. Key Generator Extension (`src/generate.rs`)
+
+The key generator must be extended to handle width=16. CRC-16 uses the same exponents as CRC-32 (32*N distances) because the folding algorithm operates on 128-bit SIMD registers regardless of CRC width.
+
+```rust
+/// Exponents for CRC-16 key generation (same as CRC-32)
+const CRC16_EXPONENTS: [u64; 23] = CRC32_EXPONENTS;
+
+/// Generates folding keys for CRC-16
+pub fn keys(width: u8, poly: u64, reflected: bool) -> [u64; 23] {
+ let exponents = match width {
+ 16 => CRC16_EXPONENTS, // NEW
+ 32 => CRC32_EXPONENTS,
+ 64 => CRC64_EXPONENTS,
+ _ => panic!("Unsupported width: {width}"),
+ };
+ // ... rest of implementation
+}
+```
+
+**Key Generation Functions:**
+
+```rust
+/// Computes a CRC-16 folding key for a given bit distance
+fn crc16_key(exponent: u64, reflected: bool, polynomial: u64) -> u64 {
+ // CRC-16 uses 17-bit polynomial (16 bits + implicit leading 1)
+ // Algorithm similar to CRC-32 but with different bit positions
+ if exponent < 32 {
+ return 0;
+ }
+
+ let mut n: u64 = 0x080000000; // Start at x^32 (same as CRC-32)
+ let e = exponent - 31;
+
+ for _ in 0..e {
+ n <<= 1;
+ if (n & 0x100000000) != 0 {
+ n ^= polynomial; // polynomial already has bit 32 set
+ }
+ }
+
+ if reflected {
+ bit_reverse_16(n) >> 31 // Reverse 16 bits, align
+ } else {
+ n << 32 // Shift to upper 32 bits
+ }
+}
+
+/// Computes Barrett reduction constant (μ) for CRC-16
+fn crc16_mu(polynomial: u64, reflected: bool) -> u64 {
+ // Same algorithm as CRC-32 mu
+ let mut n: u64 = 0x100000000;
+ let mut q: u64 = 0;
+
+ for _ in 0..33 {
+ q <<= 1;
+ if n & 0x100000000 != 0 {
+ q |= 1;
+ n ^= polynomial;
+ }
+ n <<= 1;
+ }
+
+ if reflected {
+ bit_reverse(q) >> 31
+ } else {
+ q
+ }
+}
+
+/// Formats CRC-16 polynomial for PCLMULQDQ operations
+fn crc16_polynomial(polynomial: u64, reflected: bool) -> u64 {
+ if !reflected {
+ // Forward: polynomial << 16 with bit 32 set
+ (polynomial << 16) | (1u64 << 32)
+ } else {
+ // Reflected: bit-reverse 16-bit poly, shift left 1, set LSB
+ let reversed = bit_reverse_16(polynomial as u16);
+ ((reversed as u64) << 1) | 1
+ }
+}
+```
+
+### 2. Width16 Implementation (`src/structs.rs`)
+
+Add a new width type for CRC-16:
+
+```rust
+/// CRC-16 width implementation
+#[derive(Clone, Copy)]
+pub struct Width16;
+
+impl CrcWidth for Width16 {
+ const WIDTH: u32 = 16;
+ type Value = u16;
+}
+```
+
+### 3. EnhancedCrcWidth for Width16 (`src/crc16/algorithm.rs`)
+
+The CRC-16 implementation leverages the CRC-32 infrastructure with scaling:
+
+```rust
+impl EnhancedCrcWidth for Width16 {
+ fn load_constants(reflected: bool) -> [[u64; 2]; 4] {
+ // Use CRC-32 constants - same SIMD operations
+ crc32::consts::SIMD_CONSTANTS
+ }
+
+ unsafe fn create_state<T: ArchOps>(
+ value: Self::Value,
+ reflected: bool,
+ ops: &T,
+ ) -> CrcState<T::Vector> {
+ if reflected {
+ // Reflected: value in low position
+ CrcState {
+ value: ops.create_vector_from_u32(value as u32, false),
+ reflected,
+ }
+ } else {
+ // Forward: scale to 32 bits, position in high bytes
+ let scaled = (value as u32) << 16;
+ CrcState {
+ value: ops.create_vector_from_u32(scaled, true),
+ reflected,
+ }
+ }
+ }
+
+ unsafe fn extract_result<T: ArchOps>(
+ vector: T::Vector,
+ reflected: bool,
+ ops: &T,
+ ) -> Self::Value {
+ let [low, _high] = ops.extract_u64s(vector);
+ if reflected {
+ // Reflected: extract from appropriate position
+ ((low >> 32) & 0xFFFF) as u16
+ } else {
+ // Forward: scale back from 32 bits
+ ((low >> 48) & 0xFFFF) as u16
+ }
+ }
+
+ // fold_16, fold_width, barrett_reduction delegate to CRC-32 implementations
+ // with appropriate value scaling
+}
+```
+
+### 4. Architecture Dispatcher Update (`src/arch/mod.rs`)
+
+Update the dispatcher to handle width=16:
+
+```rust
+pub(crate) unsafe fn update(state: u64, bytes: &[u8], params: &CrcParams) -> u64 {
+ match params.width {
+ 16 => algorithm::update::<_, Width16>(state as u16, bytes, params, ops) as u64,
+ 32 => algorithm::update::<_, Width32>(state as u32, bytes, params, ops) as u64,
+ 64 => algorithm::update::<_, Width64>(state, bytes, params, ops),
+ _ => panic!("Unsupported CRC width: {}", params.width),
+ }
+}
+```
+
+### 5. CRC-16 Constants (`src/crc16/consts.rs`)
+
+Update the existing stub with complete constants:
+
+```rust
+pub const CRC16_IBM_SDLC: CrcParams = CrcParams {
+ name: NAME_CRC16_IBM_SDLC,
+ algorithm: CrcAlgorithm::Crc16IbmSdlc,
+ width: 16,
+ poly: 0x1021,
+ init: 0xFFFF,
+ refin: true,
+ refout: true,
+ xorout: 0xFFFF,
+ check: 0x906E,
+ keys: CrcKeysStorage::from_keys_fold_256(KEYS_1021_REVERSE),
+};
+
+pub const CRC16_T10_DIF: CrcParams = CrcParams {
+ name: NAME_CRC16_T10_DIF,
+ algorithm: CrcAlgorithm::Crc16T10Dif,
+ width: 16,
+ poly: 0x8BB7,
+ init: 0x0000,
+ refin: false,
+ refout: false,
+ xorout: 0x0000,
+ check: 0xD0DB,
+ keys: CrcKeysStorage::from_keys_fold_256(KEYS_8BB7_FORWARD),
+};
+```
+
+## Data Models
+
+### CRC-16 Polynomial Representation
+
+| Variant | Polynomial | Scaled Polynomial (32-bit) | Reflected Polynomial |
+|---------|------------|---------------------------|---------------------|
+| T10-DIF | 0x8BB7 | 0x18BB70000 | N/A (forward) |
+| IBM-SDLC | 0x1021 | 0x110210000 | 0x10811 |
+
+### Key Array Structure
+
+The 23-key array structure remains unchanged:
+
+| Index | Purpose | CRC-16 Value |
+|-------|---------|--------------|
+| 0 | Unused | 0 |
+| 1-2 | 16-byte fold (32*3, 32*5) | Computed |
+| 3-4 | 128-byte fold (32*31, 32*33) | Computed |
+| 5-6 | Short fold (32*3, 32*2) | Computed |
+| 7 | μ (Barrett constant) | Computed |
+| 8 | Polynomial | Scaled poly |
+| 9-20 | Progressive fold distances | Computed |
+| 21-22 | 256-byte fold (32*63, 32*65) | Computed |
+
+
+
+## Correctness Properties
+
+*A property is a characteristic or behavior that should hold true across all valid executions of a system—essentially, a formal statement about what the system should do. Properties serve as the bridge between human-readable specifications and machine-verifiable correctness guarantees.*
+
+### Property 1: Forward CRC-16 Polynomial Formatting
+
+*For any* 16-bit polynomial value P, when generating the polynomial key for forward (non-reflected) CRC-16, the result SHALL equal `(P << 16) | (1 << 32)`.
+
+**Validates: Requirements 1.5**
+
+### Property 2: Reflected CRC-16 Polynomial Formatting
+
+*For any* 16-bit polynomial value P, when generating the polynomial key for reflected CRC-16, the result SHALL equal `(bit_reverse_16(P) << 1) | 1`.
+
+**Validates: Requirements 1.6**
+
+### Property 3: CRC-16 Computation Matches Reference
+
+*For any* valid CRC-16 parameters (polynomial, init, refin, refout, xorout) and any input byte sequence, the computed CRC-16 checksum SHALL match the result from the `crc` crate reference implementation.
+
+**Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3**
+
+### Property 4: CRC-32 and CRC-64 Backwards Compatibility
+
+*For any* existing CRC-32 or CRC-64 configuration and any input byte sequence, the computed checksum SHALL match the result from the `crc` crate reference implementation, ensuring no regression from CRC-16 changes.
+
+**Validates: Requirements 3.1, 3.2, 3.4**
+
+### Property 5: CRC-16 Checksum Combination Round-Trip
+
+*For any* valid CRC-16 parameters and any two input byte sequences A and B, `checksum_combine(checksum(A), checksum(B), len(B))` SHALL equal `checksum(A + B)`.
+
+**Validates: Requirements 6.4**
+
+## Error Handling
+
+### Invalid Width
+
+When `CrcParams::new()` is called with an unsupported width (not 16, 32, or 64), the function SHALL panic with a descriptive error message.
+
+### Invalid Polynomial
+
+CRC-16 polynomials must fit in 16 bits. If a polynomial larger than 0xFFFF is provided for width=16, the behavior is undefined (caller's responsibility to provide valid parameters).
+
+### Empty Input
+
+Empty input (`&[]`) is valid and SHALL return the initial CRC value XORed with xorout, consistent with existing CRC-32 and CRC-64 behavior.
+
+## Testing Strategy
+
+### Unit Tests
+
+Unit tests will verify specific examples and edge cases:
+
+1. **Check Value Tests**: Verify "123456789" produces correct check values for CRC-16/IBM-SDLC (0x906E) and CRC-16/T10-DIF (0xD0DB)
+2. **Key Generation Tests**: Verify generated keys match reference values in `KEYS_8BB7_FORWARD` and `KEYS_1021_REVERSE`
+3. **Empty Input Tests**: Verify empty input returns expected value
+4. **Constant Definition Tests**: Verify CRC16_IBM_SDLC and CRC16_T10_DIF have correct parameter values
+
+### Property-Based Tests
+
+Property-based tests will use the `proptest` crate (already used in the project) with minimum 100 iterations per property:
+
+1. **Property 1 & 2**: Generate random 16-bit polynomials and verify polynomial key formatting
+2. **Property 3**: Generate random CRC-16 parameters and random byte sequences, compare against `crc` crate
+3. **Property 4**: Use existing CRC-32/64 configurations with random byte sequences, compare against `crc` crate
+4. **Property 5**: Generate random CRC-16 parameters and two random byte sequences, verify combination
+
+### Test Configuration
+
+```rust
+// Property test configuration
+proptest! {
+ #![proptest_config(ProptestConfig::with_cases(100))]
+
+ // Feature: crc16-hardware-acceleration, Property 1: Forward polynomial formatting
+ #[test]
+ fn prop_forward_polynomial_formatting(poly in 0u16..=0xFFFFu16) {
+ let result = crc16_polynomial(poly as u64, false);
+ let expected = ((poly as u64) << 16) | (1u64 << 32);
+ prop_assert_eq!(result, expected);
+ }
+}
+```
+
+### Regression Testing
+
+All existing tests in `src/arch/mod.rs`, `src/test/`, and `tests/` must continue to pass after CRC-16 implementation.
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/prompt.md b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/prompt.md
new file mode 100644
index 0000000..330cc25
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/prompt.md
@@ -0,0 +1,17 @@
+I would like to add hardware accelerated CRC-16 calculations to this Rust library which already has working hardware accelerated CRC-32 and CRC-64 calculations, as well as a working software fallback.
+
+There are reference implementations written in MASM in the `/reference` folder which should be useful when comparing the current algorithm implementation in Rust.
+
+I have also stubbed out known good values in `/crc16` already for both forward and reverse CRC-16 variants, which match the values in `/reference/crc16f` (forward) and `/reference/crc16r` (reverse) exactly. Those values are missing the wide 256-byte folding keys, though, which we must generate, since the reference doesn't include them.
+
+Step one is definitely to update `generate.rs` to properly generate all the CRC-16 folding keys, including the missing 256-byte keys for use with AVX512. The CRC-32 and CRC-64 logic for key generating is working, so we should update it to also generate CRC-16 keys, and test against the known good values in `/reference` and `/crc16`.
+
+Once we're sure key generation is correct, including test coverage, we can begin working on the algorithm changes to support CRC-16 calculation as well. By comparing our existing, working Rust implementations of CRC-32 and CRC-16, plus the working MASM examples for CRC-16, CRC-32, and CRC-64 in the `/reference` folder, we should be able to update our Rust algorithm to also compute CRC-16.
+
+It will be important to pay special attention to not just the algorithm, but any other constants that might differ from CRC-16, CRC-32, and CRC-64, such as the shuffling constants.
+
+We can use the industry standard "123456789" input string to test CRC-16, using the known good check values already established in `/crc16`, as the basis for our tests to ensure we've correctly calculated the CRC-16 values. Do not test any other input strings until the industry standard is to be correctly working.
+
+It's very important that we do not break any of the existing functionality around CRC-32 and CRC-64 calculation while adding CRC-16 support, and that we keep the API totally backwards compatible.
+
+It's also important that, while we focus on the two reference CRC-16 variants, we are able to support all CRC-16 variants, including ones using custom polynomials, just like we do for CRC-32 and CRC-64.
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/requirements.md b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/requirements.md
new file mode 100644
index 0000000..1af50b2
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/requirements.md
@@ -0,0 +1,97 @@
+# Requirements Document
+
+## Introduction
+
+This feature adds hardware-accelerated CRC-16 calculation support to the crc-fast library, which already has working hardware-accelerated CRC-32 and CRC-64 implementations. The implementation will leverage PCLMULQDQ/PMULL SIMD instructions for high-performance CRC-16 computation, supporting any CRC-16 variant (both forward/non-reflected and reflected). While CRC-16/IBM-SDLC and CRC-16/T10-DIF serve as reference variants for initial validation, the final implementation must support custom CRC-16 variants with arbitrary polynomials, just like the existing CRC-32 and CRC-64 support. The feature must maintain full backwards compatibility with existing CRC-32 and CRC-64 functionality.
+
+## Glossary
+
+- **CRC-16**: A 16-bit Cyclic Redundancy Check algorithm used for error detection
+- **Key_Generator**: The module responsible for generating PCLMULQDQ folding keys from CRC polynomials
+- **Folding_Keys**: Precomputed constants (x^n mod P(x)) used for parallel CRC computation via PCLMULQDQ
+- **PCLMULQDQ**: Intel's carryless multiplication instruction used for hardware-accelerated CRC computation
+- **PMULL**: ARM's polynomial multiplication instruction, equivalent to PCLMULQDQ
+- **Forward_CRC**: A CRC variant where data is processed MSB-first (refin=false)
+- **Reflected_CRC**: A CRC variant where data is processed LSB-first (refin=true)
+- **CRC-16/T10-DIF**: A forward (non-reflected) CRC-16 variant with polynomial 0x8BB7
+- **CRC-16/IBM-SDLC**: A reflected CRC-16 variant with polynomial 0x1021
+- **Barrett_Reduction**: An algorithm for fast modular reduction without division, used in final CRC computation
+- **Mu_Constant**: The Barrett reduction constant (μ = floor(x^64/P(x))) used for final reduction
+- **Algorithm_Module**: The SIMD-based CRC calculation module that processes data using folding keys
+- **Check_Value**: The expected CRC result for the industry standard test string "123456789"
+- **256-Byte_Folding_Keys**: Extended folding keys (indices 21-22) for AVX-512 VPCLMULQDQ 256-byte chunk processing
+
+## Requirements
+
+### Requirement 1: CRC-16 Key Generation
+
+**User Story:** As a library maintainer, I want the key generator to produce correct CRC-16 folding keys for any CRC-16 polynomial, so that hardware-accelerated CRC-16 computation produces correct results for all variants.
+
+#### Acceptance Criteria
+
+1. WHEN the Key_Generator receives a 16-bit polynomial and forward reflection mode, THE Key_Generator SHALL produce folding keys that match the reference values in KEYS_8BB7_FORWARD for CRC-16/T10-DIF
+2. WHEN the Key_Generator receives a 16-bit polynomial and reflected mode, THE Key_Generator SHALL produce folding keys that match the reference values in KEYS_1021_REVERSE for CRC-16/IBM-SDLC
+3. WHEN generating CRC-16 keys for any 16-bit polynomial, THE Key_Generator SHALL use exponents based on 32-bit distances (32*N) matching the CRC-32 exponent pattern
+4. WHEN generating the Mu_Constant for any CRC-16 polynomial, THE Key_Generator SHALL compute floor(x^64/P(x)) where P(x) is the 17-bit polynomial (16-bit poly with implicit leading 1)
+5. WHEN generating the polynomial key for any forward CRC-16, THE Key_Generator SHALL shift the polynomial left by 16 bits and set bit 32
+6. WHEN generating the polynomial key for any reflected CRC-16, THE Key_Generator SHALL bit-reverse the 16-bit polynomial, shift left by 1, and set the LSB
+7. WHEN generating 256-byte folding keys (indices 21-22) for any CRC-16 polynomial, THE Key_Generator SHALL compute keys for distances 32*63 and 32*65 bits
+
+### Requirement 2: CRC-16 Algorithm Implementation
+
+**User Story:** As a developer, I want to compute CRC-16 checksums using hardware acceleration for any CRC-16 variant, so that I can achieve high-performance CRC-16 calculations.
+
+#### Acceptance Criteria
+
+1. WHEN computing CRC-16 for the industry standard string "123456789", THE Algorithm_Module SHALL produce the Check_Value 0x906E for CRC-16/IBM-SDLC
+2. WHEN computing CRC-16 for the industry standard string "123456789", THE Algorithm_Module SHALL produce the Check_Value 0xD0DB for CRC-16/T10-DIF
+3. WHEN processing data for any forward CRC-16 variant, THE Algorithm_Module SHALL byte-reflect input data using pshufb before folding operations
+4. WHEN processing data for any reflected CRC-16 variant, THE Algorithm_Module SHALL process input data without byte reflection
+5. WHEN performing the final Barrett reduction for any CRC-16 variant, THE Algorithm_Module SHALL extract the 16-bit result from the appropriate register position
+6. WHEN the initial CRC value is provided for any forward CRC-16 variant, THE Algorithm_Module SHALL scale it to 32 bits by shifting left 16 bits before processing
+7. WHEN the final CRC is computed for any forward CRC-16 variant, THE Algorithm_Module SHALL scale the result back to 16 bits by shifting right 16 bits
+
+### Requirement 3: Backwards Compatibility
+
+**User Story:** As an existing library user, I want CRC-32 and CRC-64 functionality to remain unchanged, so that my existing code continues to work correctly.
+
+#### Acceptance Criteria
+
+1. WHEN computing CRC-32 checksums after CRC-16 support is added, THE Algorithm_Module SHALL produce identical results to the current implementation
+2. WHEN computing CRC-64 checksums after CRC-16 support is added, THE Algorithm_Module SHALL produce identical results to the current implementation
+3. WHEN using the existing public API functions (checksum, Digest, checksum_combine), THE API SHALL maintain the same function signatures and behavior
+4. WHEN generating CRC-32 or CRC-64 keys, THE Key_Generator SHALL produce identical keys to the current implementation
+
+### Requirement 4: Test Coverage
+
+**User Story:** As a library maintainer, I want comprehensive tests for CRC-16 functionality, so that I can ensure correctness and prevent regressions.
+
+#### Acceptance Criteria
+
+1. WHEN testing CRC-16 key generation, THE Test_Suite SHALL verify generated keys match the known good reference values from the reference implementation
+2. WHEN testing CRC-16 computation, THE Test_Suite SHALL verify the Check_Value for the industry standard "123456789" string for both CRC-16/IBM-SDLC and CRC-16/T10-DIF
+3. WHEN testing CRC-16 computation, THE Test_Suite SHALL compare results against the `crc` crate reference implementation for various input sizes
+4. WHEN testing backwards compatibility, THE Test_Suite SHALL verify all existing CRC-32 and CRC-64 tests continue to pass
+
+### Requirement 5: CRC-16 Constants and Parameters
+
+**User Story:** As a library maintainer, I want properly defined CRC-16 constants and parameters, so that the implementation is consistent with industry standards and supports custom variants.
+
+#### Acceptance Criteria
+
+1. THE CRC-16 module SHALL define CRC16_IBM_SDLC with polynomial 0x1021, init 0xFFFF, refin=true, refout=true, xorout=0xFFFF, check=0x906E
+2. THE CRC-16 module SHALL define CRC16_T10_DIF with polynomial 0x8BB7, init 0x0000, refin=false, refout=false, xorout=0x0000, check=0xD0DB
+3. WHEN storing CRC-16 parameters, THE CrcParams structure SHALL use width=16 to distinguish from CRC-32 and CRC-64 variants
+4. THE CRC-16 module SHALL include SIMD constants (smask, mask1, mask2) appropriate for 16-bit CRC computation
+5. WHEN creating custom CRC-16 parameters via CrcParams::new(), THE Key_Generator SHALL dynamically generate folding keys for the provided polynomial
+
+### Requirement 6: Custom CRC-16 Variant Support
+
+**User Story:** As a developer, I want to use custom CRC-16 parameters with any polynomial, so that I can compute CRC-16 checksums for non-standard variants.
+
+#### Acceptance Criteria
+
+1. WHEN CrcParams::new() is called with width=16 and any valid polynomial, THE system SHALL generate correct folding keys for that polynomial
+2. WHEN checksum_with_params() is called with custom CRC-16 parameters, THE Algorithm_Module SHALL compute the correct CRC-16 checksum
+3. WHEN Digest::new_with_params() is called with custom CRC-16 parameters, THE Digest SHALL correctly accumulate and finalize CRC-16 checksums
+4. WHEN checksum_combine_with_params() is called with custom CRC-16 parameters, THE system SHALL correctly combine two CRC-16 checksums
diff --git b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/tasks.md b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/tasks.md
new file mode 100644
index 0000000..5e1581b
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/crc16-hardware-acceleration/tasks.md
@@ -0,0 +1,137 @@
+# Implementation Plan: CRC-16 Hardware Acceleration
+
+## Overview
+
+This implementation adds hardware-accelerated CRC-16 support to the crc-fast library in two phases: first extending the key generator, then extending the algorithm module. The implementation leverages the existing CRC-32 infrastructure by scaling CRC-16 values to 32-bit space.
+
+## Tasks
+
+- [x] 1. Extend Key Generator for CRC-16
+ - [x] 1.1 Add CRC-16 exponents constant and update keys() function
+ - Add `CRC16_EXPONENTS` constant (same as CRC32_EXPONENTS)
+ - Update `keys()` function to handle width=16
+ - Update `key()` function to dispatch to `crc16_key()`
+ - _Requirements: 1.3_
+
+ - [x] 1.2 Implement crc16_key() function
+ - Compute x^exponent mod P(x) for 17-bit CRC-16 polynomial
+ - Handle both forward and reflected modes
+ - Follow the pattern from reference/crc16f/crc16fg.cpp and reference/crc16r/crc16rg.cpp
+ - _Requirements: 1.1, 1.2, 1.7_
+
+ - [x] 1.3 Implement crc16_mu() function
+ - Compute Barrett reduction constant floor(x^64/P(x))
+ - Handle both forward and reflected modes
+ - _Requirements: 1.4_
+
+ - [x] 1.4 Implement crc16_polynomial() function
+ - Format polynomial for forward mode: (poly << 16) | (1 << 32)
+ - Format polynomial for reflected mode: (bit_reverse_16(poly) << 1) | 1
+ - _Requirements: 1.5, 1.6_
+
+ - [x] 1.5 Write property tests for CRC-16 key generation
+ - **Property 1: Forward polynomial formatting**
+ - **Property 2: Reflected polynomial formatting**
+ - **Validates: Requirements 1.5, 1.6**
+
+ - [x] 1.6 Add unit tests for CRC-16 key generation
+ - Test generated keys match KEYS_8BB7_FORWARD for CRC-16/T10-DIF
+ - Test generated keys match KEYS_1021_REVERSE for CRC-16/IBM-SDLC
+ - Add CRC-16 test configs to TEST_ALL_CONFIGS
+ - _Requirements: 1.1, 1.2, 4.1_
+
+- [x] 2. Checkpoint - Verify key generation
+ - Ensure all tests pass, ask the user if questions arise.
+
+- [x] 3. Update CRC-16 Constants and Parameters
+ - [x] 3.1 Update src/crc16/consts.rs with complete constants
+ - Update KEYS_8BB7_FORWARD with 256-byte folding keys (indices 21-22)
+ - Update KEYS_1021_REVERSE with 256-byte folding keys (indices 21-22)
+ - Add SIMD_CONSTANTS if different from CRC-32
+ - _Requirements: 5.1, 5.2, 5.4_
+
+ - [x] 3.2 Add Width16 struct to src/structs.rs
+ - Implement CrcWidth trait for Width16
+ - _Requirements: 5.3_
+
+ - [x] 3.3 Update CrcAlgorithm enum and CrcParams::new()
+ - Add Crc16Custom variant to CrcAlgorithm enum
+ - Update CrcParams::new() to handle width=16
+ - Update cache module if needed for CRC-16 key caching
+ - _Requirements: 5.5, 6.1_
+
+- [x] 4. Implement CRC-16 Algorithm
+ - [x] 4.1 Create src/crc16/algorithm.rs with EnhancedCrcWidth implementation
+ - Implement EnhancedCrcWidth for Width16
+ - Implement create_state() with proper scaling for forward mode
+ - Implement extract_result() with proper scaling
+ - Implement fold_16(), fold_width(), barrett_reduction()
+ - Implement create_coefficient() and perform_final_reduction()
+ - Implement get_last_bytes_table_ptr()
+ - _Requirements: 2.3, 2.4, 2.5, 2.6, 2.7_
+
+ - [x] 4.2 Implement process_0_to_15 for CRC-16
+ - Handle small inputs (0-15 bytes) for CRC-16
+ - Follow pattern from crc32/algorithm.rs
+ - _Requirements: 2.1, 2.2_
+
+ - [x] 4.3 Update architecture dispatcher for CRC-16
+ - Update src/arch/mod.rs to handle width=16
+ - Route to Width16 implementation
+ - _Requirements: 2.1, 2.2_
+
+ - [x] 4.4 Update software fallback for CRC-16
+ - Update src/arch/software.rs to handle CRC-16 algorithms
+ - Add CRC-16 reference implementations from crc crate
+ - _Requirements: 2.1, 2.2_
+
+- [x] 5. Checkpoint - Verify basic CRC-16 computation
+ - Ensure all tests pass, ask the user if questions arise.
+
+- [x] 6. Add Public API Support for CRC-16
+ - [x] 6.1 Update src/lib.rs checksum() function
+ - Add cases for Crc16IbmSdlc and Crc16T10Dif
+ - _Requirements: 2.1, 2.2_
+
+ - [x] 6.2 Update Digest and other public APIs
+ - Ensure Digest works with CRC-16 algorithms
+ - Ensure checksum_combine works with CRC-16
+ - _Requirements: 6.2, 6.3, 6.4_
+
+- [-] 7. Add Comprehensive Tests
+ - [x] 7.1 Add CRC-16 check value tests
+ - Test "123456789" produces 0x906E for CRC-16/IBM-SDLC
+ - Test "123456789" produces 0xD0DB for CRC-16/T10-DIF
+ - _Requirements: 2.1, 2.2, 4.2_
+
+ - [x] 7.2 Write property test for CRC-16 computation matches reference
+ - **Property 3: CRC-16 computation matches reference**
+ - **Validates: Requirements 2.1, 2.2, 5.5, 6.1, 6.2, 6.3**
+
+ - [x] 7.3 Write property test for backwards compatibility
+ - **Property 4: CRC-32 and CRC-64 backwards compatibility**
+ - **Validates: Requirements 3.1, 3.2, 3.4**
+
+ - [x] 7.4 Write property test for CRC-16 checksum combination
+ - **Property 5: CRC-16 checksum combination round-trip**
+ - **Validates: Requirements 6.4**
+
+ - [x] 7.5 Add CRC-16 to existing test suites
+ - Add CRC-16 configs to TEST_ALL_CONFIGS in src/test/consts.rs
+ - Ensure all length-based tests include CRC-16
+ - _Requirements: 4.3, 4.4_
+
+- [x] 8. Final Checkpoint - Ensure all tests pass
+ - Ensure all tests pass, ask the user if questions arise.
+ - Run cargo fmt --check
+ - Run cargo clippy -- -D warnings
+ - Run cargo test
+
+## Notes
+
+- Tasks marked with `*` are optional and can be skipped for faster MVP
+- Each task references specific requirements for traceability
+- Checkpoints ensure incremental validation
+- Property tests validate universal correctness properties
+- Unit tests validate specific examples and edge cases
+- The implementation leverages existing CRC-32 infrastructure to minimize code duplication
diff --git b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/design.md b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/design.md
new file mode 100644
index 0000000..68c4a58
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/design.md
@@ -0,0 +1,358 @@
+# Design Document
+
+## Overview
+
+This design implements a future-proof CrcParams structure using an internal enum-based key storage system that can expand to support different key array sizes without breaking compatibility. The approach maintains the simplicity of const definitions while providing safe key access and zero runtime overhead through compiler optimizations.
+
+## Architecture
+
+### Core Components
+
+1. **CrcKeysStorage Enum**: Internal storage that can hold different key array sizes
+2. **CrcParams Structure**: Updated to use CrcKeysStorage internally while maintaining public API
+3. **Safe Accessor Methods**: Bounds-checked key access methods on CrcParams
+4. **Helper Functions**: Const-friendly constructors for CrcKeysStorage variants
+
+### Design Principles
+
+- **Zero Runtime Overhead**: Enum dispatch optimized away by compiler
+- **Backwards Compatibility**: Existing const definitions require minimal changes
+- **Gradual Migration**: Can be implemented in phases without breaking builds
+- **Safety First**: Bounds checking prevents panics from out-of-range access
+
+## Components and Interfaces
+
+### CrcKeysStorage Enum
+
+```rust
+#[derive(Clone, Copy, Debug)]
+enum CrcKeysStorage {
+ /// Current 23-key format (for existing algorithms which includes 256 byte folding distances)
+ KeysFold256([u64; 23]),
+ /// Future 25-key format (for potential future expanded folding distances, for testing purposes only)
+ KeysFutureTest([u64; 25]),
+ // Additional variants can be added as needed
+}
+```
+
+**Key Methods:**
+- `get_key(index: usize) -> u64`: Safe key access with bounds checking
+- `key_count() -> usize`: Returns actual number of keys available
+- `from_keys_fold_256(keys: [u64; 23]) -> Self`: Const constructor for 23-key arrays
+- `from_keys_fold_future_test(keys: [u64; 25]) -> Self`: Const constructor for 25-key arrays
+
+### Updated CrcParams Structure
+
+```rust
+#[derive(Clone, Copy, Debug)]
+pub struct CrcParams {
+ pub algorithm: CrcAlgorithm,
+ pub name: &'static str,
+ pub width: u8,
+ pub poly: u64,
+ pub init: u64,
+ pub refin: bool,
+ pub refout: bool,
+ pub xorout: u64,
+ pub check: u64,
+ pub keys: CrcKeysStorage, // Changed from [u64; 23]
+}
+```
+
+**Key Methods:**
+- `get_key(index: usize) -> u64`: Delegates to CrcKeysStorage
+- `get_key_checked(index: usize) -> Option<u64>`: Optional key access
+- `key_count() -> usize`: Returns actual key count
+
+### Const Definition Pattern
+
+```rust
+// Before (Phase 2):
+pub const CRC32_ISCSI: CrcParams = CrcParams {
+ // ... other fields unchanged ...
+ keys: KEYS_1EDC6F41_REFLECTED, // [u64; 23]
+};
+
+// After (Phase 3):
+pub const CRC32_ISCSI: CrcParams = CrcParams {
+ // ... other fields unchanged ...
+ keys: CrcKeysStorage::from_keys_fold_256(KEYS_1EDC6F41_REFLECTED),
+};
+```
+
+## Data Models
+
+### Key Storage Variants
+
+| Variant | Array Size | Use Case |
+|---------|------------|----------|
+| KeysFold256 | [u64; 23] | Current implementation (128/256-byte folding) |
+| KeysFutureTest | [u64; 25] | Future expansion |
+
+### Migration States
+
+| Phase | CrcParams.keys Type | Architecture Code | Const Definitions |
+|-------|-------------------|------------------|------------------|
+| 1 | [u64; 23] | Direct access | Unchanged |
+| 2 | [u64; 23] | Safe accessors | Unchanged |
+| 3 | CrcKeysStorage | Safe accessors | Updated |
+
+## Error Handling
+
+### Bounds Checking Strategy
+
+1. **Safe Default**: Out-of-bounds key access returns 0 instead of panicking
+2. **Optional Access**: `get_key_checked()` returns `None` for invalid indices
+3. **Graceful Degradation**: Code continues to function with missing keys
+
+### Error Scenarios
+
+| Scenario | Behavior | Rationale |
+|----------|----------|-----------|
+| Access key[30] with 23-key storage | Returns 0 | Allows future expansion without breaking existing code |
+| Invalid key index | Returns 0 | Prevents panics, maintains stability |
+| Empty key storage | Returns 0 for all indices | Defensive programming |
+
+## Testing Strategy
+
+### Unit Tests
+
+1. **CrcKeysStorage Tests**:
+ - Verify correct key storage and retrieval for each variant
+ - Test bounds checking behavior
+ - Validate const constructor functions
+
+2. **CrcParams Integration Tests**:
+ - Verify safe accessor methods work correctly
+ - Test backwards compatibility with existing const definitions
+ - Validate zero runtime overhead through benchmarks
+
+3. **Migration Tests**:
+ - Test each phase independently
+ - Verify existing functionality remains intact
+ - Validate const definition updates
+
+### Compatibility Tests
+
+1. **Third-Party Simulation**:
+ - Create mock third-party const definitions
+ - Verify they continue working through all phases
+ - Test key access patterns used by external code
+
+2. **Performance Tests**:
+ - Benchmark key access performance vs direct array access
+ - Verify compiler optimizations eliminate enum dispatch
+ - Measure memory usage impact
+
+### Integration Tests
+
+1. **Architecture Code Tests**:
+ - Update existing architecture tests to use safe accessors
+ - Verify SIMD operations work correctly with new key access
+ - Test folding operations across different key storage variants
+
+2. **End-to-End Tests**:
+ - Verify CRC calculations remain correct after migration
+ - Test custom CrcParams creation and usage
+ - Validate `get-custom-params` binary output
+
+## Implementation Phases
+
+### Phase 1: Add New Types
+- Add CrcKeysStorage enum to codebase
+- Add helper methods to CrcParams (delegating to existing keys field)
+- Maintain existing [u64; 23] field for compatibility
+- All tests continue to pass
+
+### Phase 2: Update Architecture Code
+- Replace direct key array access with safe accessor methods
+- Update SIMD and folding code to use `params.get_key(index)`
+- Maintain backwards compatibility
+- Performance remains identical
+
+### Phase 3: Switch to New Storage
+- Change CrcParams.keys field from [u64; 23] to CrcKeysStorage
+- Update all const definitions to use CrcKeysStorage::from_keys_23()
+- Update `get-custom-params` binary output format
+- This is the only breaking change, but minimal impact
+
+## Performance Considerations
+
+### Compiler Optimizations
+
+The Rust compiler optimizes enum dispatch when:
+1. All variants have the same access pattern
+2. The enum is used in hot paths with predictable patterns
+3. Inlining is enabled for accessor methods
+
+Expected assembly output for `params.get_key(21)`:
+```assembly
+; Same as direct array access keys[21]
+mov rax, qword ptr [rdi + 168 + 21*8]
+```
+
+### Memory Layout
+
+| Storage Type | Memory Usage | Alignment |
+|--------------|--------------|-----------|
+| KeysFold256 | 184 bytes | 8-byte aligned |
+| KeysFutureTest | 200 bytes | 8-byte aligned |
+| Enum overhead | 0 bytes | (optimized away) |
+
+## FFI Future-Proofing Design
+
+### Problem Analysis
+
+The current C FFI interface has several limitations:
+1. **Fixed Key Array**: `CrcFastParams` struct uses `uint64_t keys[23]` hardcoded
+2. **No Expansion Path**: Cannot support future key variants with different sizes
+3. **Conversion Limitation**: `to_keys_array_23()` only works for current 23-key variant
+
+### FFI Design Solution
+
+Since the current FFI hasn't shipped yet, we can make it truly future-proof from the start using a pointer-based approach that can handle any number of keys.
+
+#### Truly Future-Proof CrcFastParams Structure
+
+```c
+// Completely future-proof structure using pointer to keys
+typedef struct CrcFastParams {
+ enum CrcFastAlgorithm algorithm;
+ uint8_t width;
+ uint64_t poly;
+ uint64_t init;
+ bool refin;
+ bool refout;
+ uint64_t xorout;
+ uint64_t check;
+ uint32_t key_count; // Number of keys available
+ const uint64_t *keys; // Pointer to keys array (managed by Rust)
+} CrcFastParams;
+```
+
+#### Key Management Strategy
+
+1. **Rust-Managed Memory**: Keys remain in Rust-managed memory
+2. **Stable Pointers**: Use Box::leak or static storage for stable pointers
+3. **Automatic Cleanup**: Rust handles memory management transparently
+4. **No Size Limits**: Can support any number of keys (23, 25, 50, 100+)
+
+#### Internal Implementation
+
+```rust
+// Helper to create stable key pointers
+fn create_stable_key_pointer(keys: &CrcKeysStorage) -> *const u64 {
+ match keys {
+ CrcKeysStorage::KeysFold256(keys) => keys.as_ptr(),
+ CrcKeysStorage::KeysFutureTest(keys) => keys.as_ptr(),
+ // Future variants automatically supported
+ }
+}
+
+impl From<CrcParams> for CrcFastParams {
+ fn from(params: CrcParams) -> Self {
+ CrcFastParams {
+ algorithm: params.algorithm.into(),
+ width: params.width,
+ poly: params.poly,
+ init: params.init,
+ refin: params.refin,
+ refout: params.refout,
+ xorout: params.xorout,
+ check: params.check,
+ key_count: params.key_count() as u32,
+ keys: create_stable_key_pointer(&params.keys),
+ }
+ }
+}
+
+impl From<CrcFastParams> for CrcParams {
+ fn from(value: CrcFastParams) -> Self {
+ // Convert C array back to appropriate CrcKeysStorage
+ let keys = unsafe {
+ std::slice::from_raw_parts(value.keys, value.key_count as usize)
+ };
+
+ let storage = match value.key_count {
+ 23 => CrcKeysStorage::from_keys_fold_256(
+ keys.try_into().expect("Invalid key count for fold_256")
+ ),
+ 25 => CrcKeysStorage::from_keys_fold_future_test(
+ keys.try_into().expect("Invalid key count for future_test")
+ ),
+ _ => panic!("Unsupported key count: {}", value.key_count),
+ };
+
+ CrcParams {
+ algorithm: value.algorithm.into(),
+ name: "custom",
+ width: value.width,
+ poly: value.poly,
+ init: value.init,
+ refin: value.refin,
+ refout: value.refout,
+ xorout: value.xorout,
+ check: value.check,
+ keys: storage,
+ }
+ }
+}
+```
+
+#### Enhanced FFI Functions
+
+```rust
+#[no_mangle]
+pub extern "C" fn crc_fast_get_custom_params(...) -> CrcFastParams {
+ let params = CrcParams::new(...);
+ params.into() // Automatic conversion
+}
+```
+
+#### Benefits of This Approach
+
+1. **Truly Future-Proof**: No hardcoded limits, supports any key count
+2. **Zero Copy**: Keys remain in original Rust memory, just expose pointer
+3. **Memory Safe**: Rust manages memory, C gets stable pointers
+4. **Performance**: Direct pointer access, no copying overhead
+5. **Automatic Support**: New CrcKeysStorage variants automatically work
+6. **Idiomatic C**: Direct array access pattern familiar to C developers
+
+#### C Usage Pattern
+
+```c
+// Get custom parameters
+CrcFastParams params = crc_fast_get_custom_params(...);
+
+// Direct access with bounds checking (C developer responsibility)
+for (uint32_t i = 0; i < params.key_count; i++) {
+ uint64_t key = params.keys[i];
+ // Use key...
+}
+
+// Or access specific keys directly
+uint64_t key21 = params.keys[21]; // Direct access (if bounds known)
+```
+
+## Security Considerations
+
+### Bounds Safety
+
+The new design eliminates array bounds panics, which could be exploited in unsafe contexts. Safe key access prevents:
+- Buffer overflow attacks through malicious key indices
+- Denial of service through panic-induced crashes
+- Information disclosure through out-of-bounds memory access
+
+### FFI Safety
+
+The enhanced FFI design adds additional safety measures:
+- **Key Count Validation**: V2 functions validate key_count before conversion
+- **Buffer Bounds**: 32-key buffer prevents overflow while allowing future expansion
+- **Graceful Degradation**: Invalid key counts return error codes instead of panicking
+
+### Const Safety
+
+All const definitions remain compile-time validated, preventing:
+- Runtime key generation vulnerabilities
+- Dynamic key modification attacks
+- Timing-based side-channel attacks on key access
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/requirements.md b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/requirements.md
new file mode 100644
index 0000000..6627b04
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/requirements.md
@@ -0,0 +1,86 @@
+# Requirements Document
+
+## Introduction
+
+This feature implements a future-proof CrcParams structure that can expand to support additional folding keys (for example, larger folding distances) without breaking API compatibility for third-party applications. The solution maintains the simplicity of const definitions while providing safe key access and internal flexibility for future expansion.
+
+## Requirements
+
+### Requirement 1
+
+**User Story:** As a library maintainer, I want to expand CRC folding key support from 23 to 24+ keys for potentially larger folding distances in the future, so that I can improve performance for large data processing.
+
+#### Acceptance Criteria
+
+1. WHEN I add support for larger folding distances THEN existing third-party applications with hardcoded 23-key CrcParams SHALL continue to compile and function correctly
+2. WHEN I expand key arrays from 23 to 24+ elements THEN existing const definitions SHALL require minimal changes (only the keys field)
+
+### Requirement 2
+
+**User Story:** As a third-party application developer, I want to define custom CrcParams as const definitions, so that I can embed CRC configurations directly in my code without runtime overhead.
+
+#### Acceptance Criteria
+
+1. WHEN I define a custom CrcParams const THEN I SHALL be able to use the same simple struct literal syntax as currently exists
+2. WHEN I access CRC keys through the CrcParams interface THEN the performance SHALL be identical to direct array access (zero runtime overhead)
+3. WHEN the library expands key support THEN my existing const definitions SHALL continue to work without modification
+
+### Requirement 3
+
+**User Story:** As a library maintainer, I want safe key access methods that prevent array bounds panics, so that the library is robust against future expansion and misuse.
+
+#### Acceptance Criteria
+
+1. WHEN architecture code accesses CRC keys THEN it SHALL use bounds-checked methods instead of direct array indexing
+2. WHEN code requests key count information THEN it SHALL receive the actual number of available keys for that CrcParams instance
+
+### Requirement 4
+
+**User Story:** As a library maintainer, I want internal flexibility to support different key array sizes, so that I can optimize different CRC algorithms with varying folding distance requirements.
+
+#### Acceptance Criteria
+
+1. WHEN I create CrcParams with 23 keys THEN the system SHALL store and access exactly 23 keys efficiently
+2. WHEN I create CrcParams with 25 keys THEN the system SHALL store and access exactly 25 keys efficiently
+4. WHEN the compiler optimizes the code THEN enum dispatch for key access SHALL be eliminated (zero runtime overhead)
+
+### Requirement 5
+
+**User Story:** As a library maintainer, I want to migrate existing code gradually, so that I can implement the changes in phases without breaking the build at any point.
+
+#### Acceptance Criteria
+
+1. WHEN I add the new CrcKeysStorage types THEN existing code SHALL continue to compile and function
+2. WHEN I update architecture code to use safe accessors THEN the change SHALL be backward compatible
+3. WHEN I switch CrcParams to use CrcKeysStorage THEN the migration SHALL require only updating const definitions
+4. WHEN each phase is complete THEN all existing tests SHALL continue to pass
+
+### Requirement 6
+
+**User Story:** As a third-party application developer, I want the `get-custom-params` binary to output the updated `CrcParams` const definition using the new key storage approach, so that I can easily generate future-proof custom CRC parameter definitions.
+
+#### Acceptance Criteria
+
+1. WHEN I run the `get-custom-params` binary THEN it SHALL output CrcParams const definitions using CrcKeysStorage::from_keys_fold_256()
+2. WHEN I copy the generated const definition THEN it SHALL compile and work correctly with the new CrcParams structure
+3. WHEN the output format changes THEN the generated code SHALL remain compatible with the current CrcParams API
+
+### Requirement 7
+
+**User Story:** As a C/C++ application developer, I want the FFI interface to be future-proof for key expansion, so that my applications can benefit from future performance improvements without requiring code changes.
+
+#### Acceptance Criteria
+
+1. WHEN the library adds support for larger key arrays THEN existing C code using CrcFastParams SHALL continue to compile and function correctly
+2. WHEN I create custom CRC parameters in C THEN I SHALL be able to specify the key count and keys dynamically
+3. WHEN I access CRC functionality through the C API THEN the performance SHALL remain identical to direct Rust usage
+
+### Requirement 8
+
+**User Story:** As a library maintainer, I want the C FFI interface to support different key array sizes internally, so that C users can benefit from future CRC algorithm improvements.
+
+#### Acceptance Criteria
+
+1. WHEN I add new CrcKeysStorage variants with different key counts THEN the C API SHALL automatically support them
+2. WHEN C code specifies custom key arrays THEN they SHALL be automatically converted to the appropriate internal storage format
+3. WHEN C code queries key information THEN it SHALL receive accurate key count and key data for the specific CRC algorithm being used
diff --git b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/tasks.md b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/tasks.md
new file mode 100644
index 0000000..1005cb5
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/future-proof-crc-params/tasks.md
@@ -0,0 +1,122 @@
+# Implementation Plan
+
+- [x] 1. Phase 1: Add CrcKeysStorage enum and helper methods
+ - Add CrcKeysStorage enum with KeysFold256 and KeysFutureTest variants
+ - Implement get_key() and key_count() methods on CrcKeysStorage
+ - Add const constructor methods from_keys_fold_256() and from_keys_fold_future_test()
+ - Add safe accessor methods to CrcParams that delegate to existing keys field
+ - Write comprehensive unit tests for CrcKeysStorage functionality
+ - _Requirements: 4.1, 4.2, 4.4, 5.1_
+
+- [x] 2. Phase 2: Update architecture code to use safe accessors
+ - [x] 2.1 Update SIMD folding code in src/arch/ to use params.get_key()
+ - Replace direct keys[index] access with params.get_key(index) in algorithm.rs
+ - Update VPCLMULQDQ code to use safe key access methods
+ - Update aarch64 and x86 architecture-specific code
+ - _Requirements: 3.1, 5.2_
+
+ - [x] 2.2 Update CRC32 algorithm code to use safe accessors
+ - Modify src/crc32/algorithm.rs to use params.get_key() instead of keys[index]
+ - Update fusion code in src/crc32/fusion/ if it accesses keys directly
+ - _Requirements: 3.1, 5.2_
+
+ - [x] 2.3 Update CRC64 algorithm code to use safe accessors
+ - Modify src/crc64/algorithm.rs to use params.get_key() instead of keys[index]
+ - Update any other CRC64-specific code that accesses keys directly
+ - _Requirements: 3.1, 5.2_
+
+ - [x] 2.4 Run performance benchmarks to verify zero overhead
+ - Benchmark key access performance before and after changes
+ - Verify compiler optimizations eliminate any performance regression
+ - Document that performance remains identical to direct array access
+ - _Requirements: 2.2, 4.4_
+
+- [x] 3. Phase 3: Switch CrcParams to use CrcKeysStorage
+ - [x] 3.1 Update CrcParams struct definition
+ - Change keys field from [u64; 23] to CrcKeysStorage
+ - Update CrcParams accessor methods to delegate to CrcKeysStorage
+ - Remove temporary delegation methods added in Phase 1
+ - _Requirements: 5.3_
+
+ - [x] 3.2 Update all CRC32 const definitions
+ - Update src/crc32/consts.rs to use CrcKeysStorage::from_keys_fold_256()
+ - Modify all CRC32_* const definitions to use new key storage format
+ - Ensure all existing key arrays are properly wrapped
+ - _Requirements: 1.2, 2.1_
+
+ - [x] 3.3 Update all CRC64 const definitions
+ - Update src/crc64/consts.rs to use CrcKeysStorage::from_keys_fold_256()
+ - Modify all CRC64_* const definitions to use new key storage format
+ - Ensure all existing key arrays are properly wrapped
+ - _Requirements: 1.2, 2.1_
+
+ - [x] 3.4 Update get-custom-params binary output
+ - Modify src/bin/get-custom-params.rs to output CrcKeysStorage format
+ - Update output template to use CrcKeysStorage::from_keys_fold_256()
+ - Test that generated const definitions compile and work correctly
+ - _Requirements: 6.1, 6.2, 6.3_
+
+ - [x] 3.5 Update cache system for new CrcParams structure
+ - Modify src/cache.rs to work with CrcKeysStorage-based CrcParams
+ - Update CrcParams::new() method to use new key storage format
+ - Ensure cache functionality remains intact after structural changes
+ - _Requirements: 2.3, 5.3_
+
+- [x] 4. Create comprehensive test suite for future-proof functionality
+ - [x] 4.1 Add unit tests for bounds checking behavior
+ - Test that get_key() returns 0 for out-of-bounds indices
+ - Test that get_key_checked() returns None for invalid indices
+ - Verify key_count() returns correct values for different storage variants
+ - _Requirements: 3.2_
+
+ - [x] 4.2 Add integration tests for third-party compatibility
+ - Create mock third-party const definitions using new format
+ - Test that existing key access patterns continue to work
+ - Verify backwards compatibility throughout migration phases
+ - _Requirements: 1.1, 2.3_
+
+ - [x] 4.3 Add performance regression tests
+ - Benchmark CRC calculation performance before and after changes
+ - Verify that key access performance matches direct array access
+ - Test memory usage impact of enum-based storage
+ - _Requirements: 2.2, 4.4_
+
+ - [x] 4.4 Add future expansion simulation tests
+ - Create test CrcParams using KeysFutureTest variant with 25 keys
+ - Test that code gracefully handles different key array sizes
+ - Verify that expansion to larger key arrays works as designed
+ - _Requirements: 1.1, 4.2_
+
+- [x] 5. Validate migration and run full test suite
+ - Run cargo test to ensure all existing tests pass
+ - Run cargo clippy to ensure code quality standards
+ - Run cargo fmt to ensure consistent formatting
+ - Verify that all CRC calculations produce identical results
+ - Test that third-party usage patterns remain functional
+ - _Requirements: 5.4_
+
+- [x] 6. Implement FFI future-proofing for C/C++ compatibility
+ - [x] 6.1 Update CrcFastParams struct to use pointer-based keys
+ - Change keys field from [u64; 23] to const uint64_t *keys pointer
+ - Add key_count field to track number of available keys
+ - Update From<CrcFastParams> and From<CrcParams> conversion implementations
+ - _Requirements: 7.2, 8.1_
+
+ - [x] 6.2 Implement stable key pointer management
+ - Add create_stable_key_pointer() helper function for CrcKeysStorage
+ - Ensure key pointers remain valid for the lifetime of CrcFastParams
+ - Handle memory management safely between Rust and C boundaries
+ - _Requirements: 8.2, 8.3_
+
+ - [x] 6.3 Update FFI functions to use new CrcFastParams structure
+ - Update existing FFI functions to use new pointer-based CrcFastParams
+ - Ensure all FFI functions handle variable key counts correctly
+ - Test conversion between CrcKeysStorage variants and C pointer access
+ - _Requirements: 7.1, 7.3_
+
+ - [x] 6.4 Update C header file and add comprehensive FFI tests
+ - Update CrcFastParams struct definition in libcrc_fast.h to use pointer
+ - Create FFI tests for direct pointer access with different key counts
+ - Test future expansion scenarios with different key counts (23, 25, etc.)
+ - Verify memory safety and pointer stability across FFI boundary
+ - _Requirements: 7.1, 8.1_
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/design.md b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/design.md
new file mode 100644
index 0000000..7ac3181
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/design.md
@@ -0,0 +1,402 @@
+# Design Document
+
+## Overview
+
+This design implements a GitHub Actions workflow that automatically builds and publishes binary packages when version tags are pushed to the repository. The workflow leverages the existing test infrastructure, builds optimized binaries for five target platforms, packages them according to platform conventions, and uploads them as GitHub release assets.
+
+The solution uses a single workflow file that orchestrates testing, building, packaging, and publishing steps. It reuses the existing test workflow to ensure quality gates are met before creating releases.
+
+## Architecture
+
+### Workflow Structure
+
+The release workflow consists of three main stages:
+
+1. **Validation Stage**: Triggers existing test workflow and waits for completion
+2. **Build Stage**: Compiles release binaries for all target platforms in parallel
+3. **Publish Stage**: Creates packages, generates checksums, and uploads to GitHub release
+
+### Workflow Trigger
+
+```yaml
+on:
+ push:
+ tags:
+ - '[0-9]+.[0-9]+.[0-9]+'
+```
+
+This pattern matches semantic version tags like `1.5.0`, `2.0.1`, etc.
+
+### Build Matrix
+
+The workflow uses a matrix strategy to build for multiple platforms:
+
+| Target Triple | OS Runner | Package Extension | Runner Rationale |
+|--------------|-----------|-------------------|------------------|
+| x86_64-unknown-linux-gnu | ubuntu-22.04 | .tar.gz | Native x86_64 Linux runner, explicit version for stability |
+| aarch64-unknown-linux-gnu | ubuntu-22.04-arm | .tar.gz | Native ARM64 Linux runner, explicit version for stability |
+| aarch64-apple-darwin | macos-14 | .tar.gz | Native Apple Silicon runner (M1/M2), explicit version for stability |
+| x86_64-pc-windows-msvc | windows-2022 | .zip | Native x86_64 Windows runner, explicit version for stability |
+| aarch64-pc-windows-msvc | windows-11-arm | .zip | Native ARM64 Windows runner (only ARM64 option available) |
+
+**Runner Selection Rationale**:
+
+#### General Principles
+1. **Native Compilation**: Each runner matches the target architecture for optimal performance and to leverage architecture-specific CPU features (AVX-512, NEON, etc.)
+2. **Binary Compatibility**: Binaries built on older OS versions are forward-compatible with newer versions, but not backward-compatible
+3. **Single Binary Per Architecture**: One binary package per architecture is sufficient due to OS forward compatibility
+4. **Explicit Versions**: Using explicit runner versions (ubuntu-22.04, windows-2022, macos-14) instead of -latest provides stability and predictability, preventing unexpected changes when GitHub updates their -latest pointers
+
+#### Platform-Specific Decisions
+
+**Linux (ubuntu-22.04 for x86_64, ubuntu-22.04-arm for aarch64)**:
+- Explicit version (22.04) ensures consistent build environment over time
+- Ubuntu 22.04 uses glibc 2.35, providing good compatibility with modern distributions
+- Ubuntu binaries have excellent forward compatibility across distributions (Ubuntu, Debian, RHEL, etc.)
+- When ubuntu-latest moves to 24.04 or newer, our release builds remain stable on 22.04
+- No need for multiple Linux versions; one binary per architecture covers the ecosystem
+- Using explicit versions allows intentional upgrades rather than automatic changes
+
+**macOS (macos-14 for aarch64)**:
+- `macos-14` is the first stable Apple Silicon (M1/M2) runner
+- macOS binaries built on older versions run on newer versions (forward compatible)
+- `macos-15` and `macos-latest` would work but offer no compatibility advantage
+- Using `macos-14` provides maximum compatibility (works on macOS 14, 15, and future versions)
+- No x86_64 macOS build needed: Apple Silicon Macs can run x86_64 binaries via Rosetta 2, but native ARM64 is preferred
+- Single ARM64 binary covers all Apple Silicon Macs (M1, M2, M3, M4, etc.)
+
+**Windows (windows-2022 for x86_64, windows-11-arm for aarch64)**:
+- Explicit version (2022) ensures consistent build environment over time
+- Windows Server 2022 binaries have excellent forward compatibility (run on Windows 11, future versions)
+- MSVC runtime is statically linked in Rust release builds, eliminating runtime dependencies
+- When windows-latest moves to Server 2025 or newer, our release builds remain stable on 2022
+- `windows-11-arm` is the only ARM64 Windows runner available (no version choice)
+- Using explicit versions allows intentional upgrades rather than automatic changes
+- No need for multiple Windows versions; one binary per architecture covers the ecosystem
+
+#### Why Not Multiple OS Versions?
+
+**Rejected Approach**: Building separate packages for each OS version (e.g., macos-14, macos-15, ubuntu-22.04, ubuntu-24.04)
+
+**Reasons**:
+1. **Forward Compatibility**: Binaries built on older OS versions work on newer versions
+2. **Maintenance Burden**: Multiple packages per architecture increases complexity without benefit
+3. **User Confusion**: Users would need to choose between multiple packages for the same architecture
+4. **Storage Costs**: More packages means more storage and bandwidth
+5. **Testing Overhead**: The existing test workflow already validates across multiple OS versions (macos-14, macos-15, ubuntu-22.04, ubuntu-24.04, etc.), proving binary compatibility
+
+**Conclusion**: One binary package per architecture provides maximum compatibility with minimum complexity. The test workflow validates compatibility across OS versions, while the release workflow builds on the oldest supported version for maximum forward compatibility.
+
+## Components and Interfaces
+
+### 1. Release Workflow File
+
+**Location**: `.github/workflows/release.yml`
+
+**Responsibilities**:
+- Trigger on version tags
+- Wait for test workflow completion
+- Build release binaries for all targets
+- Create platform-specific packages
+- Generate SHA256 checksums
+- Upload packages and checksums to GitHub release
+
+**Key Jobs**:
+
+#### Job: `validate`
+- Waits for the existing test workflow to complete for the tagged commit
+- Uses an action like `lewagon/wait-on-check-action` to poll test workflow status
+- Fails the release if tests don't pass
+- Includes timeout to prevent infinite waiting (e.g., 60 minutes)
+- Runs quality checks (fmt, clippy) after tests pass
+
+#### Job: `build` (matrix)
+- Depends on `validate` job
+- Checks out code
+- Sets up Rust toolchain (stable)
+- Runs quality checks (fmt, clippy)
+- Builds release binaries with `cargo build --release` (LTO and stripping handled by Cargo.toml profile)
+- Builds CLI binaries (checksum, arch-check, get-custom-params)
+- Stages files in platform-specific directory structure
+- Creates compressed package
+- Generates SHA256 checksum
+- Uploads package and checksum as artifacts
+
+#### Job: `publish`
+- Depends on all `build` jobs
+- Downloads all artifacts
+- Checks if GitHub release already exists for the tag
+- If release exists, uploads packages and checksums to existing release
+- If release doesn't exist, creates new release and uploads assets
+- Allows manual release creation with custom notes before workflow runs
+
+### 2. Package Structure
+
+#### Linux Packages (x86_64 and aarch64)
+
+```
+crc-fast-{version}-linux-{arch}/
+├── lib/
+│ ├── libcrc_fast.so
+│ └── libcrc_fast.a
+├── include/
+│ └── libcrc_fast.h
+├── bin/
+│ ├── checksum
+│ ├── arch-check
+│ └── get-custom-params
+├── LICENSE-MIT
+├── LICENSE-Apache
+├── VERSION
+└── README.txt
+```
+
+#### macOS Package (aarch64)
+
+```
+crc-fast-{version}-macos-aarch64/
+├── lib/
+│ ├── libcrc_fast.dylib
+│ └── libcrc_fast.a
+├── include/
+│ └── libcrc_fast.h
+├── bin/
+│ ├── checksum
+│ ├── arch-check
+│ └── get-custom-params
+├── LICENSE-MIT
+├── LICENSE-Apache
+├── VERSION
+└── README.txt
+```
+
+#### Windows Packages (x86_64 and aarch64)
+
+```
+crc-fast-{version}-windows-{arch}/
+├── bin/
+│ ├── crc_fast.dll
+│ ├── checksum.exe
+│ ├── arch-check.exe
+│ └── get-custom-params.exe
+├── lib/
+│ ├── crc_fast.dll.lib (import library for linking against DLL)
+│ └── crc_fast.lib (static library)
+├── include/
+│ └── libcrc_fast.h
+├── LICENSE-MIT
+├── LICENSE-Apache
+├── VERSION
+└── README.txt
+```
+
+**Windows Library Files Explained**:
+- `crc_fast.dll`: The dynamic library containing the actual code
+- `crc_fast.dll.lib`: Import library needed to link against the DLL at compile time
+- `crc_fast.lib`: Static library for static linking (standalone, doesn't need DLL)
+
+### 3. Package Metadata Files
+
+#### VERSION File
+Contains the version number extracted from the git tag:
+```
+1.5.0
+```
+
+#### README.txt File
+Provides basic installation and usage instructions:
+```
+crc-fast Binary Distribution
+Version: {version}
+Platform: {platform}-{arch}
+
+Contents:
+- Library files (dynamic and static)
+- Header file for C/C++ integration
+- Command-line utilities
+
+Installation:
+[Platform-specific instructions]
+
+Usage:
+See https://github.com/awesomized/crc-fast-rust for documentation
+
+License: MIT OR Apache-2.0
+```
+
+### 4. Checksum Files
+
+Each package has an accompanying `.sha256` file:
+```
+{sha256_hash} crc-fast-{version}-{platform}-{arch}.{ext}
+```
+
+## Data Models
+
+### Build Artifact Structure
+
+```yaml
+artifacts:
+ - name: "crc-fast-{version}-{platform}-{arch}.{ext}"
+ type: "package"
+ checksum: "{sha256_hash}"
+ - name: "crc-fast-{version}-{platform}-{arch}.{ext}.sha256"
+ type: "checksum"
+```
+
+### Matrix Configuration
+
+```yaml
+matrix:
+ include:
+ - target: x86_64-unknown-linux-gnu
+ os: ubuntu-22.04
+ platform: linux
+ arch: x86_64
+ ext: tar.gz
+
+ - target: aarch64-unknown-linux-gnu
+ os: ubuntu-22.04-arm
+ platform: linux
+ arch: aarch64
+ ext: tar.gz
+
+ - target: aarch64-apple-darwin
+ os: macos-14
+ platform: macos
+ arch: aarch64
+ ext: tar.gz
+
+ - target: x86_64-pc-windows-msvc
+ os: windows-2022
+ platform: windows
+ arch: x86_64
+ ext: zip
+
+ - target: aarch64-pc-windows-msvc
+ os: windows-11-arm
+ platform: windows
+ arch: aarch64
+ ext: zip
+```
+
+## Error Handling
+
+### Test Failure
+- If the test workflow fails, the `validate` job fails
+- The `build` jobs don't execute (dependency chain)
+- No release is created
+- GitHub Actions shows clear failure status
+
+### Build Failure
+- If any platform build fails, that specific matrix job fails
+- Other platform builds continue
+- The `publish` job waits for all builds
+- If any build failed, `publish` job is skipped
+- Partial releases are prevented
+
+### Quality Check Failure
+- If `cargo fmt --check` fails, build stops
+- If `cargo clippy` produces warnings, build stops
+- Ensures all released binaries meet quality standards
+
+### Missing Files
+- Build script validates all expected files exist before packaging
+- Fails with clear error message if files are missing
+- Prevents incomplete packages
+
+### Upload Failure
+- If GitHub release creation fails, workflow fails
+- If asset upload fails, workflow retries (GitHub Actions default)
+- All artifacts remain available for manual inspection
+
+## Testing Strategy
+
+### Pre-Release Testing
+1. The existing test workflow must pass completely
+2. All platforms in the test matrix must succeed
+3. Format and clippy checks must pass
+
+### Build Verification
+1. Verify all expected files are present in target/release
+2. Check file sizes are reasonable (not empty)
+3. Validate binary executables are actually executable
+4. Confirm library files have correct extensions
+
+### Package Verification
+1. Verify package structure matches specification
+2. Check all metadata files are included
+3. Validate checksums are generated correctly
+4. Ensure package names follow naming convention
+
+### Integration Testing
+1. Test workflow on a feature branch with test tags
+2. Verify packages can be downloaded
+3. Test that libraries can be linked
+4. Verify CLI binaries execute correctly
+5. Validate checksums match package contents
+
+### Manual Testing Checklist
+Before first production release:
+- [ ] Create test tag on feature branch
+- [ ] Verify workflow triggers correctly
+- [ ] Download each platform package
+- [ ] Extract and verify contents
+- [ ] Test linking dynamic library
+- [ ] Test linking static library
+- [ ] Run each CLI binary
+- [ ] Verify checksums
+- [ ] Test on actual target platforms
+
+## Design Decisions
+
+### Decision 1: Single Package Per Platform
+**Rationale**: Combining libraries and CLI tools in one package simplifies distribution and ensures users get everything they need. Separate packages would create confusion about which package to download.
+
+**Alternative Considered**: Separate library and CLI packages. Rejected because it adds complexity for minimal benefit.
+
+### Decision 2: Include Both Dynamic and Static Libraries
+**Rationale**: Different projects have different linking requirements. Providing both gives maximum flexibility without requiring users to build from source.
+
+**Alternative Considered**: Separate packages for dynamic and static. Rejected because the size overhead is minimal and user experience is worse.
+
+### Decision 3: Platform-Specific Directory Layouts
+**Rationale**: Following platform conventions makes integration easier for users familiar with their platform's standards. Windows expects DLLs in bin/, while Unix expects shared libraries in lib/.
+
+**Alternative Considered**: Unified layout across all platforms. Rejected because it would be non-standard on all platforms.
+
+### Decision 4: Reuse Existing Test Workflow
+**Rationale**: The existing test workflow is comprehensive and already validates all target platforms. Duplicating tests would be wasteful and create maintenance burden.
+
+**Alternative Considered**: Inline tests in release workflow. Rejected because it duplicates logic and increases workflow complexity.
+
+### Decision 5: Matrix Build Strategy
+**Rationale**: Building all platforms in parallel maximizes speed and allows independent failure handling. GitHub Actions provides excellent matrix support.
+
+**Alternative Considered**: Sequential builds. Rejected because it would significantly increase release time.
+
+### Decision 6: SHA256 Checksums
+**Rationale**: SHA256 is the industry standard for verifying download integrity. It's widely supported and provides strong security guarantees.
+
+**Alternative Considered**: MD5 or SHA1. Rejected because they're cryptographically weak. Multiple checksums rejected as unnecessary.
+
+### Decision 7: Separate Checksum Files
+**Rationale**: Separate files allow users to download and verify checksums independently. This is the standard practice for software distribution.
+
+**Alternative Considered**: Checksums in release notes. Rejected because it's less convenient for automated verification.
+
+### Decision 8: Tag Pattern Without 'v' Prefix
+**Rationale**: The project already uses tags like `1.5.0` without the 'v' prefix. Maintaining consistency with existing practice is important.
+
+**Alternative Considered**: Requiring 'v' prefix. Rejected because it would break existing tagging convention.
+
+### Decision 9: Update Existing Release Rather Than Create
+**Rationale**: Allowing manual release creation before the workflow runs gives maintainers control over release notes, descriptions, and other metadata. The workflow focuses on building and uploading binaries, not managing release content.
+
+**Workflow**:
+1. Maintainer creates release manually with desired notes
+2. Maintainer creates and pushes tag
+3. Workflow builds binaries and uploads to existing release
+4. If no release exists, workflow creates a minimal one
+
+**Alternative Considered**: Workflow always creates release. Rejected because it forces auto-generated release notes and removes maintainer control over release presentation.
diff --git b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/requirements.md b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/requirements.md
new file mode 100644
index 0000000..b43106b
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/requirements.md
@@ -0,0 +1,101 @@
+# Requirements Document
+
+## Introduction
+
+This feature automates the creation and distribution of binary packages for the crc-fast library when a tagged version release is created on GitHub. The system will build platform-specific packages containing both library files (dynamic and static) and command-line utilities, following industry-standard packaging conventions for each target platform and architecture combination.
+
+## Glossary
+
+- **Release Workflow**: A GitHub Actions workflow that triggers on git tag creation and produces binary artifacts
+- **Binary Package**: A compressed archive containing compiled library files, headers, and executables for a specific platform-architecture combination
+- **Dynamic Library**: A shared library file (.so, .dylib, or .dll) that can be linked at runtime
+- **Static Library**: A library archive (.a or .lib) that is linked at compile time
+- **CLI Binary**: Command-line executable programs (checksum, arch-check, get-custom-params)
+- **Target Triple**: A Rust platform identifier (e.g., x86_64-unknown-linux-gnu)
+- **Package Layout**: The directory structure and file organization within a binary package
+- **Release Asset**: A file attached to a GitHub release that users can download
+
+## Requirements
+
+### Requirement 1
+
+**User Story:** As a library consumer, I want to download pre-built binaries for my platform, so that I can use crc-fast without compiling from source
+
+#### Acceptance Criteria
+
+1. WHEN a git tag matching the pattern {MAJOR}.{MINOR}.{PATCH} is pushed, THE Release Workflow SHALL trigger automatically
+2. THE Release Workflow SHALL build binaries for x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, aarch64-apple-darwin, x86_64-pc-windows-msvc, and aarch64-pc-windows-msvc targets
+3. THE Release Workflow SHALL execute all tests successfully before building release binaries
+4. THE Release Workflow SHALL produce release-optimized builds using the existing Cargo.toml release profile (LTO, strip, opt-level 3)
+5. THE Release Workflow SHALL upload all binary packages as GitHub release assets
+
+### Requirement 2
+
+**User Story:** As a C/C++ developer, I want library packages with both dynamic and static libraries, so that I can choose the linking strategy that fits my project
+
+#### Acceptance Criteria
+
+1. THE Release Workflow SHALL include both dynamic library files and static library files in library packages
+2. WHERE the target is Linux, THE Release Workflow SHALL include libcrc_fast.so and libcrc_fast.a files
+3. WHERE the target is macOS, THE Release Workflow SHALL include libcrc_fast.dylib and libcrc_fast.a files
+4. WHERE the target is Windows, THE Release Workflow SHALL include crc_fast.dll, crc_fast.dll.lib (import library), and crc_fast.lib (static library) files
+5. THE Release Workflow SHALL include the libcrc_fast.h header file in all library packages
+
+### Requirement 3
+
+**User Story:** As a command-line user, I want executable binaries for the checksum utilities, so that I can use crc-fast tools directly from my terminal
+
+#### Acceptance Criteria
+
+1. THE Release Workflow SHALL build checksum, arch-check, and get-custom-params executable binaries
+2. THE Release Workflow SHALL include CLI binaries in library packages
+3. WHERE the target is Windows, THE Release Workflow SHALL include .exe extensions on executable files
+4. WHERE the target is Linux or macOS, THE Release Workflow SHALL set executable permissions on binary files
+
+### Requirement 4
+
+**User Story:** As a package consumer, I want packages organized according to platform conventions, so that I can easily integrate them into my build system
+
+#### Acceptance Criteria
+
+1. WHERE the target is Linux, THE Release Workflow SHALL organize files in lib/ and include/ directories
+2. WHERE the target is macOS, THE Release Workflow SHALL organize files in lib/ and include/ directories
+3. WHERE the target is Windows, THE Release Workflow SHALL organize files in bin/ and include/ directories
+4. THE Release Workflow SHALL place CLI executables in bin/ subdirectory for Linux and macOS targets
+5. THE Release Workflow SHALL place CLI executables in bin/ subdirectory for Windows targets alongside the DLL
+
+### Requirement 5
+
+**User Story:** As a release maintainer, I want descriptive package names, so that users can easily identify the correct package for their platform
+
+#### Acceptance Criteria
+
+1. THE Release Workflow SHALL name packages using the format crc-fast-{version}-{os}-{arch}.{extension}
+2. WHERE the target is Linux, THE Release Workflow SHALL use .tar.gz extension
+3. WHERE the target is macOS, THE Release Workflow SHALL use .tar.gz extension
+4. WHERE the target is Windows, THE Release Workflow SHALL use .zip extension
+5. THE Release Workflow SHALL include the git tag version in the package filename
+
+### Requirement 6
+
+**User Story:** As a quality-conscious maintainer, I want the release workflow to reuse existing test infrastructure, so that releases are only created when all tests pass
+
+#### Acceptance Criteria
+
+1. THE Release Workflow SHALL depend on successful completion of the existing test workflow
+2. THE Release Workflow SHALL use the same Rust toolchain version as the test workflow
+3. THE Release Workflow SHALL fail and prevent release creation if any test fails
+4. THE Release Workflow SHALL run cargo fmt and cargo clippy checks before building
+5. THE Release Workflow SHALL only trigger on tags matching [0-9]+.[0-9]+.[0-9]+ pattern
+
+### Requirement 7
+
+**User Story:** As a downstream consumer, I want packages to include version information, so that I can verify I'm using the correct release
+
+#### Acceptance Criteria
+
+1. THE Release Workflow SHALL include a VERSION or version.txt file in each package
+2. THE Release Workflow SHALL include a README or INSTALL file with basic usage instructions
+3. THE Release Workflow SHALL include LICENSE files in each package
+4. THE Release Workflow SHALL generate a checksum file (SHA256) for each package
+5. THE Release Workflow SHALL upload checksum files as separate release assets
diff --git b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/tasks.md b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/tasks.md
new file mode 100644
index 0000000..6398787
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/specs/github-release-automation/tasks.md
@@ -0,0 +1,156 @@
+# Implementation Plan
+
+- [x] 1. Create GitHub Actions release workflow file
+ - Create `.github/workflows/release.yml` with workflow structure
+ - Configure workflow to trigger on tags matching `[0-9]+.[0-9]+.[0-9]+` pattern
+ - Set up workflow permissions for creating releases and uploading assets
+ - _Requirements: 1.1, 6.5_
+
+- [x] 2. Implement validation job
+ - [x] 2.1 Create validate job that waits for test workflow completion
+ - Use `lewagon/wait-on-check-action` or similar to wait for test workflow to complete
+ - Poll test workflow status until it completes (success or failure)
+ - Fail the validate job if test workflow fails
+ - Set reasonable timeout (e.g., 60 minutes) to prevent infinite waiting
+ - _Requirements: 6.1, 6.3_
+
+ - [x] 2.2 Add quality checks to validate job
+ - Run `cargo fmt --check` to verify code formatting
+ - Run `cargo clippy -- -D warnings` to catch linting issues
+ - _Requirements: 6.4_
+
+- [x] 3. Implement build matrix job
+ - [x] 3.1 Define build matrix with all target platforms
+ - Configure matrix with 5 targets: x86_64-linux, aarch64-linux, aarch64-macos, x86_64-windows, aarch64-windows
+ - Map each target to appropriate runner: ubuntu-22.04, ubuntu-22.04-arm, macos-14, windows-2022, windows-11-arm
+ - Include platform, arch, and extension variables in matrix
+ - _Requirements: 1.2_
+
+ - [x] 3.2 Set up Rust toolchain in build job
+ - Use `actions-rust-lang/setup-rust-toolchain` action
+ - Configure stable toolchain
+ - _Requirements: 6.2_
+
+ - [x] 3.3 Build release binaries
+ - Run `cargo build --release` to build library and CLI binaries
+ - Verify all expected files exist in target/release directory
+ - _Requirements: 1.4, 2.1, 3.1_
+
+- [x] 4. Create platform-specific package staging
+ - [x] 4.1 Implement Linux package staging
+ - Create directory structure: lib/, include/, bin/
+ - Copy libcrc_fast.so and libcrc_fast.a to lib/
+ - Copy libcrc_fast.h to include/
+ - Copy checksum, arch-check, get-custom-params to bin/
+ - Set executable permissions on binaries
+ - _Requirements: 2.2, 3.2, 3.4, 4.1, 4.4_
+
+ - [x] 4.2 Implement macOS package staging
+ - Create directory structure: lib/, include/, bin/
+ - Copy libcrc_fast.dylib and libcrc_fast.a to lib/
+ - Copy libcrc_fast.h to include/
+ - Copy checksum, arch-check, get-custom-params to bin/
+ - Set executable permissions on binaries
+ - _Requirements: 2.3, 3.2, 3.4, 4.2, 4.4_
+
+ - [x] 4.3 Implement Windows package staging
+ - Create directory structure: bin/, lib/, include/
+ - Copy crc_fast.dll to bin/
+ - Copy crc_fast.dll.lib and crc_fast.lib to lib/
+ - Copy libcrc_fast.h to include/
+ - Copy checksum.exe, arch-check.exe, get-custom-params.exe to bin/
+ - _Requirements: 2.4, 3.3, 4.3, 4.5_
+
+- [ ] 5. Add package metadata files
+ - [x] 5.1 Create VERSION file
+ - Extract version from git tag
+ - Write version number to VERSION file in package root
+ - _Requirements: 7.1_
+
+ - [x] 5.2 Create README.txt file
+ - Generate platform-specific installation instructions
+ - Include basic usage information and link to documentation
+ - Add to package root
+ - _Requirements: 7.2_
+
+ - [x] 5.3 Copy license files
+ - Copy LICENSE-MIT and LICENSE-Apache to package root
+ - _Requirements: 7.3_
+
+- [x] 6. Create compressed packages
+ - [x] 6.1 Implement tar.gz creation for Linux and macOS
+ - Use tar command to create compressed archive
+ - Name package: crc-fast-{version}-{platform}-{arch}.tar.gz
+ - _Requirements: 5.2, 5.3, 5.5_
+
+ - [x] 6.2 Implement zip creation for Windows
+ - Use PowerShell Compress-Archive or 7zip
+ - Name package: crc-fast-{version}-windows-{arch}.zip
+ - _Requirements: 5.4, 5.5_
+
+- [X] 7. Generate and upload checksums
+ - [x] 7.1 Generate SHA256 checksums
+ - Calculate SHA256 hash for each package
+ - Create .sha256 file with hash and filename
+ - _Requirements: 7.4_
+
+ - [x] 7.2 Upload packages and checksums as artifacts
+ - Use `actions/upload-artifact` to upload package files
+ - Upload checksum files as separate artifacts
+ - _Requirements: 7.5_
+
+- [X] 8. Implement publish job
+ - [x] 8.1 Download all build artifacts
+ - Use `actions/download-artifact` to retrieve all packages and checksums
+ - Organize files for upload
+ - _Requirements: 1.5_
+
+ - [x] 8.2 Check for existing release
+ - Use GitHub API to check if release exists for the tag
+ - Get release ID if it exists
+ - _Requirements: Decision 9_
+
+ - [x] 8.3 Create or update GitHub release
+ - If release doesn't exist, create new release with basic information
+ - If release exists, prepare to update it with assets
+ - Use `softprops/action-gh-release` or similar action
+ - _Requirements: 1.5_
+
+ - [x] 8.4 Upload packages and checksums to release
+ - Upload all .tar.gz and .zip packages as release assets
+ - Upload all .sha256 checksum files as release assets
+ - _Requirements: 1.5, 7.5_
+
+- [ ]* 9. Add workflow documentation
+ - [ ]* 9.1 Create workflow README
+ - Document how to trigger releases
+ - Explain manual release creation workflow
+ - Document package naming conventions
+ - _Requirements: All_
+
+ - [ ]* 9.2 Add inline workflow comments
+ - Comment complex workflow steps
+ - Explain matrix configuration
+ - Document platform-specific logic
+ - _Requirements: All_
+
+- [ ]* 10. Test release workflow
+ - [ ]* 10.1 Test on feature branch
+ - Create test tag on feature branch
+ - Verify workflow triggers correctly
+ - Check that all jobs complete successfully
+ - _Requirements: All_
+
+ - [ ]* 10.2 Validate package contents
+ - Download each platform package
+ - Extract and verify directory structure
+ - Check that all files are present
+ - Verify file permissions on Unix platforms
+ - _Requirements: 2.1-2.5, 3.1-3.4, 4.1-4.5, 7.1-7.3_
+
+ - [ ]* 10.3 Test package functionality
+ - Test linking against dynamic library
+ - Test linking against static library
+ - Run each CLI binary to verify functionality
+ - Verify checksums match package contents
+ - _Requirements: 2.1-2.5, 3.1-3.4_
diff --git b/rust-vendor/crc-fast/.kiro/steering/code-quality-requirements.md b/rust-vendor/crc-fast/.kiro/steering/code-quality-requirements.md
new file mode 100644
index 0000000..61a44e7
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/steering/code-quality-requirements.md
@@ -0,0 +1,42 @@
+---
+inclusion: always
+---
+
+# Code Quality Requirements
+
+## Pre-Completion Checks
+
+Before marking any task as completed, you MUST run the following commands and ensure they pass without errors or warnings:
+
+### 1. Code Formatting
+```bash
+cargo fmt --check
+```
+If this fails, run `cargo fmt` to fix formatting issues, then verify with `--check` again.
+
+### 2. Linting
+```bash
+cargo clippy -- -D warnings
+```
+All clippy warnings must be resolved. This ensures code follows Rust best practices and catches potential issues.
+
+### 3. Testing
+```bash
+cargo test
+```
+All tests must pass to ensure no regressions were introduced.
+
+## Why These Requirements Matter
+
+- **cargo fmt**: Ensures consistent code formatting across the entire codebase, making it easier to read and maintain
+- **cargo clippy**: Catches common mistakes, suggests idiomatic Rust patterns, and helps prevent bugs before they reach production
+- **cargo test**: Validates that all functionality works as expected and no existing features were broken
+
+## Failure Handling
+
+If any of these commands fail:
+1. Fix the issues identified
+2. Re-run the commands to verify fixes
+3. Only then mark the task as completed
+
+These checks are non-negotiable for maintaining code quality and consistency.
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/.kiro/steering/commenting-guidelines.md b/rust-vendor/crc-fast/.kiro/steering/commenting-guidelines.md
new file mode 100644
index 0000000..e0d1a31
--- /dev/null
+++ b/rust-vendor/crc-fast/.kiro/steering/commenting-guidelines.md
@@ -0,0 +1,43 @@
+---
+inclusion: always
+---
+
+# Code Commenting Guidelines
+
+## Comment Philosophy
+
+- Only add comments when they explain WHY something is done a particular way
+- NEVER explain WHAT the code is doing unless it's hard to understand without a comment
+- Code should be self-documenting through clear naming and structure
+- Comments should provide context, reasoning, or non-obvious implications
+
+## Examples
+
+### Good Comments (WHY)
+```rust
+// Use 512KiB chunks because benchmarks showed this was fastest on Apple M2 Ultra
+let chunk_size = chunk_size.unwrap_or(524288);
+
+// Remove xorout since it's already been applied and needs to be re-added on final output
+self.state = combine::checksums(
+ self.state ^ self.params.xorout,
+ other_crc,
+ other.amount,
+ self.params,
+) ^ self.params.xorout;
+```
+
+### Avoid (WHAT)
+```rust
+// Set chunk_size to 524288 if None
+let chunk_size = chunk_size.unwrap_or(524288);
+
+// XOR the state with xorout
+self.state = self.state ^ self.params.xorout;
+```
+
+### Exception: Complex Logic
+Comments explaining WHAT are acceptable when the code logic is genuinely hard to follow:
+```rust
+// Fold 8 bytes at a time using SIMD, then handle remainder with scalar operations
+```
\ No newline at end of file
diff --git b/rust-vendor/crc-fast/Cargo.toml.orig b/rust-vendor/crc-fast/Cargo.toml.orig
new file mode 100644
index 0000000..57dd478
--- /dev/null
+++ b/rust-vendor/crc-fast/Cargo.toml.orig
@@ -0,0 +1,148 @@
+[package]
+name = "crc-fast"
+version = "1.9.0"
+edition = "2021"
+authors = ["Don MacAskill"]
+license = "MIT OR Apache-2.0"
+keywords = ["crc", "checksum", "simd", "accelerated", "fast"]
+categories = ["algorithms", "encoding", "hardware-support"]
+repository = "https://github.com/awesomized/crc-fast-rust"
+description = "World's fastest generic CRC16, CRC32, and CRC64 calculator using SIMD. Supplies a C-compatible shared library for use in other languages."
+readme = "README.md"
+
+# important intrinsics stabilization notes:
+# 1.69.0 added VPCLMULQDQ x86 detection support
+# 1.70.0 added LLVM 16 which supports PMULL2 on Aarch64
+# 1.89.0 stabilized AVX-512 intrinsics, including VPCLMULQDQ
+rust-version = "1.81"
+
+[lib]
+name = "crc_fast"
+crate-type = ["lib", "cdylib", "staticlib"]
+bench = true
+
+[dependencies]
+# can move to crc 3.4+ once our MSRV is Rust 1.82+
+crc = "~3.3"
+
+# We use digest with default-features = false and features = ["alloc"] to enable heap allocation support in no_std environments.
+# This configuration is safe because the alloc feature in digest does not depend on its default features as of digest v0.10.
+digest = { version = "0.10", optional = true, default-features = false, features = ["alloc"] }
+
+# will be removed once Rust 1.89 is the minimum supported version
+rustversion = "1.0"
+
+# constrain indexmap (transitive) to a version compatible with Rust 1.81.0
+indexmap = { version = ">=2.11.0, <2.12.0", optional = true }
+
+# no_std support
+# spin is optional - only needed on architectures with SIMD (for feature detection)
+# or when cache feature is enabled
+spin = { version = "0.10.0", default-features = false, features = [
+ "once",
+ "rwlock",
+ "mutex",
+ "spin_mutex",
+], optional = true }
+# hashbrown is only needed when caching is enabled in no_std
+hashbrown = { version = "0.16.0", optional = true }
+
+# Target-specific dependencies: spin is needed for feature detection on SIMD-capable architectures
+[target.'cfg(target_arch = "aarch64")'.dependencies]
+spin = { version = "0.10.0", default-features = false, features = [
+ "once",
+ "rwlock",
+ "mutex",
+ "spin_mutex",
+] }
+
+[target.'cfg(target_arch = "x86")'.dependencies]
+spin = { version = "0.10.0", default-features = false, features = [
+ "once",
+ "rwlock",
+ "mutex",
+ "spin_mutex",
+] }
+
+[target.'cfg(target_arch = "x86_64")'.dependencies]
+spin = { version = "0.10.0", default-features = false, features = [
+ "once",
+ "rwlock",
+ "mutex",
+ "spin_mutex",
+] }
+
+[dev-dependencies]
+criterion = "0.7"
+cbindgen = "0.29"
+
+# can move to proptest 1.9+ once our MSRV is Rust 1.82+
+proptest = "~1.8"
+
+rand = "0.9"
+regex = "1.12"
+wasm-bindgen-test = "0.3"
+
+# lto=true has a big improvement in performance
+[profile.release]
+lto = true
+strip = true
+codegen-units = 1
+opt-level = 3
+
+[[bin]]
+name = "checksum"
+path = "src/bin/checksum.rs"
+required-features = ["cli"]
+
+[[bin]]
+name = "arch-check"
+path = "src/bin/arch-check.rs"
+required-features = ["cli"]
+
+[[bin]]
+name = "get-custom-params"
+path = "src/bin/get-custom-params.rs"
+required-features = ["cli"]
+
+[[bench]]
+name = "benchmark"
+harness = false
+required-features = ["std"]
+
+[features]
+# default features
+default = ["std", "panic-handler", "ffi"]
+std = ["alloc"] # std implies alloc is available
+alloc = ["digest"] # marker feature for heap allocation support
+panic-handler = [] # Provides panic handler for no_std library checks (disable in binaries)
+ffi = [
+] # C/C++ compatible dynamic/static library, planned to become optional in the next MAJOR version (v2) to reduce overhead
+
+# optional features
+cli = ["std"] # command line interface binaries (checksum, arch-check, get-custom-params)
+cache = [
+ "alloc",
+ "hashbrown",
+ "spin",
+] # no_std caching requires alloc + hashbrown HashMap + spin for synchronization
+
+# the features below are deprecated, aren't in use, and will be removed in the next MAJOR version (v2)
+vpclmulqdq = [] # deprecated, VPCLMULQDQ stabilized in Rust 1.89.0
+optimize_crc32_auto = [] # deprecated
+optimize_crc32_neon_eor3_v9s3x2e_s3 = [] # deprecated
+optimize_crc32_neon_v12e_v1 = [] # deprecated
+optimize_crc32_neon_v3s4x2e_v2 = [] # deprecated
+optimize_crc32_neon_blended = [] # deprecated
+optimize_crc32_avx512_vpclmulqdq_v3x2 = [] # deprecated
+optimize_crc32_avx512_v4s3x3 = [] # deprecated
+optimize_crc32_sse_v4s3x3 = [] # deprecated
+
+[package.metadata.docs.rs]
+features = ["std"]
+rustdoc-args = ["--cfg", "docsrs"]
+
+[[test]]
+name = "checksum_integration_tests"
+path = "tests/checksum_integration_tests.rs"
+required-features = ["cli"]
diff --git b/rust-vendor/crc32fast/.cargo_vcs_info.json b/rust-vendor/crc32fast/.cargo_vcs_info.json
new file mode 100644
index 0000000..d4d9e64
--- /dev/null
+++ b/rust-vendor/crc32fast/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "dbf4f76cd71cdcc57d9164cbd46890d53ce0423c"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/crc32fast/.github/workflows/ci.yml b/rust-vendor/crc32fast/.github/workflows/ci.yml
new file mode 100644
index 0000000..3817dfd
--- /dev/null
+++ b/rust-vendor/crc32fast/.github/workflows/ci.yml
@@ -0,0 +1,125 @@
+name: CI
+
+on:
+ pull_request:
+ branches:
+ - master
+ push:
+ branches:
+ - master
+
+jobs:
+ stable:
+ name: stable
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macos-latest
+ - windows-latest
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Rust
+ run: rustup update stable --no-self-update
+ - name: Test in debug mode
+ run: cargo test --no-fail-fast
+ - name: Test in release mode
+ run: cargo test --no-fail-fast --release
+ - name: Check with no default features
+ run: cargo check --no-default-features
+ nightly:
+ name: nightly
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Rust
+ run: rustup update nightly
+ - name: Test in debug mode
+ run: cargo +nightly test --no-fail-fast
+ - name: Test in release mode
+ run: cargo +nightly test --no-fail-fast --release
+ - name: Check with no default features
+ run: cargo +nightly check --no-default-features
+ - name: Build benches
+ run: cargo +nightly build --benches --all
+ msrv:
+ name: msrv
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Get MSRV from Cargo.toml
+ id: msrv
+ run: echo "version=$(grep '^rust-version' Cargo.toml | sed 's/rust-version = "\(.*\)"/\1/')" >> $GITHUB_OUTPUT
+ - name: Install Rust
+ run: rustup update ${{ steps.msrv.outputs.version }} && rustup default ${{ steps.msrv.outputs.version }}
+ - name: Test in debug mode
+ run: cargo test --no-fail-fast
+ - name: Test in release mode
+ run: cargo test --no-fail-fast --release
+ - name: Check with no default features
+ run: cargo check --no-default-features
+ asan:
+ name: asan
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Rust
+ run: rustup update nightly --no-self-update
+ - name: Run address sanitizer
+ run: RUSTFLAGS="-Z sanitizer=address" cargo +nightly test --lib --target x86_64-unknown-linux-gnu
+ env:
+ ASAN_OPTIONS: "detect_odr_violation=0 detect_leaks=0"
+ RUST_BACKTRACE: "1"
+ cross-test:
+ name: cross-test
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - i686-unknown-linux-gnu
+ - aarch64-unknown-linux-gnu
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Rust
+ run: rustup update --no-self-update
+ - name: Install Cross
+ run: cargo install --force cross
+ - name: Test
+ run: cross test --target=${{ matrix.target }}
+ - name: Check with no default features
+ run: cross check --target=${{ matrix.target }} --no-default-features
+ cross-check:
+ name: cross-check
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - wasm32-unknown-unknown
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Rust
+ run: rustup update --no-self-update
+ - name: Add target
+ run: rustup target add ${{ matrix.target }}
+ - name: Check
+ run: cargo check --target=${{ matrix.target }}
+ - name: Check with no default features
+ run: cargo check --target=${{ matrix.target }} --no-default-features
+ cross-check-nightly-feature:
+ name: cross-check-nightly-features
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - aarch64-unknown-linux-gnu
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Rust
+ run: rustup update nightly --no-self-update && rustup default nightly
+ - name: Add target
+ run: rustup target add ${{ matrix.target }}
+ - name: Check
+ run: cargo check --target=${{ matrix.target }} --features=nightly
+ - name: Check with no default features
+ run: cargo check --target=${{ matrix.target }} --no-default-features --features=nightly
diff --git b/rust-vendor/crc32fast/Cargo.toml.orig b/rust-vendor/crc32fast/Cargo.toml.orig
new file mode 100644
index 0000000..84da265
--- /dev/null
+++ b/rust-vendor/crc32fast/Cargo.toml.orig
@@ -0,0 +1,32 @@
+[package]
+name = "crc32fast"
+version = "1.5.0"
+edition = "2021"
+license = "MIT OR Apache-2.0"
+authors = [
+ "Sam Rijs <srijs@airpost.net>",
+ "Alex Crichton <alex@alexcrichton.com>"
+]
+description = "Fast, SIMD-accelerated CRC32 (IEEE) checksum computation"
+repository = "https://github.com/srijs/rust-crc32fast"
+readme = "README.md"
+keywords = ["hash", "crc", "crc32", "simd", "fast"]
+categories = ["algorithms", "no-std"]
+rust-version = "1.63"
+
+[dependencies]
+cfg-if = "1.0"
+
+[dev-dependencies]
+bencher = "0.1"
+quickcheck = { version = "1.0", default-features = false }
+rand = "0.8"
+
+[features]
+default = ["std"]
+std = []
+nightly = []
+
+[[bench]]
+name = "bench"
+harness = false
diff --git b/rust-vendor/crossbeam-deque/.cargo_vcs_info.json b/rust-vendor/crossbeam-deque/.cargo_vcs_info.json
new file mode 100644
index 0000000..0c63ec5
--- /dev/null
+++ b/rust-vendor/crossbeam-deque/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ccd83ac4108a2a1b41e9c6e79c87267167d18dfa"
+ },
+ "path_in_vcs": "crossbeam-deque"
+}
\ No newline at end of file
diff --git b/rust-vendor/crossbeam-deque/Cargo.toml.orig b/rust-vendor/crossbeam-deque/Cargo.toml.orig
new file mode 100644
index 0000000..3c6d446
--- /dev/null
+++ b/rust-vendor/crossbeam-deque/Cargo.toml.orig
@@ -0,0 +1,34 @@
+[package]
+name = "crossbeam-deque"
+# When publishing a new version:
+# - Update CHANGELOG.md
+# - Update README.md (when increasing major or minor version)
+# - Run './tools/publish.sh crossbeam-deque <version>'
+version = "0.8.6"
+edition = "2021"
+rust-version = "1.61"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/crossbeam-rs/crossbeam"
+homepage = "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-deque"
+description = "Concurrent work-stealing deque"
+keywords = ["chase-lev", "lock-free", "scheduler", "scheduling"]
+categories = ["algorithms", "concurrency", "data-structures"]
+
+[features]
+default = ["std"]
+
+# Enable to use APIs that require `std`.
+# This is enabled by default.
+#
+# NOTE: Disabling `std` feature is not supported yet.
+std = ["crossbeam-epoch/std", "crossbeam-utils/std"]
+
+[dependencies]
+crossbeam-epoch = { version = "0.9.17", path = "../crossbeam-epoch", default-features = false }
+crossbeam-utils = { version = "0.8.18", path = "../crossbeam-utils", default-features = false }
+
+[dev-dependencies]
+rand = "0.8"
+
+[lints]
+workspace = true
diff --git b/rust-vendor/crossbeam-epoch/.cargo_vcs_info.json b/rust-vendor/crossbeam-epoch/.cargo_vcs_info.json
new file mode 100644
index 0000000..d24fe6d
--- /dev/null
+++ b/rust-vendor/crossbeam-epoch/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "9c3182abebb36bdc9446d75d4644190fef70fa01"
+ },
+ "path_in_vcs": "crossbeam-epoch"
+}
\ No newline at end of file
diff --git b/rust-vendor/crossbeam-epoch/Cargo.toml.orig b/rust-vendor/crossbeam-epoch/Cargo.toml.orig
new file mode 100644
index 0000000..0f87aed
--- /dev/null
+++ b/rust-vendor/crossbeam-epoch/Cargo.toml.orig
@@ -0,0 +1,56 @@
+[package]
+name = "crossbeam-epoch"
+# When publishing a new version:
+# - Update CHANGELOG.md
+# - Update README.md
+# - Create "crossbeam-epoch-X.Y.Z" git tag
+version = "0.9.18"
+edition = "2021"
+rust-version = "1.61"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/crossbeam-rs/crossbeam"
+homepage = "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-epoch"
+description = "Epoch-based garbage collection"
+keywords = ["lock-free", "rcu", "atomic", "garbage"]
+categories = ["concurrency", "memory-management", "no-std"]
+
+[features]
+default = ["std"]
+
+# Enable to use APIs that require `std`.
+# This is enabled by default.
+std = ["alloc", "crossbeam-utils/std"]
+
+# Enable to use APIs that require `alloc`.
+# This is enabled by default and also enabled if the `std` feature is enabled.
+#
+# NOTE: Disabling both `std` *and* `alloc` features is not supported yet.
+alloc = []
+
+# These features are no longer used.
+# TODO: remove in the next major version.
+# Enable to use of unstable functionality.
+# This is disabled by default and requires recent nightly compiler.
+#
+# NOTE: This feature is outside of the normal semver guarantees and minor or
+# patch versions of crossbeam may make breaking changes to them at any time.
+nightly = ["crossbeam-utils/nightly"]
+
+# Enable the use of loom for concurrency testing.
+#
+# NOTE: This feature is outside of the normal semver guarantees and minor or
+# patch versions of crossbeam may make breaking changes to them at any time.
+loom = ["loom-crate", "crossbeam-utils/loom"]
+
+[dependencies]
+crossbeam-utils = { version = "0.8.18", path = "../crossbeam-utils", default-features = false }
+
+# Enable the use of loom for concurrency testing.
+#
+# NOTE: This feature is outside of the normal semver guarantees and minor or
+# patch versions of crossbeam may make breaking changes to them at any time.
+[target.'cfg(crossbeam_loom)'.dependencies]
+loom-crate = { package = "loom", version = "0.7.1", optional = true }
+
+[dev-dependencies]
+rand = "0.8"
diff --git b/rust-vendor/crossbeam-utils/.cargo_vcs_info.json b/rust-vendor/crossbeam-utils/.cargo_vcs_info.json
new file mode 100644
index 0000000..87108da
--- /dev/null
+++ b/rust-vendor/crossbeam-utils/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ccd83ac4108a2a1b41e9c6e79c87267167d18dfa"
+ },
+ "path_in_vcs": "crossbeam-utils"
+}
\ No newline at end of file
diff --git b/rust-vendor/crossbeam-utils/Cargo.toml.orig b/rust-vendor/crossbeam-utils/Cargo.toml.orig
new file mode 100644
index 0000000..3a95bae
--- /dev/null
+++ b/rust-vendor/crossbeam-utils/Cargo.toml.orig
@@ -0,0 +1,46 @@
+[package]
+name = "crossbeam-utils"
+# When publishing a new version:
+# - Update CHANGELOG.md
+# - Update README.md (when increasing major or minor version)
+# - Run './tools/publish.sh crossbeam-utils <version>'
+version = "0.8.21"
+edition = "2021"
+rust-version = "1.60"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/crossbeam-rs/crossbeam"
+homepage = "https://github.com/crossbeam-rs/crossbeam/tree/master/crossbeam-utils"
+description = "Utilities for concurrent programming"
+keywords = ["scoped", "thread", "atomic", "cache"]
+categories = ["algorithms", "concurrency", "data-structures", "no-std"]
+
+[features]
+default = ["std"]
+
+# Enable to use APIs that require `std`.
+# This is enabled by default.
+std = []
+
+# These features are no longer used.
+# TODO: remove in the next major version.
+# Enable to use of unstable functionality.
+# This is disabled by default and requires recent nightly compiler.
+#
+# NOTE: This feature is outside of the normal semver guarantees and minor or
+# patch versions of crossbeam may make breaking changes to them at any time.
+nightly = []
+
+[dependencies]
+
+# Enable the use of loom for concurrency testing.
+#
+# NOTE: This feature is outside of the normal semver guarantees and minor or
+# patch versions of crossbeam may make breaking changes to them at any time.
+[target.'cfg(crossbeam_loom)'.dependencies]
+loom = { version = "0.7.1", optional = true }
+
+[dev-dependencies]
+rand = "0.8"
+
+[lints]
+workspace = true
diff --git b/rust-vendor/crossterm/.cargo_vcs_info.json b/rust-vendor/crossterm/.cargo_vcs_info.json
new file mode 100644
index 0000000..a421cb9
--- /dev/null
+++ b/rust-vendor/crossterm/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "36d95b26a26e64b0f8c12edfe11f410a6d56a812"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/crossterm/.github/CODEOWNERS b/rust-vendor/crossterm/.github/CODEOWNERS
new file mode 100644
index 0000000..507e02a
--- /dev/null
+++ b/rust-vendor/crossterm/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @TimonPost
diff --git b/rust-vendor/crossterm/.github/ISSUE_TEMPLATE/bug_report.md b/rust-vendor/crossterm/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..829a62a
--- /dev/null
+++ b/rust-vendor/crossterm/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,27 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Describe the bug**
+A clear and concise description of what the bug is.
+
+**To Reproduce**
+Steps to reproduce the behavior:
+1. Go to '...'
+2. Click on '....'
+3. Scroll down to '....'
+4. See error
+
+**Expected behavior**
+A clear and concise description of what you expected to happen.
+
+**OS**
+ - e.g. MacOs, Windows, Linux, (version) etc...
+
+**Terminal/Console**
+ - e.g. ConHost/xterm/iterm2/Windows Terminal etc.
diff --git b/rust-vendor/crossterm/.github/ISSUE_TEMPLATE/feature_request.md b/rust-vendor/crossterm/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..f25dd5f
--- /dev/null
+++ b/rust-vendor/crossterm/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,20 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ''
+assignees: ''
+
+---
+
+**Is your feature request related to a problem? Please describe.**
+A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
+
+**Describe the solution you'd like**
+A clear and concise description of what you want to happen.
+
+**Describe alternatives you've considered if any**
+A clear and concise description of any alternative solutions or features you've considered.
+
+**Additional context**
+Anything else?
diff --git b/rust-vendor/crossterm/.github/workflows/crossterm_test.yml b/rust-vendor/crossterm/.github/workflows/crossterm_test.yml
new file mode 100644
index 0000000..2e5fb65
--- /dev/null
+++ b/rust-vendor/crossterm/.github/workflows/crossterm_test.yml
@@ -0,0 +1,80 @@
+name: Crossterm Test
+
+on:
+ # Build master branch only
+ push:
+ branches:
+ - master
+ # Build pull requests targeting master branch only
+ pull_request:
+ branches:
+ - master
+
+jobs:
+ test:
+ name: ${{matrix.rust}} on ${{ matrix.os }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, windows-2019, macOS-latest]
+ rust: [stable, nightly]
+ # Allow failures on nightly, it's just informative
+ include:
+ - rust: stable
+ can-fail: false
+ - rust: nightly
+ can-fail: true
+ steps:
+ - name: Checkout Repository
+ uses: actions/checkout@v1
+ with:
+ fetch-depth: 1
+ - name: Install Rust
+ uses: hecrj/setup-rust-action@master
+ with:
+ rust-version: ${{ matrix.rust }}
+ components: rustfmt,clippy
+ - name: Toolchain Information
+ run: |
+ rustc --version
+ rustfmt --version
+ rustup --version
+ cargo --version
+ - name: Check Formatting
+ if: matrix.rust == 'stable'
+ run: cargo fmt --all -- --check
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Clippy
+ run: cargo clippy --all-features -- -D clippy::all
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test Build
+ run: cargo build
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test default features
+ run: cargo test --lib -- --nocapture --test-threads 1
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test serde feature
+ run: cargo test --lib --features serde -- --nocapture --test-threads 1
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test event-stream feature
+ run: cargo test --lib --features "event-stream,events" -- --nocapture --test-threads 1
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test all features
+ run: cargo test --all-features -- --nocapture --test-threads 1
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test no default features
+ if: matrix.os != 'windows-2019'
+ run: cargo test --no-default-features -- --nocapture --test-threads 1
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test no default features with use-dev-tty feature enabled
+ if: matrix.os != 'windows-2019'
+ run: cargo test --no-default-features --features "use-dev-tty events event-stream bracketed-paste" -- --nocapture --test-threads 1
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test no default features with windows feature enabled
+ if: matrix.os == 'windows-2019'
+ run: cargo test --no-default-features --features "windows" -- --nocapture --test-threads 1
+ continue-on-error: ${{ matrix.can-fail }}
+ - name: Test Packaging
+ if: matrix.rust == 'stable'
+ run: cargo package
+ continue-on-error: ${{ matrix.can-fail }}
diff --git b/rust-vendor/crossterm/.travis.yml b/rust-vendor/crossterm/.travis.yml
new file mode 100644
index 0000000..acf94cb
--- /dev/null
+++ b/rust-vendor/crossterm/.travis.yml
@@ -0,0 +1,42 @@
+# Build only pushed (merged) master or any pull request. This avoids the
+# pull request to be build twice.
+branches:
+ only:
+ - master
+
+language: rust
+
+rust:
+ - stable
+ - nightly
+
+os:
+ - linux
+ - windows
+ - osx
+
+git:
+ depth: 1
+ quiet: true
+
+matrix:
+ allow_failures:
+ - rust: nightly
+
+before_script:
+ - export PATH=$PATH:/home/travis/.cargo/bin
+ - rustup component add rustfmt
+ - rustup component add clippy
+
+script:
+ - cargo fmt --version
+ - rustup --version
+ - rustc --version
+ - if [ "$TRAVIS_RUST_VERSION" = "stable" ]; then cargo fmt --all -- --check; fi
+ - cargo clippy -- -D clippy::all
+ - cargo build
+ - cargo test --lib -- --nocapture --test-threads 1
+ - cargo test --lib --features serde -- --nocapture --test-threads 1
+ - cargo test --lib --features event-stream -- --nocapture --test-threads 1
+ - cargo test --all-features -- --nocapture --test-threads 1
+ - if [ "$TRAVIS_RUST_VERSION" = "stable" ]; then cargo package; fi
diff --git b/rust-vendor/crossterm/Cargo.toml.orig b/rust-vendor/crossterm/Cargo.toml.orig
new file mode 100644
index 0000000..3ce1b30
--- /dev/null
+++ b/rust-vendor/crossterm/Cargo.toml.orig
@@ -0,0 +1,122 @@
+[package]
+name = "crossterm"
+version = "0.29.0"
+authors = ["T. Post"]
+description = "A crossplatform terminal library for manipulating terminals."
+repository = "https://github.com/crossterm-rs/crossterm"
+documentation = "https://docs.rs/crossterm/"
+license = "MIT"
+keywords = ["event", "color", "cli", "input", "terminal"]
+exclude = ["target", "Cargo.lock"]
+readme = "README.md"
+edition = "2021"
+rust-version = "1.63.0"
+categories = ["command-line-interface", "command-line-utilities"]
+
+[lib]
+name = "crossterm"
+path = "src/lib.rs"
+
+[package.metadata.docs.rs]
+all-features = true
+
+[features]
+default = ["bracketed-paste", "events", "windows", "derive-more"]
+
+#! ### Default features
+## Enables triggering [`Event::Paste`](event::Event::Paste) when pasting text into the terminal.
+bracketed-paste = []
+
+## Enables reading input/events from the system using the [`event`] module.
+events = ["dep:mio", "dep:signal-hook", "dep:signal-hook-mio"]
+
+## Enables windows specific crates.
+windows = ["dep:winapi", "dep:crossterm_winapi"]
+
+#! ### Optional Features
+
+## Enables the [EventStream](event::EventStream) struct for async event reading.
+event-stream = ["dep:futures-core", "events"]
+
+## Enables [`serde`] for various types.
+serde = ["dep:serde", "bitflags/serde"]
+
+## Enables raw file descriptor polling / selecting instead of mio.
+use-dev-tty = ["filedescriptor", "rustix/process"]
+
+## Enables `is_*` helper functions for event enums.
+derive-more = ["dep:derive_more"]
+
+## Enables interacting with a host clipboard via [`clipboard`](clipboard/index.html)
+osc52 = ["dep:base64"]
+
+[dependencies]
+base64 = { version = "0.22", optional = true }
+bitflags = { version = "2.9" }
+derive_more = { version = "2.0.0", features = ["is_variant"], optional = true }
+document-features = "0.2.11"
+futures-core = { version = "0.3", optional = true, default-features = false }
+parking_lot = "0.12"
+serde = { version = "1.0", features = ["derive"], optional = true }
+
+# Windows dependencies
+[target.'cfg(windows)'.dependencies]
+crossterm_winapi = { version = "0.9.1", optional = true }
+winapi = { version = "0.3.9", optional = true, features = ["winuser", "winerror"] }
+
+# UNIX dependencies
+[target.'cfg(unix)'.dependencies]
+filedescriptor = { version = "0.8", optional = true }
+# Default to using rustix for UNIX systems, but provide an option to use libc for backwards
+# compatibility.
+libc = { version = "0.2", default-features = false, optional = true }
+mio = { version = "1.0", features = ["os-poll"], optional = true }
+rustix = { version = "1", default-features = false, features = ["std", "stdio", "termios"] }
+signal-hook = { version = "0.3.17", optional = true }
+signal-hook-mio = { version = "0.2.4", features = ["support-v1_0"], optional = true }
+
+[dev-dependencies]
+async-std = "1.13"
+futures = "0.3"
+futures-timer = "3.0"
+serde_json = "1.0"
+serial_test = "3.0.0"
+temp-env = "0.3.6"
+tokio = { version = "1.44", features = ["full"] }
+
+# Examples
+[[example]]
+name = "event-read"
+required-features = ["bracketed-paste", "events"]
+
+[[example]]
+name = "event-match-modifiers"
+required-features = ["bracketed-paste", "events"]
+
+[[example]]
+name = "event-poll-read"
+required-features = ["bracketed-paste", "events"]
+
+[[example]]
+name = "event-stream-async-std"
+required-features = ["event-stream", "events"]
+
+[[example]]
+name = "event-stream-tokio"
+required-features = ["event-stream", "events"]
+
+[[example]]
+name = "event-read-char-line"
+required-features = ["events"]
+
+[[example]]
+name = "stderr"
+required-features = ["events"]
+
+[[example]]
+name = "key-display"
+required-features = ["events"]
+
+[[example]]
+name = "copy-to-clipboard"
+required-features = ["osc52"]
diff --git b/rust-vendor/crossterm/docs/.gitignore b/rust-vendor/crossterm/docs/.gitignore
new file mode 100644
index 0000000..52a6b80
--- /dev/null
+++ b/rust-vendor/crossterm/docs/.gitignore
@@ -0,0 +1 @@
+book
diff --git b/rust-vendor/crunchy/.cargo_vcs_info.json b/rust-vendor/crunchy/.cargo_vcs_info.json
new file mode 100644
index 0000000..16b80d5
--- /dev/null
+++ b/rust-vendor/crunchy/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ba7b86cea6ba89ccfc72ccb24cc4a4ac6d9c6272"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/crunchy/Cargo.toml.orig b/rust-vendor/crunchy/Cargo.toml.orig
new file mode 100644
index 0000000..f0a4bd0
--- /dev/null
+++ b/rust-vendor/crunchy/Cargo.toml.orig
@@ -0,0 +1,23 @@
+[package]
+name = "crunchy"
+version = "0.2.4"
+authors = ["Eira Fransham <jackefransham@gmail.com>"]
+description = "Crunchy unroller: deterministically unroll constant loops"
+repository = "https://github.com/eira-fransham/crunchy"
+homepage = "https://github.com/eira-fransham/crunchy"
+readme = "README.md"
+license = "MIT"
+build = "build.rs"
+edition = "2021"
+
+[dependencies]
+
+[features]
+"std" = []
+"limit_64" = []
+"limit_128" = []
+"limit_256" = []
+"limit_512" = []
+"limit_1024" = []
+"limit_2048" = []
+"default" = ["limit_128"]
diff --git b/rust-vendor/crypto-common/.cargo_vcs_info.json b/rust-vendor/crypto-common/.cargo_vcs_info.json
new file mode 100644
index 0000000..d742023
--- /dev/null
+++ b/rust-vendor/crypto-common/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "66a997ccf5776ce873da5a48e2885a9908e940f6"
+ },
+ "path_in_vcs": "crypto-common"
+}
\ No newline at end of file
diff --git b/rust-vendor/crypto-common/Cargo.toml.orig b/rust-vendor/crypto-common/Cargo.toml.orig
new file mode 100644
index 0000000..12542dc
--- /dev/null
+++ b/rust-vendor/crypto-common/Cargo.toml.orig
@@ -0,0 +1,27 @@
+[package]
+name = "crypto-common"
+description = "Common cryptographic traits"
+version = "0.1.7"
+authors = ["RustCrypto Developers"]
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+edition = "2018"
+documentation = "https://docs.rs/crypto-common"
+repository = "https://github.com/RustCrypto/traits"
+keywords = ["crypto", "traits"]
+categories = ["cryptography", "no-std"]
+
+[dependencies]
+generic-array = { version = "=0.14.7", features = ["more_lengths"] }
+typenum = "1.14" # earlier versions of typenum don't satisfy the 'static bound on U* types
+
+# optional dependencies
+rand_core = { version = "0.6", optional = true }
+
+[features]
+std = []
+getrandom = ["rand_core/getrandom"]
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/ctor/.cargo_vcs_info.json b/rust-vendor/ctor/.cargo_vcs_info.json
new file mode 100644
index 0000000..de24658
--- /dev/null
+++ b/rust-vendor/ctor/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ef11f03abbb2f1c1c9f140d50792ba51d4829e96"
+ },
+ "path_in_vcs": "ctor"
+}
\ No newline at end of file
diff --git b/rust-vendor/ctor/Cargo.toml.orig b/rust-vendor/ctor/Cargo.toml.orig
new file mode 100644
index 0000000..3021a96
--- /dev/null
+++ b/rust-vendor/ctor/Cargo.toml.orig
@@ -0,0 +1,35 @@
+[package]
+name = "ctor"
+version = "0.6.3"
+authors = ["Matt Mastracci <matthew@mastracci.com>"]
+edition = "2021"
+description = "__attribute__((constructor)) for Rust"
+license = "Apache-2.0 OR MIT"
+repository = "https://github.com/mmastrac/rust-ctor"
+readme = "../README.md"
+
+[features]
+default = ["dtor", "proc_macro", "__no_warn_on_missing_unsafe"]
+
+# Enable the dtor re-export
+dtor = ["dep:dtor"]
+
+# Enable the proc_macro
+proc_macro = ["dep:ctor-proc-macro", "dtor?/proc_macro"]
+
+# For nightly users, used(linker) may be a better choice
+used_linker = ["dtor?/used_linker"]
+
+# As we are warning on missing unsafe, allow users to temporarily opt out
+__no_warn_on_missing_unsafe = ["dtor?/__no_warn_on_missing_unsafe"]
+
+[dependencies]
+ctor-proc-macro = { version = "=0.0.7", optional = true }
+dtor = { version = "0.1.0", default-features = false, optional = true }
+
+[dev-dependencies]
+libc-print = "0.1.20"
+
+[[example]]
+name = "example"
+path = "src/example.rs"
diff --git b/rust-vendor/ctor-proc-macro/.cargo_vcs_info.json b/rust-vendor/ctor-proc-macro/.cargo_vcs_info.json
new file mode 100644
index 0000000..01488be
--- /dev/null
+++ b/rust-vendor/ctor-proc-macro/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "350d397394f91332517cf2924737b79edf9581ab"
+ },
+ "path_in_vcs": "ctor-proc-macro"
+}
\ No newline at end of file
diff --git b/rust-vendor/ctor-proc-macro/Cargo.toml.orig b/rust-vendor/ctor-proc-macro/Cargo.toml.orig
new file mode 100644
index 0000000..1ff08bc
--- /dev/null
+++ b/rust-vendor/ctor-proc-macro/Cargo.toml.orig
@@ -0,0 +1,15 @@
+[package]
+name = "ctor-proc-macro"
+version = "0.0.7"
+authors = ["Matt Mastracci <matthew@mastracci.com>"]
+edition = "2021"
+description = "proc-macro support for the ctor crate"
+license = "Apache-2.0 OR MIT"
+repository = "https://github.com/mmastrac/rust-ctor"
+readme = "README.md"
+
+[features]
+default = []
+
+[lib]
+proc-macro = true
diff --git b/rust-vendor/ctrlc/.cargo_vcs_info.json b/rust-vendor/ctrlc/.cargo_vcs_info.json
new file mode 100644
index 0000000..7c29441
--- /dev/null
+++ b/rust-vendor/ctrlc/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "c619fb2dd196228b193cb2f2762baac51f97c1d9"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/ctrlc/.github/workflows/ci.yml b/rust-vendor/ctrlc/.github/workflows/ci.yml
new file mode 100644
index 0000000..34f92c1
--- /dev/null
+++ b/rust-vendor/ctrlc/.github/workflows/ci.yml
@@ -0,0 +1,45 @@
+name: CI
+
+on:
+ push:
+ branches: [master]
+ pull_request:
+ branches: [master]
+
+jobs:
+ test:
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ rust: [stable, beta, nightly]
+ include:
+ - os: windows-latest
+ rust: stable-x86_64-pc-windows-gnu
+ - os: windows-latest
+ rust: nightly-x86_64-pc-windows-gnu
+ - os: windows-latest
+ rust: stable-i686-pc-windows-msvc
+ - os: windows-latest
+ rust: nightly-i686-pc-windows-msvc
+ - os: windows-latest
+ rust: stable-i686-pc-windows-gnu
+ - os: windows-latest
+ rust: nightly-i686-pc-windows-gnu
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: ${{ matrix.rust }}
+ - run: cargo build
+ - run: cargo build --features termination
+ - run: cargo test
+ - run: cargo test --features termination
+
+ fmt:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - run: cargo fmt --check
diff --git b/rust-vendor/ctrlc/Cargo.toml.orig b/rust-vendor/ctrlc/Cargo.toml.orig
new file mode 100644
index 0000000..5c7edc5
--- /dev/null
+++ b/rust-vendor/ctrlc/Cargo.toml.orig
@@ -0,0 +1,46 @@
+[package]
+name = "ctrlc"
+version = "3.5.1"
+authors = ["Antti Keränen <detegr@gmail.com>"]
+description = "Easy Ctrl-C handler for Rust projects"
+documentation = "https://detegr.github.io/doc/ctrlc"
+homepage = "https://github.com/Detegr/rust-ctrlc"
+keywords = ["ctrlc", "signal", "SIGINT"]
+categories = ["os"]
+license = "MIT/Apache-2.0"
+repository = "https://github.com/Detegr/rust-ctrlc.git"
+exclude = ["/.travis.yml", "/appveyor.yml"]
+edition = "2021"
+readme = "README.md"
+rust-version = "1.69.0"
+
+[target.'cfg(unix)'.dependencies]
+nix = { version = "0.30", default-features = false, features = ["signal"]}
+
+[target.'cfg(target_vendor = "apple")'.dependencies]
+dispatch2 = "0.3"
+
+[target.'cfg(windows)'.dependencies]
+windows-sys = { version = "0.61", features = ["Win32_Foundation", "Win32_System_Threading", "Win32_Security", "Win32_System_Console"] }
+
+[target.'cfg(windows)'.dev-dependencies]
+windows-sys = { version = "0.61", features = ["Win32_Storage_FileSystem", "Win32_Foundation", "Win32_System_IO", "Win32_System_Console"] }
+
+[features]
+termination = []
+
+[[test]]
+harness = false
+name = "main"
+path = "tests/main/mod.rs"
+
+[[test]]
+harness = false
+name = "issue_97"
+path = "tests/main/issue_97.rs"
+
+[dev-dependencies]
+signal-hook = "0.3"
+
+[badges]
+maintenance = { status = "passively-maintained" }
diff --git b/rust-vendor/data-encoding/.cargo_vcs_info.json b/rust-vendor/data-encoding/.cargo_vcs_info.json
new file mode 100644
index 0000000..0044fbd
--- /dev/null
+++ b/rust-vendor/data-encoding/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "73e45bed622e89e388f8090a84de5a9a78185c71"
+ },
+ "path_in_vcs": "lib"
+}
\ No newline at end of file
diff --git b/rust-vendor/data-encoding/Cargo.toml.orig b/rust-vendor/data-encoding/Cargo.toml.orig
new file mode 100644
index 0000000..589b667
--- /dev/null
+++ b/rust-vendor/data-encoding/Cargo.toml.orig
@@ -0,0 +1,33 @@
+[package]
+name = "data-encoding"
+version = "2.10.0"
+authors = ["Julien Cretin <git@ia0.eu>"]
+license = "MIT"
+edition = "2018"
+rust-version = "1.48"
+keywords = ["no_std", "base64", "base32", "hex"]
+categories = ["encoding", "no-std"]
+readme = "README.md"
+repository = "https://github.com/ia0/data-encoding"
+documentation = "https://docs.rs/data-encoding"
+description = "Efficient and customizable data-encoding functions like base64, base32, and hex"
+include = ["Cargo.toml", "LICENSE", "README.md", "src/lib.rs"]
+
+# TODO: Remove this (and its lib and xtask counterpart) once doc_cfg is in the MSRV.
+[package.metadata.docs.rs]
+rustdoc-args = ["--cfg=docsrs"]
+
+[features]
+default = ["std"]
+alloc = []
+std = ["alloc"]
+
+[lints]
+clippy.undocumented-unsafe-blocks = "warn"
+rust.elided-lifetimes-in-paths = "warn"
+rust.let-underscore-drop = "warn"
+rust.missing-debug-implementations = "warn"
+rust.missing-docs = "warn"
+rust.unreachable-pub = "warn"
+rust.unsafe-op-in-unsafe-fn = "warn"
+rust.unused-results = "warn"
diff --git b/rust-vendor/data-encoding-macro/.cargo_vcs_info.json b/rust-vendor/data-encoding-macro/.cargo_vcs_info.json
new file mode 100644
index 0000000..afc776c
--- /dev/null
+++ b/rust-vendor/data-encoding-macro/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "73e45bed622e89e388f8090a84de5a9a78185c71"
+ },
+ "path_in_vcs": "lib/macro"
+}
\ No newline at end of file
diff --git b/rust-vendor/data-encoding-macro/Cargo.toml.orig b/rust-vendor/data-encoding-macro/Cargo.toml.orig
new file mode 100644
index 0000000..eda16d2
--- /dev/null
+++ b/rust-vendor/data-encoding-macro/Cargo.toml.orig
@@ -0,0 +1,18 @@
+[package]
+name = "data-encoding-macro"
+version = "0.1.19"
+authors = ["Julien Cretin <cretin@google.com>"]
+license = "MIT"
+edition = "2018"
+rust-version = "1.48"
+keywords = ["no_std", "base64", "base32", "hex", "macro"]
+categories = ["encoding", "no-std"]
+readme = "README.md"
+repository = "https://github.com/ia0/data-encoding"
+documentation = "https://docs.rs/data-encoding-macro"
+description = "Macros for data-encoding"
+include = ["Cargo.toml", "LICENSE", "README.md", "src/lib.rs"]
+
+[dependencies]
+data-encoding = { version = "2.10.0", path = "..", default-features = false }
+data-encoding-macro-internal = { version = "0.1.17", path = "internal" }
diff --git b/rust-vendor/data-encoding-macro-internal/.cargo_vcs_info.json b/rust-vendor/data-encoding-macro-internal/.cargo_vcs_info.json
new file mode 100644
index 0000000..be4bed6
--- /dev/null
+++ b/rust-vendor/data-encoding-macro-internal/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "73e45bed622e89e388f8090a84de5a9a78185c71"
+ },
+ "path_in_vcs": "lib/macro/internal"
+}
\ No newline at end of file
diff --git b/rust-vendor/data-encoding-macro-internal/Cargo.toml.orig b/rust-vendor/data-encoding-macro-internal/Cargo.toml.orig
new file mode 100644
index 0000000..5dbac74
--- /dev/null
+++ b/rust-vendor/data-encoding-macro-internal/Cargo.toml.orig
@@ -0,0 +1,25 @@
+[package]
+name = "data-encoding-macro-internal"
+version = "0.1.17"
+authors = ["Julien Cretin <cretin@google.com>"]
+license = "MIT"
+edition = "2018"
+rust-version = "1.48"
+description = "Internal library for data-encoding-macro"
+readme = "README.md"
+repository = "https://github.com/ia0/data-encoding"
+include = ["Cargo.toml", "LICENSE", "README.md", "src/lib.rs"]
+
+[lib]
+proc-macro = true
+
+[dependencies.data-encoding]
+version = "2.10.0"
+path = "../.."
+default-features = false
+features = ["alloc"]
+
+[dependencies.syn]
+version = ">= 1, < 3"
+default-features = false
+features = ["parsing", "proc-macro"]
diff --git b/rust-vendor/deranged/.cargo_vcs_info.json b/rust-vendor/deranged/.cargo_vcs_info.json
new file mode 100644
index 0000000..81527e3
--- /dev/null
+++ b/rust-vendor/deranged/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "c249467d73779b196b68f56df8a9bf800bc89c8d"
+ },
+ "path_in_vcs": "deranged"
+}
\ No newline at end of file
diff --git b/rust-vendor/deranged/Cargo.toml.orig b/rust-vendor/deranged/Cargo.toml.orig
new file mode 100644
index 0000000..b7d14a6
--- /dev/null
+++ b/rust-vendor/deranged/Cargo.toml.orig
@@ -0,0 +1,46 @@
+[package]
+name = "deranged"
+version = "0.5.5"
+authors = ["Jacob Pratt <jacob@jhpratt.dev>"]
+edition = "2021"
+rust-version = "1.81.0"
+repository = "https://github.com/jhpratt/deranged"
+keywords = ["integer", "int", "range"]
+readme = "../README.md"
+license = "MIT OR Apache-2.0"
+description = "Ranged integers"
+include = ["src/**/*", "LICENSE-*", "README.md"]
+
+[features]
+default = []
+alloc = []
+macros = ["dep:deranged-macros"]
+num = ["dep:num-traits"]
+powerfmt = ["dep:powerfmt"]
+quickcheck = ["dep:quickcheck", "alloc"]
+rand = ["rand08", "rand09"]
+rand08 = ["dep:rand08"]
+rand09 = ["dep:rand09"]
+serde = ["dep:serde_core"]
+
+[lints]
+workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+targets = ["x86_64-unknown-linux-gnu"]
+rustdoc-args = ["--generate-link-to-definition", "--generate-macro-expansion"]
+
+[dependencies]
+deranged-macros = { workspace = true, optional = true }
+num-traits = { version = "0.2.15", optional = true, default-features = false }
+powerfmt = { version = "0.2.0", optional = true, default-features = false }
+quickcheck = { version = "1.0.3", default-features = false, optional = true }
+rand08 = { package = "rand", version = "0.8.4", optional = true, default-features = false }
+rand09 = { package = "rand", version = "0.9.0", optional = true, default-features = false }
+serde_core = { version = "1.0.220", optional = true, default-features = false }
+
+[dev-dependencies]
+rand08 = { package = "rand", version = "0.8.4" }
+rand09 = { package = "rand", version = "0.9.0" }
+serde_json = "1.0.86"
diff --git b/rust-vendor/diff/.cargo_vcs_info.json b/rust-vendor/diff/.cargo_vcs_info.json
new file mode 100644
index 0000000..4b38fb5
--- /dev/null
+++ b/rust-vendor/diff/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "0d0e68b2d462a7a55902be6b77e370e51b17fa0e"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/diff/.github/workflows/main.yml b/rust-vendor/diff/.github/workflows/main.yml
new file mode 100644
index 0000000..c601bff
--- /dev/null
+++ b/rust-vendor/diff/.github/workflows/main.yml
@@ -0,0 +1,25 @@
+name: Main
+
+on: [push, pull_request]
+
+jobs:
+ main:
+ name: ${{ matrix.os }} - ${{ matrix.rust }}
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ rust: [stable, beta, nightly]
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ override: true
+ components: clippy, rustfmt
+ - run: cargo build
+ - run: cargo test
+ - run: cargo fmt -- --check
+ if: ${{ matrix.os == 'ubuntu-latest' }}
+ - run: cargo clippy
+ continue-on-error: true
diff --git b/rust-vendor/diff/Cargo.toml.orig b/rust-vendor/diff/Cargo.toml.orig
new file mode 100644
index 0000000..657a204
--- /dev/null
+++ b/rust-vendor/diff/Cargo.toml.orig
@@ -0,0 +1,18 @@
+[package]
+name = "diff"
+version = "0.1.13"
+authors = ["Utkarsh Kukreti <utkarshkukreti@gmail.com>"]
+description = "An LCS based slice and string diffing implementation."
+license = "MIT OR Apache-2.0"
+documentation = "https://docs.rs/diff"
+homepage = "https://github.com/utkarshkukreti/diff.rs"
+repository = "https://github.com/utkarshkukreti/diff.rs"
+
+[dev-dependencies]
+speculate = "0.1.2"
+quickcheck = "1.0.3"
+criterion = "0.3.5"
+
+[[bench]]
+name = "benches"
+harness = false
diff --git b/rust-vendor/digest/.cargo_vcs_info.json b/rust-vendor/digest/.cargo_vcs_info.json
new file mode 100644
index 0000000..2a5097c
--- /dev/null
+++ b/rust-vendor/digest/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "344389411fd9718a0742435152e933a9e71461ee"
+ },
+ "path_in_vcs": "digest"
+}
\ No newline at end of file
diff --git b/rust-vendor/digest/Cargo.toml.orig b/rust-vendor/digest/Cargo.toml.orig
new file mode 100644
index 0000000..9caa10e
--- /dev/null
+++ b/rust-vendor/digest/Cargo.toml.orig
@@ -0,0 +1,35 @@
+[package]
+name = "digest"
+description = "Traits for cryptographic hash functions and message authentication codes"
+version = "0.10.7"
+authors = ["RustCrypto Developers"]
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+edition = "2018"
+documentation = "https://docs.rs/digest"
+repository = "https://github.com/RustCrypto/traits"
+keywords = ["digest", "crypto", "hash"]
+categories = ["cryptography", "no-std"]
+
+[dependencies]
+crypto-common = { version = "0.1.3", path = "../crypto-common" }
+
+# optional dependencies
+block-buffer = { version = "0.10", optional = true }
+subtle = { version = "2.4", default-features = false, optional = true }
+blobby = { version = "0.3", optional = true }
+const-oid = { version = "0.9", optional = true }
+
+[features]
+default = ["core-api"]
+core-api = ["block-buffer"] # Enable Core API traits
+mac = ["subtle"] # Enable MAC traits
+rand_core = ["crypto-common/rand_core"] # Enable random key generation methods
+oid = ["const-oid"] # OID support. WARNING: Bumps MSRV to 1.57
+alloc = []
+std = ["alloc", "crypto-common/std"]
+dev = ["blobby"]
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/displaydoc/.cargo_vcs_info.json b/rust-vendor/displaydoc/.cargo_vcs_info.json
new file mode 100644
index 0000000..b961cfb
--- /dev/null
+++ b/rust-vendor/displaydoc/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "e4028851bfb82998300237f7568a45f589a19e40"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/displaydoc/.github/workflows/ci.yml b/rust-vendor/displaydoc/.github/workflows/ci.yml
new file mode 100644
index 0000000..1713afd
--- /dev/null
+++ b/rust-vendor/displaydoc/.github/workflows/ci.yml
@@ -0,0 +1,120 @@
+on:
+ push:
+ pull_request:
+ schedule:
+ - cron: '0 0 * * *'
+
+name: Continuous integration
+
+jobs:
+ check:
+ name: Check
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ - 1.56.0
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: check
+
+ test:
+ name: Test Suite
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ - nightly
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ override: true
+ - uses: Swatinem/rust-cache@v1
+ - name: Install cargo-nextest
+ uses: baptiste0928/cargo-install@v1
+ with:
+ crate: cargo-nextest
+ version: 0.9
+ - uses: actions-rs/cargo@v1
+ with:
+ command: nextest
+ args: run
+ - uses: actions-rs/cargo@v1
+ with:
+ command: nextest
+ args: run --no-default-features
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: --doc
+
+ test-msrv:
+ name: msrv Test Suite
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - 1.56.0
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ override: true
+ - uses: Swatinem/rust-cache@v1
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: --no-default-features
+
+ fmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ - 1.56.0
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ override: true
+ - run: rustup component add rustfmt
+ - uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --all -- --check
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ steps:
+ - uses: actions/checkout@v1
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: ${{ matrix.rust }}
+ override: true
+ - run: rustup component add clippy
+ - uses: actions-rs/cargo@v1
+ with:
+ command: clippy
+ args: -- -D warnings
diff --git b/rust-vendor/displaydoc/Cargo.toml.orig b/rust-vendor/displaydoc/Cargo.toml.orig
new file mode 100644
index 0000000..c80116c
--- /dev/null
+++ b/rust-vendor/displaydoc/Cargo.toml.orig
@@ -0,0 +1,81 @@
+[package]
+name = "displaydoc"
+version = "0.2.5"
+rust-version = "1.56.0"
+authors = ["Jane Lusby <jlusby@yaah.dev>"]
+edition = "2021"
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+repository = "https://github.com/yaahc/displaydoc"
+homepage = "https://github.com/yaahc/displaydoc"
+documentation = "https://docs.rs/displaydoc"
+keywords = ["display", "derive"]
+description = """
+A derive macro for implementing the display Trait via a doc comment and string interpolation
+"""
+
+[lib]
+proc-macro = true
+path = "src/lib.rs"
+
+[features]
+default = ["std"]
+std = []
+
+[dependencies]
+syn = "2.0"
+quote = "1.0"
+proc-macro2 = "1.0"
+
+[dev-dependencies]
+trybuild = "1.0"
+static_assertions = "1.1"
+libc = { version = "0.2", default-features = false }
+rustversion = "1.0.0"
+pretty_assertions = "0.6.1"
+thiserror = "1.0.24"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
+
+[package.metadata.release]
+no-dev-version = true
+pre-release-hook = ["./update-readme.sh"]
+
+[[package.metadata.release.pre-release-replacements]]
+file = "CHANGELOG.md"
+search = "Unreleased"
+replace="{{version}}"
+
+[[package.metadata.release.pre-release-replacements]]
+file = "src/lib.rs"
+search = "#!\\[doc\\(html_root_url.*"
+replace = "#![doc(html_root_url = \"https://docs.rs/{{crate_name}}/{{version}}\")]"
+exactly = 1
+
+[[package.metadata.release.pre-release-replacements]]
+file = "CHANGELOG.md"
+search = "ReleaseDate"
+replace="{{date}}"
+
+[[package.metadata.release.pre-release-replacements]]
+file="CHANGELOG.md"
+search="<!-- next-header -->"
+replace="<!-- next-header -->\n\n# [Unreleased] - ReleaseDate"
+exactly=1
+
+# Disable this replacement on the very first release
+[[package.metadata.release.pre-release-replacements]]
+file = "CHANGELOG.md"
+search = "\\.\\.\\.HEAD"
+replace="...{{tag_name}}"
+exactly = 1
+# END SECTION, do not comment out the replacement below this, and do not reorder them
+
+[[package.metadata.release.pre-release-replacements]]
+file="CHANGELOG.md"
+search="<!-- next-url -->"
+replace="<!-- next-url -->\n[Unreleased]: https://github.com/yaahc/{{crate_name}}/compare/{{tag_name}}...HEAD"
+exactly=1
+
diff --git b/rust-vendor/divan-macros/.cargo_vcs_info.json b/rust-vendor/divan-macros/.cargo_vcs_info.json
new file mode 100644
index 0000000..59a101d
--- /dev/null
+++ b/rust-vendor/divan-macros/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "899cd5ec6987259be42bc9a9efb8f29d6937a46b"
+ },
+ "path_in_vcs": "macros"
+}
\ No newline at end of file
diff --git b/rust-vendor/divan-macros/Cargo.toml.orig b/rust-vendor/divan-macros/Cargo.toml.orig
new file mode 100644
index 0000000..87087a0
--- /dev/null
+++ b/rust-vendor/divan-macros/Cargo.toml.orig
@@ -0,0 +1,25 @@
+[package]
+name = "divan-macros"
+version = "0.1.17"
+edition = "2021"
+authors = ["Nikolai Vazquez"]
+license = "MIT OR Apache-2.0"
+description = "Macros for Divan, a statistically-comfy benchmarking library."
+repository = "https://github.com/nvzqz/divan"
+homepage = "https://github.com/nvzqz/divan"
+documentation = "https://docs.rs/divan-macros"
+categories = ["development-tools::profiling"]
+keywords = ["benchmark", "criterion", "instrument", "measure", "performance"]
+readme = "../README.md"
+
+[lib]
+proc-macro = true
+
+[dependencies]
+proc-macro2 = "1"
+quote = { version = "1", default-features = false }
+# Versions prior to *.18 fail to parse empty attribute metadata.
+syn = { version = "^2.0.18", default-features = false, features = ["full", "clone-impls", "parsing", "printing", "proc-macro"] }
+
+[dev-dependencies]
+divan = { workspace = true }
diff --git b/rust-vendor/dlv-list/.cargo/config.toml b/rust-vendor/dlv-list/.cargo/config.toml
new file mode 100644
index 0000000..df3f0bc
--- /dev/null
+++ b/rust-vendor/dlv-list/.cargo/config.toml
@@ -0,0 +1,26 @@
+[target.'cfg(all())']
+rustflags = [
+ "-Wabsolute_paths_not_starting_with_crate",
+ "-Welided_lifetimes_in_paths",
+ "-Wexplicit_outlives_requirements",
+ "-Wkeyword_idents",
+ "-Wmacro_use_extern_crate",
+ "-Wmeta_variable_misuse",
+ "-Wmissing_abi",
+ "-Wmissing_debug_implementations",
+ "-Wmissing_docs",
+ "-Wnon_ascii_idents",
+ "-Wnoop_method_call",
+ "-Wpointer_structural_match",
+ "-Wsingle_use_lifetimes",
+ "-Wtrivial_casts",
+ "-Wtrivial_numeric_casts",
+ "-Wunsafe_code",
+ "-Wunsafe_op_in_unsafe_fn",
+ "-Wunused_extern_crates",
+ "-Wunused_import_braces",
+ "-Wunused_lifetimes",
+ "-Wunused_qualifications",
+ "-Wunused_results",
+ "-Wvariant_size_differences"
+]
diff --git b/rust-vendor/dlv-list/.cargo_vcs_info.json b/rust-vendor/dlv-list/.cargo_vcs_info.json
new file mode 100644
index 0000000..6f5a46c
--- /dev/null
+++ b/rust-vendor/dlv-list/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "7454f8cabb5af8827354bc2787c53657369290a6"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/bug_report.md b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..919d4a3
--- /dev/null
+++ b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,43 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ["S-Pending", "T-Bug"]
+assignees: ''
+
+---
+
+## Bug description
+
+<!-- A clear and concise description of what the bug is. -->
+
+- Would you like to work on a fix? [y/n]
+
+## To Reproduce
+
+Steps to reproduce the behavior:
+
+1. ...
+2. ...
+3. ...
+4. ...
+
+<!-- Make sure you are able to reproduce the bug in the main branch, too. -->
+
+## Expected behavior
+
+<!-- A clear and concise description of what you expected to happen. -->
+
+## Screenshots
+
+<!-- If applicable, add screenshots to help explain your problem. -->
+
+## Environment
+
+<!-- Please fill the following information. -->
+
+- dlv-list version: [e.g. 0.1.0]
+
+## Additional context
+
+<!-- Add any other context about the problem here. -->
diff --git b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/config.yml b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..0086358
--- /dev/null
+++ b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1 @@
+blank_issues_enabled: true
diff --git b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/feature_request.md b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..d949193
--- /dev/null
+++ b/rust-vendor/dlv-list/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,28 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ["S-Pending", "T-Feature/Enhancement"]
+assignees: ''
+
+---
+
+## Motivations
+
+<!--
+If your feature request is related to a problem, please describe it.
+-->
+
+- Would you like to implement this feature? [y/n]
+
+## Solution
+
+<!-- Describe the solution you'd like. -->
+
+## Alternatives
+
+<!-- Describe any alternative solutions or features you've considered. -->
+
+## Additional context
+
+<!-- Add any other context or screenshots about the feature request here. -->
diff --git b/rust-vendor/dlv-list/.github/dependabot.yml b/rust-vendor/dlv-list/.github/dependabot.yml
new file mode 100644
index 0000000..e669886
--- /dev/null
+++ b/rust-vendor/dlv-list/.github/dependabot.yml
@@ -0,0 +1,15 @@
+version: 2
+updates:
+ - package-ecosystem: "cargo"
+ # Look for `Cargo.toml` and `Cargo.lock` in the root directory
+ directory: "/"
+ # Check for updates every Monday
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 10
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ # Check for updates every Monday
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 10
diff --git b/rust-vendor/dlv-list/.github/workflows/audit.yml b/rust-vendor/dlv-list/.github/workflows/audit.yml
new file mode 100644
index 0000000..3202482
--- /dev/null
+++ b/rust-vendor/dlv-list/.github/workflows/audit.yml
@@ -0,0 +1,27 @@
+name: Security audit
+
+on:
+ schedule:
+ # Runs at 00:00 UTC everyday
+ - cron: '0 0 * * *'
+ push:
+ paths:
+ - '**/Cargo.toml'
+ - '**/Cargo.lock'
+ pull_request:
+jobs:
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ profile: minimal
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - uses: actions-rs/audit-check@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
diff --git b/rust-vendor/dlv-list/.github/workflows/cd.yml b/rust-vendor/dlv-list/.github/workflows/cd.yml
new file mode 100644
index 0000000..ecdc2cd
--- /dev/null
+++ b/rust-vendor/dlv-list/.github/workflows/cd.yml
@@ -0,0 +1,24 @@
+name: CD
+
+on:
+ push:
+ tags:
+ - '[v]?[0-9]+.[0-9]+.[0-9]+'
+
+jobs:
+ publish-cargo:
+ name: Publishing to Cargo
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ profile: minimal
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - uses: actions-rs/cargo@v1
+ with:
+ command: publish
+ args: --token ${{ secrets.CARGO_API_KEY }}
diff --git b/rust-vendor/dlv-list/.github/workflows/ci.yml b/rust-vendor/dlv-list/.github/workflows/ci.yml
new file mode 100644
index 0000000..0e819ee
--- /dev/null
+++ b/rust-vendor/dlv-list/.github/workflows/ci.yml
@@ -0,0 +1,93 @@
+name: CI
+
+on:
+ pull_request:
+ push:
+
+jobs:
+ test:
+ strategy:
+ matrix:
+ os: [windows-latest, ubuntu-latest]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Build & run tests
+ run: cargo test --all-features
+ - name: Build & run tests without libstd
+ run: cargo test --no-default-features
+ - name: Build & run tests without libstd, but with serde
+ run: cargo test --no-default-features --features serde
+ miri:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ components: miri
+ override: true
+ - name: Test with Miri
+ run: cargo miri test --all-features
+ mutation:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Get number of CPU cores
+ uses: SimenB/github-actions-cpu-cores@v2
+ id: cpu-cores
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Install cargo-mutants
+ run: cargo install cargo-mutants
+ - name: Run mutant tests
+ run: cargo mutants --jobs ${{ steps.cpu-cores.outputs.count }} -- --all-features
+ - name: Archive results
+ uses: actions/upload-artifact@v3
+ if: failure()
+ with:
+ name: mutation-report
+ path: mutants.out
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ components: rustfmt, clippy
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Run clippy
+ run: cargo clippy --workspace --all-targets --all-features -- -D warnings
+ - name: Check format
+ run: cargo fmt --all -- --check
+ coverage:
+ runs-on: ubuntu-latest
+ env:
+ CARGO_TERM_COLOR: always
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ components: llvm-tools-preview
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Install cargo-llvm-cov
+ uses: taiki-e/install-action@cargo-llvm-cov
+ - name: Generate code coverage
+ run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
+ - name: Upload coverage to Codecov
+ uses: codecov/codecov-action@v3
+ with:
+ files: lcov.info
+ fail_ci_if_error: true
diff --git b/rust-vendor/dlv-list/Cargo.toml.orig b/rust-vendor/dlv-list/Cargo.toml.orig
new file mode 100644
index 0000000..a392a83
--- /dev/null
+++ b/rust-vendor/dlv-list/Cargo.toml.orig
@@ -0,0 +1,23 @@
+[package]
+name = "dlv-list"
+version = "0.5.2"
+authors = ["Scott Godwin <sgodwincs@gmail.com>"]
+license = "MIT OR Apache-2.0"
+edition = "2021"
+repository = "https://github.com/sgodwincs/dlv-list-rs"
+description = "Semi-doubly linked list implemented using a vector"
+readme = "README.md"
+categories = ["data-structures"]
+keywords = ["vector", "linked", "list"]
+
+[dependencies]
+const-random = "0.1.15"
+serde = { version = "1", optional = true, default-features = false }
+
+[dev-dependencies]
+coverage-helper = "0.2.0"
+serde_test = "1.0.144"
+
+[features]
+default = ["std"]
+std = []
diff --git b/rust-vendor/dns-lookup/.cargo_vcs_info.json b/rust-vendor/dns-lookup/.cargo_vcs_info.json
new file mode 100644
index 0000000..b8e58db
--- /dev/null
+++ b/rust-vendor/dns-lookup/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "e360789a150e41db2c5ddc5d347b7362f70e146f"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/dns-lookup/Cargo.toml.orig b/rust-vendor/dns-lookup/Cargo.toml.orig
new file mode 100644
index 0000000..3f8685c
--- /dev/null
+++ b/rust-vendor/dns-lookup/Cargo.toml.orig
@@ -0,0 +1,30 @@
+[package]
+name = "dns-lookup"
+version = "3.0.1"
+edition = "2021"
+authors = ["Josh Driver <keeperofdakeys@gmail.com>"]
+description = "A simple dns resolving api, much like rust's unstable api. Also includes getaddrinfo and getnameinfo wrappers for libc variants."
+documentation = "https://docs.rs/dns-lookup"
+repository = "https://github.com/keeperofdakeys/dns-lookup/"
+readme = "README.md"
+keywords = ["dns", "resolve", "lookup", "getaddrinfo", "getnameinfo"]
+license = "MIT/Apache-2.0"
+include = [
+ "src/**",
+ "README.md",
+ "LICENSE*",
+ "Cargo.*"
+]
+
+[dependencies]
+socket2 = "^0.6.0"
+cfg-if = "^1.0"
+
+# Note that version of windows-sys is pinned to version used in socket2 release
+# due to use of shared variables like SOCKADDR.
+[target."cfg(windows)".dependencies.windows-sys]
+version = "^0.60"
+features = ["Win32_Networking_WinSock", "Win32_Foundation"]
+
+[target."cfg(unix)".dependencies]
+libc = "^0.2"
diff --git b/rust-vendor/document-features/.cargo_vcs_info.json b/rust-vendor/document-features/.cargo_vcs_info.json
new file mode 100644
index 0000000..7d1acc1
--- /dev/null
+++ b/rust-vendor/document-features/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "721e708012254b81760bd2befdae0970e7a2615e"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/document-features/.github/workflows/rust.yml b/rust-vendor/document-features/.github/workflows/rust.yml
new file mode 100644
index 0000000..9c74dc7
--- /dev/null
+++ b/rust-vendor/document-features/.github/workflows/rust.yml
@@ -0,0 +1,79 @@
+name: Rust
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+env:
+ CARGO_TERM_COLOR: always
+ RUSTFLAGS: -D warnings
+ RUST_BACKTRACE: 1
+
+jobs:
+ test:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ - 1.56.0
+ - nightly
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Run tests
+ run: cargo test --verbose --all-features
+ - name: Run docs
+ run: cargo doc --verbose
+ format:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - name: Run rustfmt
+ run: cargo fmt --all -- --check
+
+
+ crater:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: nightly
+ - name: setup patch
+ run: |
+ echo "" >> ~/.cargo/config.toml
+ echo [patch.crates-io] >> ~/.cargo/config.toml
+ echo document-features = { path = \"$GITHUB_WORKSPACE\" } >> ~/.cargo/config.toml
+ - name: create project and generate docs
+ run: |
+ cd ~
+ cargo new crater
+ cd crater
+ cargo add quick-xml -F document-features
+ cargo add serde_with -F guide
+ cargo add serial_test -F docsrs
+ cargo add wgpu-core
+ cargo add wgpu
+ cargo add gix -F document-features
+ cargo add kstring -F document-features
+ cargo add ratatui -F document-features
+ cargo add re_types
+ cargo add slint -F document-features
+ cargo add egui-winit -F document-features
+ cargo add ehttp
+ cargo add snapbox -F document-features
+ cargo add fast-image-resize
+ cargo add rhai -F document-features
+ cargo add embassy-executor
+ cargo add embassy-time
+
+ cargo doc
+ grep -r ">No documented features in Cargo.toml<" target/doc || exit 0
+ false
diff --git b/rust-vendor/document-features/Cargo.toml.orig b/rust-vendor/document-features/Cargo.toml.orig
new file mode 100644
index 0000000..8baafb6
--- /dev/null
+++ b/rust-vendor/document-features/Cargo.toml.orig
@@ -0,0 +1,28 @@
+# Copyright © SixtyFPS GmbH <info@sixtyfps.io>
+# SPDX-License-Identifier: MIT OR Apache-2.0
+
+[package]
+name = "document-features"
+version = "0.2.12"
+authors = ["Slint Developers <info@slint.dev>"]
+edition = "2018"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/slint-ui/document-features"
+homepage = "https://slint.rs"
+description = "Extract documentation for the feature flags from comments in Cargo.toml"
+categories = ["development-tools"]
+keywords = ["documentation", "features", "rustdoc", "macro"]
+rust-version = "1.56"
+
+[lib]
+proc-macro = true
+path = "lib.rs"
+
+[features]
+default = []
+
+## Internal feature used only for the tests, don't enable
+self-test = []
+
+[dependencies]
+litrs = "1.0.0"
diff --git b/rust-vendor/dtor/.cargo_vcs_info.json b/rust-vendor/dtor/.cargo_vcs_info.json
new file mode 100644
index 0000000..1dabb13
--- /dev/null
+++ b/rust-vendor/dtor/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d843ae06ae2ade663f45e82600df151620973193"
+ },
+ "path_in_vcs": "dtor"
+}
\ No newline at end of file
diff --git b/rust-vendor/dtor/Cargo.toml.orig b/rust-vendor/dtor/Cargo.toml.orig
new file mode 100644
index 0000000..5798cf2
--- /dev/null
+++ b/rust-vendor/dtor/Cargo.toml.orig
@@ -0,0 +1,24 @@
+[package]
+name = "dtor"
+version = "0.1.1"
+authors = ["Matt Mastracci <matthew@mastracci.com>"]
+edition = "2021"
+description = "__attribute__((destructor)) for Rust"
+license = "Apache-2.0 OR MIT"
+repository = "https://github.com/mmastrac/rust-ctor"
+readme = "README.md"
+
+[features]
+default = ["proc_macro", "__no_warn_on_missing_unsafe"]
+proc_macro = ["dep:dtor-proc-macro"]
+used_linker = []
+__no_warn_on_missing_unsafe = []
+
+[dependencies]
+dtor-proc-macro = { version = "=0.0.6", optional = true }
+
+[dev-dependencies]
+libc-print = "0.1.20"
+
+[lib]
+name = "dtor"
diff --git b/rust-vendor/dtor-proc-macro/.cargo_vcs_info.json b/rust-vendor/dtor-proc-macro/.cargo_vcs_info.json
new file mode 100644
index 0000000..621bb01
--- /dev/null
+++ b/rust-vendor/dtor-proc-macro/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a28906f635093f9cb6ee90068a3a6e16872ae903"
+ },
+ "path_in_vcs": "dtor-proc-macro"
+}
\ No newline at end of file
diff --git b/rust-vendor/dtor-proc-macro/Cargo.toml.orig b/rust-vendor/dtor-proc-macro/Cargo.toml.orig
new file mode 100644
index 0000000..0b75f90
--- /dev/null
+++ b/rust-vendor/dtor-proc-macro/Cargo.toml.orig
@@ -0,0 +1,15 @@
+[package]
+name = "dtor-proc-macro"
+version = "0.0.6"
+authors = ["Matt Mastracci <matthew@mastracci.com>"]
+edition = "2021"
+description = "proc-macro support for the dtor crate"
+license = "Apache-2.0 OR MIT"
+repository = "https://github.com/mmastrac/rust-ctor"
+readme = "README.md"
+
+[features]
+default = []
+
+[lib]
+proc-macro = true
diff --git b/rust-vendor/dunce/.appveyor.yml b/rust-vendor/dunce/.appveyor.yml
new file mode 100644
index 0000000..66989c9
--- /dev/null
+++ b/rust-vendor/dunce/.appveyor.yml
@@ -0,0 +1,32 @@
+os: Visual Studio 2015
+
+environment:
+ matrix:
+ # Stable 64-bit MSVC
+ - channel: stable
+ target: x86_64-pc-windows-msvc
+ # Nightly 32-bit MSVC
+ - channel: nightly
+ target: i686-pc-windows-msvc
+ # Beta 32-bit GNU
+ - channel: beta
+ target: i686-pc-windows-gnu
+
+matrix:
+ allow_failures:
+ - channel: nightly
+ - channel: beta
+
+install:
+ - appveyor DownloadFile https://win.rustup.rs/ -FileName rustup-init.exe
+ - rustup-init -yv --default-toolchain %channel% --default-host %target%
+ - set PATH=%PATH%;%USERPROFILE%\.cargo\bin
+ - rustc -vV
+ - cargo -vV
+
+# Uses 'cargo test' to run tests and build. Alternatively, the project may call compiled programs
+# directly or perform other testing commands. Rust will automatically be placed in the PATH
+# environment variable.
+build: false
+test_script:
+ - cargo test --all --verbose
diff --git b/rust-vendor/dunce/.cargo_vcs_info.json b/rust-vendor/dunce/.cargo_vcs_info.json
new file mode 100644
index 0000000..2598e06
--- /dev/null
+++ b/rust-vendor/dunce/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "1ee29a83526c9f4c3618e1335f0454c878a54dcf"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/dunce/.gitlab-ci.yml b/rust-vendor/dunce/.gitlab-ci.yml
new file mode 100644
index 0000000..200d884
--- /dev/null
+++ b/rust-vendor/dunce/.gitlab-ci.yml
@@ -0,0 +1,10 @@
+# This file is a template, and might need editing before it works on your project.
+# Official language image. Look for the different tagged releases at:
+# https://hub.docker.com/r/library/rust/tags/
+image: "rust:latest"
+
+# Use cargo to test the project
+test:cargo:
+ script:
+ - rustc --version && cargo --version # Print version info for debugging
+ - cargo test --verbose
diff --git b/rust-vendor/dunce/Cargo.toml.orig b/rust-vendor/dunce/Cargo.toml.orig
new file mode 100644
index 0000000..d66db0b
--- /dev/null
+++ b/rust-vendor/dunce/Cargo.toml.orig
@@ -0,0 +1,23 @@
+[package]
+authors = ["Kornel <kornel@geekhood.net>"]
+categories = ["filesystem"]
+description = "Normalize Windows paths to the most compatible format, avoiding UNC where possible"
+documentation = "https://docs.rs/dunce"
+homepage = "https://lib.rs/crates/dunce"
+keywords = ["realpath", "unc", "canonicalize", "windows", "deunc"]
+license = "CC0-1.0 OR MIT-0 OR Apache-2.0"
+name = "dunce"
+readme = "README.md"
+repository = "https://gitlab.com/kornelski/dunce"
+version = "1.0.5"
+edition = "2021"
+
+[badges]
+gitlab = { repository = "kornelski/dunce" }
+appveyor = { repository = "pornel/dunce" }
+maintenance = { status = "passively-maintained" }
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
+rustdoc-args = ["--generate-link-to-definition"]
+
diff --git b/rust-vendor/either/.cargo_vcs_info.json b/rust-vendor/either/.cargo_vcs_info.json
new file mode 100644
index 0000000..1cca00e
--- /dev/null
+++ b/rust-vendor/either/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "59ae1fce0cec62c886fcd486e06b7e219bc7ce48"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/either/.github/workflows/ci.yml b/rust-vendor/either/.github/workflows/ci.yml
new file mode 100644
index 0000000..2f3843b
--- /dev/null
+++ b/rust-vendor/either/.github/workflows/ci.yml
@@ -0,0 +1,83 @@
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ merge_group:
+
+name: CI
+
+jobs:
+ ci:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust:
+ - 1.63.0 # MSRV
+ - stable
+ - beta
+ - nightly
+ features:
+ - ""
+ - "serde"
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Cache the registry
+ uses: actions/cache@v4
+ if: startsWith(matrix.rust, '1')
+ with:
+ path: ~/.cargo/registry/index
+ key: cargo-${{ matrix.rust }}-git-index
+
+ - name: Set up Rust
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+
+ - name: Build (no_std)
+ run: cargo build --no-default-features --features "${{ matrix.features }}"
+
+ - name: Build
+ run: cargo build --features "${{ matrix.features }}"
+
+ - name: Test
+ run: cargo test --features "${{ matrix.features }}"
+
+ - name: Doc
+ run: cargo doc --features "${{ matrix.features }}"
+
+ clippy:
+ name: Rustfmt and Clippy
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v4
+
+ - name: Set up nightly Rust
+ uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: rustfmt, clippy
+
+ - name: Rustfmt
+ run: cargo fmt --all -- --check
+
+ - name: Clippy
+ run: cargo clippy # -- -D warnings
+
+ # One job that "summarizes" the success state of this pipeline. This can then be added to branch
+ # protection, rather than having to add each job separately.
+ success:
+ name: Success
+ runs-on: ubuntu-latest
+ needs: [ci, clippy]
+ # Github branch protection is exceedingly silly and treats "jobs skipped because a dependency
+ # failed" as success. So we have to do some contortions to ensure the job fails if any of its
+ # dependencies fails.
+ if: always() # make sure this is never "skipped"
+ steps:
+ # Manually check the status of all dependencies. `if: failure()` does not work.
+ - name: check if any dependency failed
+ run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
diff --git b/rust-vendor/either/Cargo.toml.orig b/rust-vendor/either/Cargo.toml.orig
new file mode 100644
index 0000000..1d17f73
--- /dev/null
+++ b/rust-vendor/either/Cargo.toml.orig
@@ -0,0 +1,40 @@
+[package]
+name = "either"
+version = "1.15.0"
+authors = ["bluss"]
+edition = "2021"
+rust-version = "1.63.0"
+
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rayon-rs/either"
+documentation = "https://docs.rs/either/1/"
+readme = "README-crates.io.md"
+
+description = """
+The enum `Either` with variants `Left` and `Right` is a general purpose sum type with two cases.
+"""
+
+keywords = ["data-structure", "no_std"]
+categories = ["data-structures", "no-std"]
+
+[dependencies]
+serde = { version = "1.0.95", optional = true, default-features = false, features = ["alloc", "derive"] }
+
+[features]
+default = ["std"]
+std = []
+use_std = ["std"] # deprecated alias
+
+[dev-dependencies]
+serde_json = "1.0.0"
+
+[package.metadata.release]
+allow-branch = ["main"]
+sign-tag = true
+tag-name = "{{version}}"
+
+[package.metadata.docs.rs]
+features = ["serde"]
+
+[package.metadata.playground]
+features = ["serde"]
diff --git b/rust-vendor/equivalent/.cargo_vcs_info.json b/rust-vendor/equivalent/.cargo_vcs_info.json
new file mode 100644
index 0000000..3ddaf65
--- /dev/null
+++ b/rust-vendor/equivalent/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "44cdd44f8b8ebb5f9ae096c7550a5e74ffb7d6ae"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/equivalent/.github/workflows/ci.yml b/rust-vendor/equivalent/.github/workflows/ci.yml
new file mode 100644
index 0000000..06260a0
--- /dev/null
+++ b/rust-vendor/equivalent/.github/workflows/ci.yml
@@ -0,0 +1,48 @@
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+ merge_group:
+
+name: CI
+
+env:
+ CARGO_TERM_COLOR: always
+ CARGO_INCREMENTAL: 0
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ include:
+ - rust: 1.6.0 # MSRV
+ - rust: stable
+ - rust: beta
+ - rust: nightly
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Tests
+ run: |
+ cargo build --verbose
+ cargo test --verbose
+
+ # One job that "summarizes" the success state of this pipeline. This can then be added to branch
+ # protection, rather than having to add each job separately.
+ success:
+ name: Success
+ runs-on: ubuntu-latest
+ needs: [tests]
+ # Github branch protection is exceedingly silly and treats "jobs skipped because a dependency
+ # failed" as success. So we have to do some contortions to ensure the job fails if any of its
+ # dependencies fails.
+ if: always() # make sure this is never "skipped"
+ steps:
+ # Manually check the status of all dependencies. `if: failure()` does not work.
+ - name: check if any dependency failed
+ run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
diff --git b/rust-vendor/equivalent/Cargo.toml.orig b/rust-vendor/equivalent/Cargo.toml.orig
new file mode 100644
index 0000000..68f4303
--- /dev/null
+++ b/rust-vendor/equivalent/Cargo.toml.orig
@@ -0,0 +1,9 @@
+[package]
+name = "equivalent"
+version = "1.0.2"
+rust-version = "1.6"
+license = "Apache-2.0 OR MIT"
+description = "Traits for key comparison in maps."
+repository = "https://github.com/indexmap-rs/equivalent"
+keywords = ["hashmap", "no_std"]
+categories = ["data-structures", "no-std"]
diff --git b/rust-vendor/errno/.cargo_vcs_info.json b/rust-vendor/errno/.cargo_vcs_info.json
new file mode 100644
index 0000000..cf97390
--- /dev/null
+++ b/rust-vendor/errno/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ffc03bfb9eb491013567115e6eea560948cd9e52"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/errno/.github/dependabot.yml b/rust-vendor/errno/.github/dependabot.yml
new file mode 100644
index 0000000..98e44ee
--- /dev/null
+++ b/rust-vendor/errno/.github/dependabot.yml
@@ -0,0 +1,10 @@
+version: 2
+updates:
+ - package-ecosystem: "cargo"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
diff --git b/rust-vendor/errno/.github/workflows/main.yml b/rust-vendor/errno/.github/workflows/main.yml
new file mode 100644
index 0000000..cba4b9e
--- /dev/null
+++ b/rust-vendor/errno/.github/workflows/main.yml
@@ -0,0 +1,89 @@
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ schedule:
+ - cron: '5 21 * * 5'
+ workflow_dispatch:
+
+name: CI
+
+jobs:
+ test:
+ name: Test
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ rust: [stable, nightly, '1.56']
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Pin to old dependency versions (Rust 1.56 only)
+ if: matrix.rust == '1.56'
+ run: |
+ cargo update -p libc --precise 0.2.163
+ cargo update -p windows-sys --precise 0.52.0
+ - name: Setup cache
+ uses: Swatinem/rust-cache@v2
+ - name: Test (no features)
+ run: cargo test --no-default-features
+ - name: Test (all features)
+ run: cargo test --all-features
+
+
+ wasi:
+ name: Test WASI
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@nightly
+ with:
+ targets: wasm32-wasip2
+ - name: Install wasmtime
+ run: |
+ curl https://wasmtime.dev/install.sh -sSf | bash
+ echo "$HOME/.wasmtime/bin" >> $GITHUB_PATH
+ - name: Test (no features)
+ run: CARGO_TARGET_WASM32_WASIP2_RUNNER=wasmtime cargo test --target wasm32-wasip2 --no-default-features
+ - name: Test (all features)
+ run: CARGO_TARGET_WASM32_WASIP2_RUNNER=wasmtime cargo test --target wasm32-wasip2 --all-features
+
+ emscripten:
+ name: Test Emscripten
+ runs-on: ubuntu-latest
+ container: emscripten/emsdk:latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@nightly
+ with:
+ targets: wasm32-unknown-emscripten
+ - name: Test (no features)
+ run: CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_RUNNER=node cargo test --target wasm32-unknown-emscripten --no-default-features
+ - name: Test (all features)
+ run: CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_RUNNER=node cargo test --target wasm32-unknown-emscripten --all-features
+
+
+ lints:
+ name: Rustfmt & Clippy
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v5
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ components: rustfmt, clippy
+ - name: Check formatting
+ run: cargo fmt --check
+ - name: Check clippy
+ run: cargo clippy -- -D warnings
diff --git b/rust-vendor/errno/Cargo.toml.orig b/rust-vendor/errno/Cargo.toml.orig
new file mode 100644
index 0000000..f3f5ce0
--- /dev/null
+++ b/rust-vendor/errno/Cargo.toml.orig
@@ -0,0 +1,39 @@
+[package]
+
+name = "errno"
+version = "0.3.14"
+authors = ["Chris Wong <lambda.fairy@gmail.com>", "Dan Gohman <dev@sunfishcode.online>"]
+
+license = "MIT OR Apache-2.0"
+edition = "2018"
+documentation = "https://docs.rs/errno"
+repository = "https://github.com/lambda-fairy/rust-errno"
+description = "Cross-platform interface to the `errno` variable."
+categories = ["no-std", "os"]
+rust-version = "1.56"
+
+[target.'cfg(unix)'.dependencies]
+libc = { version = "0.2", default-features = false }
+
+[target.'cfg(windows)'.dependencies.windows-sys]
+version = ">=0.52, <0.62"
+features = [
+ "Win32_Foundation",
+ "Win32_System_Diagnostics_Debug",
+]
+
+[target.'cfg(target_os="wasi")'.dependencies]
+libc = { version = "0.2", default-features = false }
+
+[target.'cfg(target_os="hermit")'.dependencies]
+libc = { version = "0.2", default-features = false }
+
+[features]
+default = ["std"]
+std = ["libc/std"]
+
+# TODO: Remove this exemption when Cygwin support lands in Rust stable
+# https://github.com/rust-lang/rust/pull/134999
+[lints.rust.unexpected_cfgs]
+level = "warn"
+check-cfg = ['cfg(target_os, values("cygwin"))']
diff --git b/rust-vendor/exacl/.cargo_vcs_info.json b/rust-vendor/exacl/.cargo_vcs_info.json
new file mode 100644
index 0000000..78db381
--- /dev/null
+++ b/rust-vendor/exacl/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "379aa3a65d85da3c642b32445b62b454a030a930"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/exacl/.cirrus.yml b/rust-vendor/exacl/.cirrus.yml
new file mode 100644
index 0000000..cfe14fe
--- /dev/null
+++ b/rust-vendor/exacl/.cirrus.yml
@@ -0,0 +1,60 @@
+# Config file for cirrus-ci.org
+# Adapted from https://github.com/Stebalien/xattr
+
+task:
+ name: CI / build (freebsd)
+
+ matrix:
+ - name: CI / build (freebsd-13.2)
+ freebsd_instance:
+ image_family: freebsd-13-2
+ - name: CI / build (freebsd-14.0)
+ freebsd_instance:
+ image_family: freebsd-14-0
+
+ sysinfo_script:
+ # Record info about the test environment.
+ - mount
+ - df -h
+ - sysctl hw.model hw.ncpu hw.physmem
+ - freebsd-version
+ # Create a 5 MB memory based FS with acls enabled and
+ # mount it to a sub-directory of /tmp (where it won't
+ # interfere with other uses of /tmp.)
+ - mkdir /tmp/exacl_acls /tmp/exacl_nfsv4acls
+ - mdmfs -o acls -s 5m md /tmp/exacl_acls
+ - mdmfs -o nfsv4acls -s 5m md /tmp/exacl_nfsv4acls
+ - mount
+ - env
+ - pkg info
+
+ setup_script:
+ # Install Rust.
+ - pkg install -y bash llvm11
+ - curl https://sh.rustup.rs -sSf --output rustup.sh
+ - sh rustup.sh -y
+ # Install shunit2.
+ - mkdir -p /tmp/bin
+ - curl https://raw.githubusercontent.com/kward/shunit2/master/shunit2 -sSf --output /tmp/bin/shunit2
+ - chmod ugo+x /tmp/bin/shunit2
+
+ test_script:
+ - . $HOME/.cargo/env
+ # Set up path for shunit2.
+ - export PATH="$PATH:/tmp/bin"
+ - cargo fetch
+ - cargo build # Build no-serde
+ - cargo build --features serde # Build with serde
+ - cargo test --no-run --features serde # Compile only
+ # Run tests on our mem-based FS with acls.
+ - export TMPDIR=/tmp/exacl_acls
+ - cargo test --features serde
+ - export TMPDIR=/tmp/exacl_nfsv4acls
+ - cargo test --features serde
+ - ./tests/run_tests.sh
+ - export TMPDIR=/tmp
+ - ./ci/bindgen.sh
+
+ lint_script:
+ - . $HOME/.cargo/env
+ - ./ci/lint.sh
diff --git b/rust-vendor/exacl/.github/codecov.yml b/rust-vendor/exacl/.github/codecov.yml
new file mode 100644
index 0000000..006be2d
--- /dev/null
+++ b/rust-vendor/exacl/.github/codecov.yml
@@ -0,0 +1,12 @@
+# Reference:
+# https://docs.codecov.io/docs/codecovyml-reference
+
+comment: false
+
+coverage:
+ status:
+ project:
+ default:
+ informational: true
+
+ patch: off
diff --git b/rust-vendor/exacl/.github/dependabot.yml b/rust-vendor/exacl/.github/dependabot.yml
new file mode 100644
index 0000000..b99f7a0
--- /dev/null
+++ b/rust-vendor/exacl/.github/dependabot.yml
@@ -0,0 +1,15 @@
+# Reference:
+# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+
+updates:
+ - package-ecosystem: "cargo"
+ directory: "/"
+ schedule:
+ interval: "weekly"
+
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "weekly"
diff --git b/rust-vendor/exacl/.github/workflows/ci.yml b/rust-vendor/exacl/.github/workflows/ci.yml
new file mode 100644
index 0000000..8e530cd
--- /dev/null
+++ b/rust-vendor/exacl/.github/workflows/ci.yml
@@ -0,0 +1,76 @@
+name: CI
+
+on:
+ push:
+ branches: [ "*" ]
+ schedule:
+ # Every Saturday at 4:30 AM UTC.
+ - cron: '30 4 * * 6'
+
+env:
+ CARGO_TERM_COLOR: always
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ os: [ubuntu-22.04, macos-13, ubuntu-20.04, macos-12]
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1
+ with:
+ egress-policy: audit
+
+ - name: Checkout
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Update Rust Toolchain
+ run: rustup update
+ - name: Install dependencies (macOS)
+ run: brew install shunit2 shellcheck shfmt
+ if: runner.os == 'macOS'
+ - name: Install dependencies (Linux)
+ run: |
+ sudo apt-get update
+ sudo apt-get -y install libacl1-dev acl shunit2 valgrind shellcheck
+ if: runner.os == 'Linux'
+ - name: Fetch
+ run: cargo fetch
+ - name: Build (no-serde)
+ run: cargo build
+ - name: Build (serde)
+ run: cargo build --features serde
+ - name: Unit Test (no-serde)
+ run: cargo test
+ - name: Unit Test (serde)
+ run: RUST_LOG=debug cargo test --features serde
+ - name: Run integration tests
+ run: ./tests/run_tests.sh
+ - name: Run memory tests (Linux)
+ run: ./tests/run_tests.sh memcheck
+ if: runner.os == 'Linux'
+ - name: Run TMPFS tests (Linux)
+ run: |
+ mkdir /run/user/$UID/exacl
+ export TMPDIR=/run/user/$UID/exacl
+ RUST_LOG=debug cargo test --features serde
+ ./tests/run_tests.sh
+ if: runner.os == 'Linux'
+ - name: Code coverage
+ env:
+ CODECOV_TOKEN: ${{ secrets.EXACL_CODECOV_TOKEN }}
+ run: ./ci/coverage.sh codecov
+ - name: Lint Check
+ run: ./ci/lint.sh
+ - name: Format Check
+ run: ./ci/format.sh
+ - name: Docs Check
+ run: ./ci/docs.sh
+ - name: Bindgen Check
+ run: ./ci/bindgen.sh
diff --git b/rust-vendor/exacl/.github/workflows/dependency-review.yml b/rust-vendor/exacl/.github/workflows/dependency-review.yml
new file mode 100644
index 0000000..3fa8b85
--- /dev/null
+++ b/rust-vendor/exacl/.github/workflows/dependency-review.yml
@@ -0,0 +1,27 @@
+# Dependency Review Action
+#
+# This Action will scan dependency manifest files that change as part of a Pull Request,
+# surfacing known-vulnerable versions of the packages declared or updated in the PR.
+# Once installed, if the workflow run is marked as required,
+# PRs introducing known-vulnerable packages will be blocked from merging.
+#
+# Source repository: https://github.com/actions/dependency-review-action
+name: 'Dependency Review'
+on: [pull_request]
+
+permissions:
+ contents: read
+
+jobs:
+ dependency-review:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1
+ with:
+ egress-policy: audit
+
+ - name: 'Checkout Repository'
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: 'Dependency Review'
+ uses: actions/dependency-review-action@4901385134134e04cec5fbe5ddfe3b2c5bd5d976 # v4.0.0
diff --git b/rust-vendor/exacl/.github/workflows/docs.yml b/rust-vendor/exacl/.github/workflows/docs.yml
new file mode 100644
index 0000000..3467c73
--- /dev/null
+++ b/rust-vendor/exacl/.github/workflows/docs.yml
@@ -0,0 +1,36 @@
+name: Docs
+
+on:
+ push:
+ branches: [ "main" ]
+
+env:
+ CARGO_TERM_COLOR: always
+
+permissions:
+ contents: read
+
+jobs:
+ publish-docs:
+
+ permissions:
+ contents: write # for peaceiris/actions-gh-pages to push pages branch
+ runs-on: ubuntu-20.04
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1
+ with:
+ egress-policy: audit
+
+ - name: Checkout
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Install dependencies (Linux)
+ run: sudo apt-get -y install libacl1-dev
+ - name: Build Docs
+ run: ./ci/docs.sh
+ - name: Publish Docs to Github Pages
+ uses: peaceiris/actions-gh-pages@373f7f263a76c20808c831209c920827a82a2847 # v3.9.3
+ with:
+ github_token: ${{ secrets.GITHUB_TOKEN }}
+ publish_dir: ./target/doc
diff --git b/rust-vendor/exacl/.github/workflows/publish.yml b/rust-vendor/exacl/.github/workflows/publish.yml
new file mode 100644
index 0000000..6a78d28
--- /dev/null
+++ b/rust-vendor/exacl/.github/workflows/publish.yml
@@ -0,0 +1,31 @@
+name: Publish
+
+on:
+ release:
+ types: [published]
+
+env:
+ CARGO_TERM_COLOR: always
+
+permissions:
+ contents: read
+
+jobs:
+
+ publish-crate:
+ runs-on: ubuntu-20.04
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1
+ with:
+ egress-policy: audit
+
+ - name: Checkout
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ - name: Install dependencies (Linux)
+ run: sudo apt-get -y install libacl1-dev
+ - name: Publish Crate
+ env:
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_TOKEN }}
+ run: cargo publish
diff --git b/rust-vendor/exacl/.github/workflows/scorecards.yml b/rust-vendor/exacl/.github/workflows/scorecards.yml
new file mode 100644
index 0000000..d2445b3
--- /dev/null
+++ b/rust-vendor/exacl/.github/workflows/scorecards.yml
@@ -0,0 +1,76 @@
+# This workflow uses actions that are not certified by GitHub. They are provided
+# by a third-party and are governed by separate terms of service, privacy
+# policy, and support documentation.
+
+name: Scorecard supply-chain security
+on:
+ # For Branch-Protection check. Only the default branch is supported. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
+ branch_protection_rule:
+ # To guarantee Maintained check is occasionally updated. See
+ # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
+ schedule:
+ - cron: '20 7 * * 2'
+ push:
+ branches: ["main"]
+
+# Declare default permissions as read only.
+permissions: read-all
+
+jobs:
+ analysis:
+ name: Scorecard analysis
+ runs-on: ubuntu-latest
+ permissions:
+ # Needed to upload the results to code-scanning dashboard.
+ security-events: write
+ # Needed to publish results and get a badge (see publish_results below).
+ id-token: write
+ contents: read
+ actions: read
+
+ steps:
+ - name: Harden Runner
+ uses: step-security/harden-runner@eb238b55efaa70779f274895e782ed17c84f2895 # v2.6.1
+ with:
+ egress-policy: audit
+
+ - name: "Checkout code"
+ uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
+ with:
+ persist-credentials: false
+
+ - name: "Run analysis"
+ uses: ossf/scorecard-action@0864cf19026789058feabb7e87baa5f140aac736 # v2.3.1
+ with:
+ results_file: results.sarif
+ results_format: sarif
+ # (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
+ # - you want to enable the Branch-Protection check on a *public* repository, or
+ # - you are installing Scorecards on a *private* repository
+ # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
+ # repo_token: ${{ secrets.SCORECARD_TOKEN }}
+
+ # Public repositories:
+ # - Publish results to OpenSSF REST API for easy access by consumers
+ # - Allows the repository to include the Scorecard badge.
+ # - See https://github.com/ossf/scorecard-action#publishing-results.
+ # For private repositories:
+ # - `publish_results` will always be set to `false`, regardless
+ # of the value entered here.
+ publish_results: true
+
+ # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
+ # format to the repository Actions tab.
+ - name: "Upload artifact"
+ uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0
+ with:
+ name: SARIF file
+ path: results.sarif
+ retention-days: 5
+
+ # Upload the results to GitHub's code scanning dashboard.
+ - name: "Upload to code-scanning"
+ uses: github/codeql-action/upload-sarif@b7bf0a3ed3ecfa44160715d7c442788f65f0f923 # v3.23.2
+ with:
+ sarif_file: results.sarif
diff --git b/rust-vendor/exacl/Cargo.toml.orig b/rust-vendor/exacl/Cargo.toml.orig
new file mode 100644
index 0000000..f6ab838
--- /dev/null
+++ b/rust-vendor/exacl/Cargo.toml.orig
@@ -0,0 +1,49 @@
+[package]
+name = "exacl"
+version = "0.12.0"
+authors = ["Bill Fisher <william.w.fisher@gmail.com>"]
+description = "Manipulate file system access control lists (ACL) on macOS, Linux, and FreeBSD"
+repository = "https://github.com/byllyfish/exacl"
+documentation = "https://byllyfish.github.io/exacl"
+license = "MIT"
+edition = "2021"
+keywords = ["acl", "access", "control"]
+categories = ["filesystem"]
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[features]
+# There are two optional features that you can enable:
+# - serde
+# - buildtime_bindgen
+
+default = []
+
+# Use bindgen to build OS-specific bindings.
+#
+# On Linux, the bindings depend on the <sys/acl.h> system header. This header
+# is only present on systems that have the `libacl1-dev` package installed.
+
+buildtime_bindgen = ["bindgen"]
+
+[dependencies]
+bitflags = "2.4.2"
+log = "0.4.20"
+uuid = "1.7.0"
+scopeguard = "1.2.0"
+serde = { version = "1.0", optional = true, features = ["derive"] }
+
+[build-dependencies]
+bindgen = { version = "0.69.2", optional = true }
+
+[dev-dependencies]
+tempfile = "3.9.0"
+ctor = "0.2.6"
+
+# Used by exacl.rs example.
+clap = { version = "4.4.18", features = ["derive"] }
+env_logger = "0.11.0"
+serde_json = "1.0.111"
+
+[package.metadata.docs.rs]
+rustc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/fastrand/.cargo_vcs_info.json b/rust-vendor/fastrand/.cargo_vcs_info.json
new file mode 100644
index 0000000..5b99600
--- /dev/null
+++ b/rust-vendor/fastrand/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "8419f8916f08c63572b4f7cbdc07cec94c1fc5ed"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/fastrand/Cargo.toml.orig b/rust-vendor/fastrand/Cargo.toml.orig
new file mode 100644
index 0000000..64249ff
--- /dev/null
+++ b/rust-vendor/fastrand/Cargo.toml.orig
@@ -0,0 +1,37 @@
+[package]
+name = "fastrand"
+# When publishing a new version:
+# - Update CHANGELOG.md
+# - Create "v2.x.y" git tag
+version = "2.3.0"
+authors = ["Stjepan Glavina <stjepang@gmail.com>"]
+edition = "2018"
+rust-version = "1.36"
+description = "A simple and fast random number generator"
+license = "Apache-2.0 OR MIT"
+repository = "https://github.com/smol-rs/fastrand"
+keywords = ["simple", "fast", "rand", "random", "wyrand"]
+categories = ["algorithms"]
+exclude = ["/.*"]
+
+[features]
+default = ["std"]
+alloc = []
+std = ["alloc"]
+js = ["std", "getrandom"]
+
+[target.'cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown"))'.dependencies]
+getrandom = { version = "0.2", features = ["js"], optional = true }
+
+[target.'cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown"))'.dev-dependencies]
+wasm-bindgen-test = "0.3"
+getrandom = { version = "0.2", features = ["js"] }
+
+[dev-dependencies]
+rand = "0.8"
+wyhash = "0.5"
+getrandom = "0.2"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/filedescriptor/.cargo_vcs_info.json b/rust-vendor/filedescriptor/.cargo_vcs_info.json
new file mode 100644
index 0000000..52e267b
--- /dev/null
+++ b/rust-vendor/filedescriptor/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "4c619a44dc07ad611d28a8af0416f25462d6b3ad"
+ },
+ "path_in_vcs": "filedescriptor"
+}
\ No newline at end of file
diff --git b/rust-vendor/filedescriptor/Cargo.toml.orig b/rust-vendor/filedescriptor/Cargo.toml.orig
new file mode 100644
index 0000000..0cf1f72
--- /dev/null
+++ b/rust-vendor/filedescriptor/Cargo.toml.orig
@@ -0,0 +1,26 @@
+[package]
+name = "filedescriptor"
+version = "0.8.3"
+authors = ["Wez Furlong"]
+edition = "2018"
+repository = "https://github.com/wezterm/wezterm"
+description = "More ergonomic wrappers around RawFd and RawHandle"
+license = "MIT"
+documentation = "https://docs.rs/filedescriptor"
+readme = "README.md"
+keywords = ["socketpair", "pipe", "poll", "filedescriptor"]
+
+[dependencies]
+thiserror = "1.0"
+libc = "0.2"
+
+[target."cfg(windows)".dependencies]
+winapi = { version = "0.3", features = [
+ "winuser",
+ "handleapi",
+ "fileapi",
+ "namedpipeapi",
+ "processthreadsapi",
+ "winsock2",
+ "processenv"
+]}
diff --git b/rust-vendor/filetime/.cargo_vcs_info.json b/rust-vendor/filetime/.cargo_vcs_info.json
new file mode 100644
index 0000000..7a32fd3
--- /dev/null
+++ b/rust-vendor/filetime/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "cca080e562c1afc12100b12c2d0d633c59cd532d"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/filetime/.github/workflows/main.yml b/rust-vendor/filetime/.github/workflows/main.yml
new file mode 100644
index 0000000..b564dc2
--- /dev/null
+++ b/rust-vendor/filetime/.github/workflows/main.yml
@@ -0,0 +1,77 @@
+name: CI
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Test
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ build: [stable, beta, nightly, macos, win32, win64, mingw]
+ include:
+ - build: stable
+ os: ubuntu-latest
+ rust: stable
+ - build: beta
+ os: ubuntu-latest
+ rust: beta
+ - build: nightly
+ os: ubuntu-latest
+ rust: nightly
+ - build: macos
+ os: macos-latest
+ rust: stable
+ - build: win32
+ os: windows-latest
+ rust: stable-i686
+ - build: win64
+ os: windows-latest
+ rust: stable-x86_64
+ - build: mingw
+ os: windows-latest
+ rust: stable-x86_64-gnu
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust (rustup)
+ run: rustup update ${{ matrix.rust }} --no-self-update && rustup default ${{ matrix.rust }}
+ shell: bash
+ - run: cargo test
+
+ rustfmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust
+ run: rustup update stable && rustup default stable && rustup component add rustfmt
+ - run: cargo fmt -- --check
+
+ build:
+ name: Build for Android and Redox
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target: [x86_64-linux-android, x86_64-unknown-redox]
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust
+ run: rustup update stable && rustup default stable && rustup target add ${{ matrix.target }}
+ - run: cargo build --target ${{ matrix.target }}
+
+ publish_docs:
+ name: Publish Documentation
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust
+ run: rustup update stable && rustup default stable
+ - name: Build documentation
+ run: cargo doc --no-deps --all-features
+ - name: Publish documentation
+ run: |
+ cd target/doc
+ git init
+ git add .
+ git -c user.name='ci' -c user.email='ci' commit -m init
+ git push -f -q https://git:${{ secrets.github_token }}@github.com/${{ github.repository }} HEAD:gh-pages
+ if: github.event_name == 'push' && github.event.ref == 'refs/heads/master'
diff --git b/rust-vendor/filetime/Cargo.toml.orig b/rust-vendor/filetime/Cargo.toml.orig
new file mode 100644
index 0000000..cf6dc45
--- /dev/null
+++ b/rust-vendor/filetime/Cargo.toml.orig
@@ -0,0 +1,26 @@
+[package]
+name = "filetime"
+authors = ["Alex Crichton <alex@alexcrichton.com>"]
+version = "0.2.27"
+license = "MIT/Apache-2.0"
+readme = "README.md"
+keywords = ["timestamp", "mtime"]
+repository = "https://github.com/alexcrichton/filetime"
+homepage = "https://github.com/alexcrichton/filetime"
+documentation = "https://docs.rs/filetime"
+description = """
+Platform-agnostic accessors of timestamps in File metadata
+"""
+edition = "2018"
+
+[dependencies]
+cfg-if = "1.0.0"
+
+[target.'cfg(unix)'.dependencies]
+libc = "0.2.27"
+
+[target.'cfg(target_os = "redox")'.dependencies]
+libredox = "0.1.0"
+
+[dev-dependencies]
+tempfile = "3"
diff --git b/rust-vendor/find-msvc-tools/.cargo_vcs_info.json b/rust-vendor/find-msvc-tools/.cargo_vcs_info.json
new file mode 100644
index 0000000..626ad41
--- /dev/null
+++ b/rust-vendor/find-msvc-tools/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "0767349e1d1253e6849b4c2af2059db661f54343"
+ },
+ "path_in_vcs": "find-msvc-tools"
+}
\ No newline at end of file
diff --git b/rust-vendor/find-msvc-tools/Cargo.toml.orig b/rust-vendor/find-msvc-tools/Cargo.toml.orig
new file mode 100644
index 0000000..0834c69
--- /dev/null
+++ b/rust-vendor/find-msvc-tools/Cargo.toml.orig
@@ -0,0 +1,18 @@
+[package]
+name = "find-msvc-tools"
+version = "0.1.9"
+edition = "2018"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/cc-rs"
+documentation = "https://docs.rs/find-msvc-tools"
+description = "Find windows-specific tools, read MSVC versions from the registry and from COM interfaces"
+keywords = ["build-dependencies"]
+categories = ["development-tools::build-utils"]
+rust-version = "1.63"
+
+
+[dependencies]
+
+[lints.rust]
+unexpected_cfgs = { level = "allow", check-cfg = ['cfg(disable_clang_cl_tests)'] }
+
diff --git b/rust-vendor/fixed_decimal/.cargo_vcs_info.json b/rust-vendor/fixed_decimal/.cargo_vcs_info.json
new file mode 100644
index 0000000..5b43a55
--- /dev/null
+++ b/rust-vendor/fixed_decimal/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "29dfe2790b6cfdab94ca6a6b69f58ce54802dbf7"
+ },
+ "path_in_vcs": "utils/fixed_decimal"
+}
\ No newline at end of file
diff --git b/rust-vendor/fixed_decimal/Cargo.toml.orig b/rust-vendor/fixed_decimal/Cargo.toml.orig
new file mode 100644
index 0000000..86cc96a
--- /dev/null
+++ b/rust-vendor/fixed_decimal/Cargo.toml.orig
@@ -0,0 +1,50 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "fixed_decimal"
+description = "An API for representing numbers in a human-readable form"
+version = "0.7.1"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version = "1.82"
+
+[package.metadata.workspaces]
+independent = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+displaydoc = { workspace = true }
+smallvec = { workspace = true }
+writeable = { workspace = true, features = ["alloc"] }
+
+ryu = { workspace = true, features = ["small"], optional = true }
+
+[dev-dependencies]
+getrandom = { workspace = true, features = ["wasm_js"] }
+icu_benchmark_macros = { path = "../../tools/benchmark/macros" }
+rand = { workspace = true }
+rand_distr = { workspace = true }
+rand_pcg = { workspace = true }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[features]
+experimental = []
+ryu = ["dep:ryu"]
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[[bench]]
+name = "fixed_decimal"
+harness = false
\ No newline at end of file
diff --git b/rust-vendor/flate2/.cargo_vcs_info.json b/rust-vendor/flate2/.cargo_vcs_info.json
new file mode 100644
index 0000000..d9be8b9
--- /dev/null
+++ b/rust-vendor/flate2/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "19ddb18bf11199858fbc6504d079448fafd1606e"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/flate2/Cargo.toml.orig b/rust-vendor/flate2/Cargo.toml.orig
new file mode 100644
index 0000000..2570f61
--- /dev/null
+++ b/rust-vendor/flate2/Cargo.toml.orig
@@ -0,0 +1,122 @@
+[package]
+name = "flate2"
+authors = ["Alex Crichton <alex@alexcrichton.com>", "Josh Triplett <josh@joshtriplett.org>"]
+version = "1.1.9"
+edition = "2018"
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+rust-version = "1.67.0"
+keywords = ["gzip", "deflate", "zlib", "zlib-ng", "encoding"]
+categories = ["compression", "api-bindings"]
+repository = "https://github.com/rust-lang/flate2-rs"
+homepage = "https://github.com/rust-lang/flate2-rs"
+documentation = "https://docs.rs/flate2"
+description = """
+DEFLATE compression and decompression exposed as Read/BufRead/Write streams.
+Supports miniz_oxide and multiple zlib implementations. Supports zlib, gzip,
+and raw deflate streams.
+"""
+exclude = [".*"]
+
+[dependencies]
+libz-sys = { version = "1.1.20", optional = true, default-features = false }
+libz-ng-sys = { version = "1.1.16", optional = true }
+# this matches the default features, but we don't want to depend on the default features staying the same
+zlib-rs = { version = "0.6.0", optional = true, default-features = false, features = ["std", "rust-allocator"] }
+cloudflare-zlib-sys = { version = "0.3.6", optional = true }
+## This implementation uses only safe Rust code and doesn't require a C compiler.
+## It provides good performance for most use cases while being completely portable.
+miniz_oxide = { version = "0.8.5", optional = true, default-features = false, features = ["with-alloc", "simd"] }
+crc32fast = { version = "1.2.0", optional = true }
+document-features = { version = "0.2", optional = true }
+
+[target.'cfg(all(target_arch = "wasm32", not(target_os = "emscripten")))'.dependencies]
+miniz_oxide = { version = "0.8.5", default-features = false, features = ["with-alloc", "simd"] }
+
+[dev-dependencies]
+futures = { version = "0.3", default-features = false }
+rand = "0.9"
+quickcheck = { version = "1.0", default-features = false }
+
+[features]
+## The default backend using pure Rust implementation via miniz_oxide.
+## This provides a safe, portable compression implementation without requiring a C compiler.
+default = ["rust_backend"]
+
+#! ### User-Facing Backend Features
+#! Choose one of these features to select the compression backend.
+#! Only one backend should be enabled at a time, or else one will see an unstable order which is currently
+#! `zlib-ng`, `zlib-rs`, `cloudflare_zlib`, `miniz_oxide` and which may change at any time.
+
+## Use the pure Rust `miniz_oxide` backend (default).
+## This implementation uses only safe Rust code and doesn't require a C compiler.
+## It provides good performance for most use cases while being completely portable.
+##
+## Note that this feature at some point may be switched to use `zlib-rs` instead.
+rust_backend = ["miniz_oxide", "any_impl"]
+
+## Use the zlib-rs backend, a pure Rust rewrite of zlib.
+## This is the fastest backend overall, providing excellent performance with some `unsafe` code.
+## It does not require a C compiler but uses `unsafe` Rust for optimization.
+zlib-rs = ["any_zlib", "dep:zlib-rs"] # zlib-rs uses its own crc32 implementation.
+
+## Use the pure Rust `miniz_oxide` backend.
+miniz_oxide = ["any_impl", "dep:miniz_oxide", "dep:crc32fast"]
+
+## Use the system's installed zlib library.
+## This is useful when you need compatibility with other C code that uses zlib,
+## or when you want to use the system-provided zlib for consistency.
+zlib = ["any_c_zlib", "libz-sys", "dep:crc32fast"]
+
+## Use the system's installed zlib library with default features enabled.
+## Similar to `zlib` but enables additional features from libz-sys.
+zlib-default = ["any_c_zlib", "libz-sys/default", "dep:crc32fast"]
+
+## Use zlib-ng in zlib-compat mode via libz-sys.
+## This provides zlib-ng's performance improvements while maintaining compatibility.
+## Note: If any crate in your dependency graph uses stock zlib, you'll get stock zlib instead.
+## For guaranteed zlib-ng, use the `zlib-ng` feature.
+## When using this feature, if any crate in your dependency graph explicitly requests stock zlib,
+## or uses libz-sys directly without `default-features = false`, you'll get stock zlib rather than zlib-ng.
+## See [the libz-sys README](https://github.com/rust-lang/libz-sys/blob/main/README.md) for details.
+## To avoid that, use the `"zlib-ng"` feature instead.
+
+zlib-ng-compat = ["zlib", "libz-sys/zlib-ng", "dep:crc32fast"]
+
+## Use the high-performance zlib-ng library directly.
+## This typically provides better performance than stock zlib and works even when
+## other dependencies use zlib. Requires a C compiler.
+zlib-ng = ["any_c_zlib", "libz-ng-sys", "dep:crc32fast"]
+
+## Use Cloudflare's optimized zlib implementation.
+## This provides better performance than stock zlib on x86-64 (with SSE 4.2) and ARM64 (with NEON & CRC).
+## * ⚠ Does not support 32-bit CPUs and is incompatible with mingw.
+## * ⚠ May cause conflicts if other crates use different zlib versions.
+cloudflare_zlib = ["any_c_zlib", "cloudflare-zlib-sys", "dep:crc32fast"]
+
+## Deprecated alias for `rust_backend`, provided for backwards compatibility.
+## Use `rust_backend` instead.
+miniz-sys = ["rust_backend"]
+
+#! ### Internal Features
+#! These features are used internally for backend selection and should not be enabled directly by users.
+#! They are documented here to aid with maintenance.
+
+## **Internal:** Marker feature indicating that any zlib-based C backend is enabled.
+## This is automatically enabled by `zlib-rs`, `zlib`, `zlib-ng`, `zlib-ng-compat`, and `cloudflare_zlib`.
+## Do not enable this feature directly; instead, choose a specific backend feature.
+any_zlib = ["any_impl"]
+
+## **Internal:** Marker feature indicating that any C based fully zlib compatible backend is enabled.
+## This is automatically enabled by `zlib`, `zlib-ng`, `zlib-ng-compat`, and `cloudflare_zlib`.
+## Do not enable this feature directly; instead, choose a specific backend feature.
+any_c_zlib = ["any_zlib"]
+
+## **Internal:** Marker feature indicating that any compression backend is enabled.
+## This is automatically enabled by all backend features to ensure at least one implementation is available.
+## Do not enable this feature directly; instead, choose a specific backend feature.
+any_impl = []
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/fluent/.cargo_vcs_info.json b/rust-vendor/fluent/.cargo_vcs_info.json
new file mode 100644
index 0000000..d4e2179
--- /dev/null
+++ b/rust-vendor/fluent/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "83e9a4517a1de90b7715b0446a2e13acf67af4e1"
+ },
+ "path_in_vcs": "fluent"
+}
\ No newline at end of file
diff --git b/rust-vendor/fluent/Cargo.toml.orig b/rust-vendor/fluent/Cargo.toml.orig
new file mode 100644
index 0000000..c1181f2
--- /dev/null
+++ b/rust-vendor/fluent/Cargo.toml.orig
@@ -0,0 +1,29 @@
+[package]
+name = "fluent"
+description = """
+An umbrella crate exposing the combined features of fluent-rs crates with additional convenience macros for Project Fluent,
+a localization system designed to unleash the entire expressive power of natural language translations.
+"""
+version = "0.17.0"
+edition.workspace = true
+rust-version.workspace = true
+homepage.workspace = true
+repository.workspace = true
+license.workspace = true
+authors.workspace = true
+categories.workspace = true
+keywords.workspace = true
+readme = "README.md"
+include = [
+ "src/**/*",
+ "benches/*.rs",
+ "Cargo.toml",
+ "README.md",
+ "LICENSE-APACHE",
+ "LICENSE-MIT",
+]
+
+[dependencies]
+fluent-bundle.workspace = true
+fluent-pseudo = { workspace = true, optional = true }
+unic-langid.workspace = true
diff --git b/rust-vendor/fluent-bundle/.cargo_vcs_info.json b/rust-vendor/fluent-bundle/.cargo_vcs_info.json
new file mode 100644
index 0000000..436d01e
--- /dev/null
+++ b/rust-vendor/fluent-bundle/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f22da4ea48328b4c617b7666c482634c49fbe0a7"
+ },
+ "path_in_vcs": "fluent-bundle"
+}
\ No newline at end of file
diff --git b/rust-vendor/fluent-bundle/Cargo.toml.orig b/rust-vendor/fluent-bundle/Cargo.toml.orig
new file mode 100644
index 0000000..6687fc9
--- /dev/null
+++ b/rust-vendor/fluent-bundle/Cargo.toml.orig
@@ -0,0 +1,54 @@
+[package]
+name = "fluent-bundle"
+description = """
+A low-level implementation of a collection of localization messages for a single locale for Project Fluent,
+a localization system designed to unleash the entire expressive power of natural language translations.
+"""
+version = "0.16.0"
+edition.workspace = true
+rust-version.workspace = true
+homepage.workspace = true
+repository.workspace = true
+license.workspace = true
+authors.workspace = true
+categories.workspace = true
+keywords.workspace = true
+readme = "README.md"
+include = [
+ "src/**/*",
+ "benches/*.rs",
+ "Cargo.toml",
+ "README.md",
+ "LICENSE-APACHE",
+ "LICENSE-MIT",
+]
+
+[dependencies]
+fluent-langneg.workspace = true
+fluent-syntax.workspace = true
+intl_pluralrules.workspace = true
+rustc-hash.workspace = true
+unic-langid.workspace = true
+intl-memoizer.workspace = true
+self_cell = "1.2"
+smallvec = "1.13"
+
+[dev-dependencies]
+criterion.workspace = true
+iai.workspace = true
+serde = { workspace = true, features = ["derive"] }
+unic-langid = { workspace = true, features = ["macros"] }
+rand = "0.9"
+serde_yaml = "0.9"
+
+[features]
+default = []
+all-benchmarks = []
+
+[[bench]]
+name = "resolver"
+harness = false
+
+[[bench]]
+name = "resolver_iai"
+harness = false
diff --git b/rust-vendor/fluent-langneg/.cargo_vcs_info.json b/rust-vendor/fluent-langneg/.cargo_vcs_info.json
new file mode 100644
index 0000000..5a60819
--- /dev/null
+++ b/rust-vendor/fluent-langneg/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "7fdc590466ea63ca2367ac10fb1b881fe561f1a8"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/fluent-langneg/Cargo.toml.orig b/rust-vendor/fluent-langneg/Cargo.toml.orig
new file mode 100644
index 0000000..2864013
--- /dev/null
+++ b/rust-vendor/fluent-langneg/Cargo.toml.orig
@@ -0,0 +1,43 @@
+[package]
+name = "fluent-langneg"
+description = """
+A library for language and locale negotiation.
+"""
+version = "0.13.1"
+authors = ["Zibi Braniecki <gandalf@mozilla.com>"]
+homepage = "http://projectfluent.org/"
+license = "Apache-2.0 OR MIT"
+repository = "https://github.com/projectfluent/fluent-langneg-rs"
+readme = "README.md"
+categories = ["internationalization", "localization"]
+edition = "2018"
+include = [
+ "src/**/*",
+ "benches/*.rs",
+ "Cargo.toml",
+ "README.md"
+]
+
+[badges]
+travis-ci = { repository = "projectfluent/fluent-langneg-rs" }
+coveralls = { repository = "projectfluent/fluent-langneg-rs", branch = "master", service = "github" }
+
+maintenance = { status = "actively-developed" }
+
+[dependencies]
+unic-langid = "0.9"
+
+[dev-dependencies]
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+unic-langid = { version = "0.9", features = ["macros"] }
+unic-locale = { version = "0.9", features = ["macros"] }
+criterion = "0.3"
+
+[[bench]]
+name = "negotiate"
+harness = false
+
+[features]
+default = []
+cldr = ["unic-langid/likelysubtags"]
diff --git b/rust-vendor/fluent-syntax/.cargo_vcs_info.json b/rust-vendor/fluent-syntax/.cargo_vcs_info.json
new file mode 100644
index 0000000..50793dd
--- /dev/null
+++ b/rust-vendor/fluent-syntax/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f22da4ea48328b4c617b7666c482634c49fbe0a7"
+ },
+ "path_in_vcs": "fluent-syntax"
+}
\ No newline at end of file
diff --git b/rust-vendor/fluent-syntax/Cargo.toml.orig b/rust-vendor/fluent-syntax/Cargo.toml.orig
new file mode 100644
index 0000000..8c41e10
--- /dev/null
+++ b/rust-vendor/fluent-syntax/Cargo.toml.orig
@@ -0,0 +1,65 @@
+[package]
+name = "fluent-syntax"
+description = """
+A low-level parser, AST, and serializer API for the syntax used by Project Fluent,
+a localization system designed to unleash the entire expressive power of natural language translations.
+"""
+version = "0.12.0"
+edition.workspace = true
+rust-version = "1.64.0"
+homepage.workspace = true
+repository.workspace = true
+license.workspace = true
+authors.workspace = true
+categories.workspace = true
+keywords.workspace = true
+readme = "README.md"
+include = [
+ "src/**/*",
+ "benches/*.rs",
+ "Cargo.toml",
+ "README.md",
+ "LICENSE-APACHE",
+ "LICENSE-MIT",
+]
+
+[dependencies]
+memchr = "2.0"
+serde = { workspace = true, optional = true, features = ["derive"] }
+serde_json = { workspace = true, optional = true }
+thiserror.workspace = true
+
+[dev-dependencies]
+criterion.workspace = true
+iai.workspace = true
+serde = { workspace = true, features = ["derive"] }
+serde_json.workspace = true
+glob = "0.3"
+
+[features]
+default = []
+serde = ["dep:serde"]
+json = ["serde", "dep:serde_json"]
+all-benchmarks = []
+
+[[bench]]
+name = "parser"
+harness = false
+
+[[bench]]
+name = "parser_iai"
+harness = false
+
+[[bin]]
+name = "parser"
+path = "src/bin/parser.rs"
+
+[[bin]]
+name = "update_fixtures"
+path = "src/bin/update_fixtures.rs"
+required-features = ["json"]
+
+[[test]]
+name = "parser_fixtures"
+path = "tests/parser_fixtures.rs"
+required-features = ["json"]
diff --git b/rust-vendor/foldhash/.cargo_vcs_info.json b/rust-vendor/foldhash/.cargo_vcs_info.json
new file mode 100644
index 0000000..23aaf2a
--- /dev/null
+++ b/rust-vendor/foldhash/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "8f878c636fda9c9e93384824ea45e06d03f009f5"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/foldhash/Cargo.toml.orig b/rust-vendor/foldhash/Cargo.toml.orig
new file mode 100644
index 0000000..a0a0c58
--- /dev/null
+++ b/rust-vendor/foldhash/Cargo.toml.orig
@@ -0,0 +1,46 @@
+[package]
+name = "foldhash"
+version = "0.2.0"
+authors = ["Orson Peters <orsonpeters@gmail.com>"]
+license = "Zlib"
+repository = "https://github.com/orlp/foldhash"
+readme = "README.md"
+keywords = ["hash", "hasher", "no-std"]
+categories = ["algorithms", "no-std"]
+description = "A fast, non-cryptographic, minimally DoS-resistant hashing algorithm."
+edition = "2021"
+exclude = ["benches", "tools", "assets"]
+rust-version = "1.60"
+
+[features]
+default = ["std"]
+std = []
+nightly = []
+
+[dependencies]
+
+[dev-dependencies]
+criterion = "0.5"
+hashbrown = "0.15"
+uuid = "1.8"
+rand = "0.8"
+ahash = "0.8"
+fxhash = "0.2"
+rapidhash = "3.1.0"
+chrono = "0.4"
+
+[lib]
+bench = false
+
+[[bench]]
+name = "bench"
+path = "benches/bench.rs"
+harness = false
+
+[[bench]]
+name = "avalanche"
+path = "benches/avalanche.rs"
+harness = false
+
+[profile.release]
+lto = "thin"
diff --git b/rust-vendor/foldhash-0.1.5/.cargo_vcs_info.json b/rust-vendor/foldhash-0.1.5/.cargo_vcs_info.json
new file mode 100644
index 0000000..b1cf942
--- /dev/null
+++ b/rust-vendor/foldhash-0.1.5/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "42461756c3760f9165c90d9626a49e36980a1e47"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/foldhash-0.1.5/Cargo.toml.orig b/rust-vendor/foldhash-0.1.5/Cargo.toml.orig
new file mode 100644
index 0000000..b6c229d
--- /dev/null
+++ b/rust-vendor/foldhash-0.1.5/Cargo.toml.orig
@@ -0,0 +1,44 @@
+[package]
+name = "foldhash"
+version = "0.1.5"
+authors = ["Orson Peters <orsonpeters@gmail.com>"]
+license = "Zlib"
+repository = "https://github.com/orlp/foldhash"
+readme = "README.md"
+keywords = ["hash", "hasher", "no-std"]
+categories = ["algorithms", "no-std"]
+description = "A fast, non-cryptographic, minimally DoS-resistant hashing algorithm."
+edition = "2021"
+exclude = ["benches", "tools", "assets"]
+rust-version = "1.60"
+
+[features]
+default = ["std"]
+std = []
+
+[dependencies]
+
+[dev-dependencies]
+criterion = "0.5"
+hashbrown = "0.14"
+uuid = "1.8"
+rand = "0.8"
+ahash = "0.8"
+fxhash = "0.2"
+chrono = "0.4"
+
+[lib]
+bench = false
+
+[[bench]]
+name = "bench"
+path = "benches/bench.rs"
+harness = false
+
+[[bench]]
+name = "avalanche"
+path = "benches/avalanche.rs"
+harness = false
+
+[profile.release]
+lto = "thin"
diff --git b/rust-vendor/fs_extra/.cargo_vcs_info.json b/rust-vendor/fs_extra/.cargo_vcs_info.json
new file mode 100644
index 0000000..edfe82a
--- /dev/null
+++ b/rust-vendor/fs_extra/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "sha1": "1754296075e7cc4a25feaa876a3f4b9daccc0b98"
+ }
+}
diff --git b/rust-vendor/fs_extra/Cargo.toml.orig b/rust-vendor/fs_extra/Cargo.toml.orig
new file mode 100644
index 0000000..e5af6fd
--- /dev/null
+++ b/rust-vendor/fs_extra/Cargo.toml.orig
@@ -0,0 +1,20 @@
+[package]
+name = "fs_extra"
+version = "1.3.0"
+edition = "2018"
+description = "Expanding std::fs and std::io. Recursively copy folders with information about process and much more."
+license = "MIT"
+authors = ["Denis Kurilenko <webdesus@gmail.com>"]
+keywords = ["filesystem", "recursion", "copy", "dir", "file"]
+homepage = "https://github.com/webdesus/fs_extra"
+documentation = "https://docs.rs/fs_extra"
+repository = "https://github.com/webdesus/fs_extra"
+include = [
+ "**/*.rs",
+ "Cargo.toml",
+ "LICENSE",
+ "README.md",
+ "CHANGELOG.md",
+]
+
+[dependencies]
diff --git b/rust-vendor/fts-sys/.cargo_vcs_info.json b/rust-vendor/fts-sys/.cargo_vcs_info.json
new file mode 100644
index 0000000..fe0af82
--- /dev/null
+++ b/rust-vendor/fts-sys/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "e92f4cd6df9b4e9e3f633951ec26a45ae4459e54"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/fts-sys/.woodpecker/build-foreign.yaml b/rust-vendor/fts-sys/.woodpecker/build-foreign.yaml
new file mode 100644
index 0000000..b958174
--- /dev/null
+++ b/rust-vendor/fts-sys/.woodpecker/build-foreign.yaml
@@ -0,0 +1,36 @@
+when:
+ - event: [manual, push, pull_request]
+ branch: main
+
+depends_on:
+ - build-x86_64-linux-gnu
+
+matrix:
+ include:
+ - RUST_TRIPLE: aarch64-unknown-linux-gnu
+ DEBIAN_TRIPLE: aarch64-linux-gnu
+ DEBIAN_ARCH: arm64
+ QEMU_ARCH: aarch64
+ - RUST_TRIPLE: armv7-unknown-linux-gnueabihf
+ DEBIAN_TRIPLE: arm-linux-gnueabihf
+ DEBIAN_ARCH: armhf
+ QEMU_ARCH: arm
+ - RUST_TRIPLE: riscv64gc-unknown-linux-gnu
+ DEBIAN_TRIPLE: riscv64-linux-gnu
+ DEBIAN_ARCH: riscv64
+ QEMU_ARCH: riscv64
+
+steps:
+ - name: build-${RUST_TRIPLE}
+ image: amd64/rust:latest
+ environment:
+ RUST_BACKTRACE: 1
+ RUST_LOG: trace
+ CARGO_INCREMENTAL: 0
+ commands:
+ - rustup target add ${RUST_TRIPLE}
+ - apt-get update --quiet
+ - apt-get install --quiet --no-install-recommends --yes libclang1 clang gcc-${DEBIAN_TRIPLE} libc6-dev-${DEBIAN_ARCH}-cross qemu-user
+ - cargo build --verbose --workspace --jobs=1 --target=${RUST_TRIPLE}
+ - cargo test --verbose --workspace --jobs=1 --target=${RUST_TRIPLE} '--config=target.${RUST_TRIPLE}.linker="${DEBIAN_TRIPLE}-gcc"' '--config=target.${RUST_TRIPLE}.runner="qemu-${QEMU_ARCH} -L /usr/${DEBIAN_TRIPLE}"' --no-run
+ - cargo test --verbose --workspace --jobs=1 --target=${RUST_TRIPLE} '--config=target.${RUST_TRIPLE}.linker="${DEBIAN_TRIPLE}-gcc"' '--config=target.${RUST_TRIPLE}.runner="qemu-${QEMU_ARCH} -L /usr/${DEBIAN_TRIPLE}"' -- --test-threads=1 --nocapture
diff --git b/rust-vendor/fts-sys/.woodpecker/build-i686-linux-gnu.yaml b/rust-vendor/fts-sys/.woodpecker/build-i686-linux-gnu.yaml
new file mode 100644
index 0000000..ed30779
--- /dev/null
+++ b/rust-vendor/fts-sys/.woodpecker/build-i686-linux-gnu.yaml
@@ -0,0 +1,20 @@
+when:
+ - event: [manual, push, pull_request]
+ branch: main
+
+depends_on:
+ - build-x86_64-linux-gnu
+
+steps:
+ - name: build-i686-linux-gnu
+ image: i386/rust:latest
+ environment:
+ RUST_BACKTRACE: 1
+ RUST_LOG: trace
+ CARGO_INCREMENTAL: 0
+ commands:
+ - apt-get update --quiet
+ - apt-get install --quiet --no-install-recommends --yes libclang-dev libc6-dev
+ - cargo build --verbose --workspace --jobs=1 --target=i686-unknown-linux-gnu
+ - cargo test --verbose --workspace --jobs=1 --target=i686-unknown-linux-gnu --no-run
+ - cargo test --verbose --workspace --jobs=1 --target=i686-unknown-linux-gnu -- --test-threads=1 --nocapture
diff --git b/rust-vendor/fts-sys/.woodpecker/build-x86_64-linux-gnu.yaml b/rust-vendor/fts-sys/.woodpecker/build-x86_64-linux-gnu.yaml
new file mode 100644
index 0000000..c73ca51
--- /dev/null
+++ b/rust-vendor/fts-sys/.woodpecker/build-x86_64-linux-gnu.yaml
@@ -0,0 +1,26 @@
+when:
+ - event: [manual, push, pull_request]
+ branch: main
+ path:
+ on_empty: false
+ include:
+ - "**/*.yaml"
+ - "**/*.toml"
+ - "**/*.rs"
+ - "src/**"
+
+steps:
+ - name: build-x86_64-linux-gnu
+ image: amd64/rust:latest
+ environment:
+ RUST_BACKTRACE: 1
+ RUST_LOG: trace
+ CARGO_INCREMENTAL: 0
+ commands:
+ - rustup component add rustfmt
+ - cargo fmt --all --check
+ - apt-get update --quiet
+ - apt-get install --quiet --no-install-recommends --yes libclang-dev libc6-dev
+ - cargo build --verbose --workspace --jobs=1 --target=x86_64-unknown-linux-gnu
+ - cargo test --verbose --workspace --jobs=1 --target=x86_64-unknown-linux-gnu --no-run
+ - cargo test --verbose --workspace --jobs=1 --target=x86_64-unknown-linux-gnu -- --test-threads=1 --nocapture
diff --git b/rust-vendor/fts-sys/Cargo.toml.orig b/rust-vendor/fts-sys/Cargo.toml.orig
new file mode 100644
index 0000000..56e4881
--- /dev/null
+++ b/rust-vendor/fts-sys/Cargo.toml.orig
@@ -0,0 +1,21 @@
+[package]
+name = "fts-sys"
+description = "File hierarchy traversal functions (FTS)"
+version = "0.2.17" # Remember to update `html_root_url`.
+authors = ["Koutheir Attouchi <koutheir@gmail.com>"]
+edition = "2024"
+readme = "README.md"
+license = "MIT"
+keywords = ["fts", "filesystem", "tree", "hierarchy"]
+categories = ["external-ffi-bindings", "filesystem"]
+build = "build.rs"
+links = "c"
+documentation = "https://docs.rs/fts-sys"
+homepage = "https://codeberg.org/koutheir/fts-sys.git"
+repository = "https://codeberg.org/koutheir/fts-sys.git"
+
+[target.'cfg(unix)'.dependencies]
+libc = { version = "0.2" }
+
+[build-dependencies]
+bindgen = { version = "0.72" }
diff --git b/rust-vendor/funty/.cargo_vcs_info.json b/rust-vendor/funty/.cargo_vcs_info.json
new file mode 100644
index 0000000..2fefb64
--- /dev/null
+++ b/rust-vendor/funty/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "sha1": "25ca048375e389d703a0cefb377e32c4cc0a9dc5"
+ }
+}
diff --git b/rust-vendor/funty/Cargo.toml.orig b/rust-vendor/funty/Cargo.toml.orig
new file mode 100644
index 0000000..5d39465
--- /dev/null
+++ b/rust-vendor/funty/Cargo.toml.orig
@@ -0,0 +1,37 @@
+[package]
+name = "funty"
+version = "2.0.0"
+authors = [
+ "myrrlyn <self@myrrlyn.dev>",
+]
+categories = [
+ "no-std",
+ "rust-patterns",
+]
+description = "Trait generalization over the primitive types"
+documentation = "https://docs.rs/funty"
+edition = "2018"
+include = [
+ "Cargo.toml",
+ "LICENSE.txt",
+ "src/lib.rs",
+]
+keywords = [
+ "numerics",
+ "primitives",
+ "traits",
+]
+license = "MIT"
+readme = "README.md"
+repository = "https://github.com/myrrlyn/funty"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[features]
+default = [
+ "std",
+]
+std = []
+
+[dev-dependencies]
+static_assertions = "1"
diff --git b/rust-vendor/futures-core/.cargo_vcs_info.json b/rust-vendor/futures-core/.cargo_vcs_info.json
new file mode 100644
index 0000000..25469f1
--- /dev/null
+++ b/rust-vendor/futures-core/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d9bba94c239daa1175a5bb2958f37a5c72db3f6a"
+ },
+ "path_in_vcs": "futures-core"
+}
\ No newline at end of file
diff --git b/rust-vendor/futures-core/Cargo.toml.orig b/rust-vendor/futures-core/Cargo.toml.orig
new file mode 100644
index 0000000..273665b
--- /dev/null
+++ b/rust-vendor/futures-core/Cargo.toml.orig
@@ -0,0 +1,35 @@
+[package]
+name = "futures-core"
+version = "0.3.32"
+edition = "2018"
+# NB: Sync with "Usage" section in README.md and core-msrv job in .github/workflows/ci.yml
+rust-version = "1.36"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/futures-rs"
+homepage = "https://rust-lang.github.io/futures-rs"
+description = """
+The core traits and types in for the `futures` library.
+"""
+
+[features]
+default = ["std"]
+std = ["alloc"]
+alloc = []
+
+# These features are no longer used.
+# TODO: remove in the next major version.
+unstable = []
+cfg-target-has-atomic = []
+
+[dependencies]
+portable-atomic = { version = "1.3", optional = true, default-features = false, features = ["require-cas"] }
+
+[dev-dependencies]
+futures = { path = "../futures" }
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
+
+[lints]
+workspace = true
diff --git b/rust-vendor/futures-macro/.cargo_vcs_info.json b/rust-vendor/futures-macro/.cargo_vcs_info.json
new file mode 100644
index 0000000..df2b9cb
--- /dev/null
+++ b/rust-vendor/futures-macro/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d9bba94c239daa1175a5bb2958f37a5c72db3f6a"
+ },
+ "path_in_vcs": "futures-macro"
+}
\ No newline at end of file
diff --git b/rust-vendor/futures-macro/Cargo.toml.orig b/rust-vendor/futures-macro/Cargo.toml.orig
new file mode 100644
index 0000000..7d9e33e
--- /dev/null
+++ b/rust-vendor/futures-macro/Cargo.toml.orig
@@ -0,0 +1,25 @@
+[package]
+name = "futures-macro"
+version = "0.3.32"
+edition = "2018"
+# NB: Sync with "Usage" section in README.md and util-msrv job in .github/workflows/ci.yml
+rust-version = "1.71"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/futures-rs"
+homepage = "https://rust-lang.github.io/futures-rs"
+description = """
+The futures-rs procedural macro implementations.
+"""
+
+[lib]
+proc-macro = true
+
+[features]
+
+[dependencies]
+proc-macro2 = "1.0.60"
+quote = "1.0"
+syn = { version = "2.0.52", features = ["full"] }
+
+[lints]
+workspace = true
diff --git b/rust-vendor/futures-task/.cargo_vcs_info.json b/rust-vendor/futures-task/.cargo_vcs_info.json
new file mode 100644
index 0000000..6b09d80
--- /dev/null
+++ b/rust-vendor/futures-task/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d9bba94c239daa1175a5bb2958f37a5c72db3f6a"
+ },
+ "path_in_vcs": "futures-task"
+}
\ No newline at end of file
diff --git b/rust-vendor/futures-task/Cargo.toml.orig b/rust-vendor/futures-task/Cargo.toml.orig
new file mode 100644
index 0000000..80d9633
--- /dev/null
+++ b/rust-vendor/futures-task/Cargo.toml.orig
@@ -0,0 +1,33 @@
+[package]
+name = "futures-task"
+version = "0.3.32"
+edition = "2018"
+# NB: Sync with "Usage" section in README.md and util-msrv job in .github/workflows/ci.yml
+rust-version = "1.71"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/futures-rs"
+homepage = "https://rust-lang.github.io/futures-rs"
+description = """
+Tools for working with tasks.
+"""
+
+[features]
+default = ["std"]
+std = ["alloc"]
+alloc = []
+
+# These features are no longer used.
+# TODO: remove in the next major version.
+unstable = []
+cfg-target-has-atomic = []
+
+[dependencies]
+
+[dev-dependencies]
+futures = { path = "../futures" }
+
+[package.metadata.docs.rs]
+all-features = true
+
+[lints]
+workspace = true
diff --git b/rust-vendor/futures-timer/.cargo_vcs_info.json b/rust-vendor/futures-timer/.cargo_vcs_info.json
new file mode 100644
index 0000000..63ce7eb
--- /dev/null
+++ b/rust-vendor/futures-timer/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "07dbe53da1b5ddb703cdfc74ad59e15cb4134ce0"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/futures-timer/.github/workflows/ci.yml b/rust-vendor/futures-timer/.github/workflows/ci.yml
new file mode 100644
index 0000000..c2d642a
--- /dev/null
+++ b/rust-vendor/futures-timer/.github/workflows/ci.yml
@@ -0,0 +1,72 @@
+name: CI
+on: [push, pull_request]
+
+# env:
+# RUSTFLAGS: -Dwarnings
+
+jobs:
+ test:
+ name: Test
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust
+ run: rustup update ${{ matrix.rust }} && rustup default ${{ matrix.rust }}
+ - name: cargo test
+ run: cargo test
+ - name: cargo doc
+ run: cargo doc --no-deps
+
+ style:
+ name: Style
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ component:
+ - rustfmt
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust
+ shell: bash
+ run: rustup update stable && rustup default stable
+ - name: Install component
+ shell: bash
+ run: rustup component add ${{ matrix.component }}
+ - name: cargo fmt
+ if: matrix.component == 'rustfmt'
+ run: cargo fmt -- --check
+
+ publish_docs:
+ name: Publish Documentation
+ needs: [style, test]
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust
+ run: rustup update stable && rustup default stable
+ - name: Build documentation
+ run: cargo doc --no-deps --all-features
+ - name: Publish documentation
+ run: |
+ cd target/doc
+ git init
+ git add .
+ git -c user.name='ci' -c user.email='ci' commit -m 'Deploy futures-timer API documentation'
+ git push -f -q https://git:${{ secrets.github_token }}@github.com/${{ github.repository }} HEAD:gh-pages
+ if: github.event_name == 'push' && github.event.ref == 'refs/heads/master' && github.repository == 'async-rs/futures-timer'
+
+ check_wasm:
+ name: Check Wasm
+ needs: [test]
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust and add wasm target
+ run: rustup update stable && rustup target add wasm32-unknown-unknown
+ - name: cargo check
+ run: cargo check --target wasm32-unknown-unknown --features wasm-bindgen
diff --git b/rust-vendor/futures-timer/Cargo.toml.orig b/rust-vendor/futures-timer/Cargo.toml.orig
new file mode 100644
index 0000000..8bc3472
--- /dev/null
+++ b/rust-vendor/futures-timer/Cargo.toml.orig
@@ -0,0 +1,27 @@
+[package]
+name = "futures-timer"
+version = "3.0.3"
+authors = ["Alex Crichton <alex@alexcrichton.com>"]
+edition = "2018"
+license = "MIT/Apache-2.0"
+readme = "README.md"
+repository = "https://github.com/async-rs/futures-timer"
+homepage = "https://github.com/async-rs/futures-timer"
+documentation = "https://docs.rs/futures-timer"
+description = """
+Timeouts for futures.
+"""
+
+[dependencies]
+gloo-timers = { version = "0.2.0", features = ["futures"], optional = true }
+send_wrapper = { version = "0.4.0", optional = true }
+
+[dev-dependencies]
+async-std = { version = "1.0.1", features = ["attributes"] }
+futures = "0.3.1"
+
+[features]
+wasm-bindgen = [
+ "gloo-timers",
+ "send_wrapper"
+]
diff --git b/rust-vendor/futures-util/.cargo_vcs_info.json b/rust-vendor/futures-util/.cargo_vcs_info.json
new file mode 100644
index 0000000..6a7bd96
--- /dev/null
+++ b/rust-vendor/futures-util/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d9bba94c239daa1175a5bb2958f37a5c72db3f6a"
+ },
+ "path_in_vcs": "futures-util"
+}
\ No newline at end of file
diff --git b/rust-vendor/futures-util/Cargo.toml.orig b/rust-vendor/futures-util/Cargo.toml.orig
new file mode 100644
index 0000000..7915dfa
--- /dev/null
+++ b/rust-vendor/futures-util/Cargo.toml.orig
@@ -0,0 +1,65 @@
+[package]
+name = "futures-util"
+version = "0.3.32"
+edition = "2018"
+# NB: Sync with "Usage" section in README.md and util-msrv job in .github/workflows/ci.yml
+rust-version = "1.71"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/futures-rs"
+homepage = "https://rust-lang.github.io/futures-rs"
+description = """
+Common utilities and extension traits for the futures-rs library.
+"""
+
+[features]
+default = ["std", "async-await", "async-await-macro"]
+std = ["alloc", "futures-core/std", "futures-task/std", "slab/std"]
+alloc = ["futures-core/alloc", "futures-task/alloc", "slab"]
+async-await = []
+async-await-macro = ["async-await", "futures-macro"]
+compat = ["std", "futures_01", "libc"]
+io-compat = ["io", "compat", "tokio-io", "libc"]
+sink = ["futures-sink"]
+io = ["std", "futures-io", "memchr"]
+channel = ["std", "futures-channel"]
+portable-atomic = ["futures-core/portable-atomic"]
+
+# Unstable features
+# These features are outside of the normal semver guarantees and require the
+# `unstable` feature as an explicit opt-in to unstable API.
+unstable = ["futures-core/unstable", "futures-task/unstable"]
+bilock = []
+write-all-vectored = ["io"]
+
+# These features are no longer used.
+# TODO: remove in the next major version.
+cfg-target-has-atomic = []
+
+[dependencies]
+futures-core = { path = "../futures-core", version = "0.3.32", default-features = false }
+futures-task = { path = "../futures-task", version = "0.3.32", default-features = false }
+futures-channel = { path = "../futures-channel", version = "0.3.32", default-features = false, features = ["std"], optional = true }
+futures-io = { path = "../futures-io", version = "0.3.32", default-features = false, features = ["std"], optional = true }
+futures-sink = { path = "../futures-sink", version = "0.3.32", default-features = false, optional = true }
+futures-macro = { path = "../futures-macro", version = "=0.3.32", default-features = false, optional = true }
+slab = { version = "0.4.7", default-features = false, optional = true }
+memchr = { version = "2.2", optional = true }
+futures_01 = { version = "0.1.25", optional = true, package = "futures" }
+tokio-io = { version = "0.1.9", optional = true }
+pin-project-lite = "0.2.6"
+spin = { version = "0.10.0", optional = true }
+
+# INDIRECT DEPENDENCYS BUT ONLY FOR SPECIFIC MINIMAL VERSIONS
+libc = { version = "0.2.26", optional = true }
+
+[dev-dependencies]
+futures = { path = "../futures", features = ["async-await", "thread-pool"] }
+futures-test = { path = "../futures-test" }
+tokio = "0.1.11"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
+
+[lints]
+workspace = true
diff --git b/rust-vendor/gcd/.cargo_vcs_info.json b/rust-vendor/gcd/.cargo_vcs_info.json
new file mode 100644
index 0000000..58d3e0b
--- /dev/null
+++ b/rust-vendor/gcd/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "df6ba81825b2cb4f1e328f2283fb0fda8f8bda27"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/gcd/.github/workflows/rust.yml b/rust-vendor/gcd/.github/workflows/rust.yml
new file mode 100644
index 0000000..9da80a9
--- /dev/null
+++ b/rust-vendor/gcd/.github/workflows/rust.yml
@@ -0,0 +1,32 @@
+name: Rust
+
+on:
+ push:
+ branches: [ master ]
+ pull_request:
+ branches: [ master ]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Check
+ run: cargo check --verbose
+
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Run tests
+ run: cargo test --verbose
+
+ bench:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Run Benches
+ run: cargo bench
diff --git b/rust-vendor/gcd/Cargo.toml.orig b/rust-vendor/gcd/Cargo.toml.orig
new file mode 100644
index 0000000..d173b77
--- /dev/null
+++ b/rust-vendor/gcd/Cargo.toml.orig
@@ -0,0 +1,22 @@
+[package]
+name = "gcd"
+version = "2.3.0"
+authors = ["Corey Farwell <coreyf@rwell.org>"]
+description = "Calculate the greatest common divisor"
+license = "MIT/Apache-2.0"
+readme = "README.md"
+repository = "https://github.com/frewsxcv/rust-gcd"
+documentation = "https://docs.rs/gcd/"
+categories = ["algorithms"]
+edition = "2021"
+
+[dependencies]
+
+[dev-dependencies]
+criterion = "0.3"
+rand = "0.7"
+rand_chacha = "0.2"
+
+[[bench]]
+name = "gcd_benchmark"
+harness = false
diff --git b/rust-vendor/generic-array/.cargo_vcs_info.json b/rust-vendor/generic-array/.cargo_vcs_info.json
new file mode 100644
index 0000000..5d0288d
--- /dev/null
+++ b/rust-vendor/generic-array/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "1397d2bb40c406901b7827161b73b34b056cbe3a"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/generic-array/Cargo.toml.orig b/rust-vendor/generic-array/Cargo.toml.orig
new file mode 100644
index 0000000..b518422
--- /dev/null
+++ b/rust-vendor/generic-array/Cargo.toml.orig
@@ -0,0 +1,43 @@
+[package]
+
+name = "generic-array"
+version = "0.14.7"
+authors = [ "Bartłomiej Kamiński <fizyk20@gmail.com>", "Aaron Trent <novacrazy@gmail.com>" ]
+
+description = "Generic types implementing functionality of arrays"
+readme = "README.md"
+
+license = "MIT"
+
+documentation = "http://fizyk20.github.io/generic-array/generic_array/"
+repository = "https://github.com/fizyk20/generic-array.git"
+
+keywords = ["generic", "array"]
+categories = ["data-structures", "no-std"]
+
+include = ["src/**/*", "LICENSE", "README.md", "CHANGELOG.md", "build.rs"]
+
+[badges]
+travis-ci = { repository = "fizyk20/generic-array" }
+
+[lib]
+name = "generic_array"
+
+[features]
+more_lengths = []
+
+[dependencies]
+typenum = "1.12"
+serde = { version = "1.0", optional = true, default-features = false }
+zeroize = { version = "1", optional = true, default-features = false }
+
+[dev_dependencies]
+# this can't yet be made optional, see https://github.com/rust-lang/cargo/issues/1596
+serde_json = "1.0"
+bincode = "1.0"
+
+[build_dependencies]
+version_check = "0.9"
+
+[package.metadata.docs.rs]
+features = ["serde", "zeroize"]
\ No newline at end of file
diff --git b/rust-vendor/getrandom/.cargo_vcs_info.json b/rust-vendor/getrandom/.cargo_vcs_info.json
new file mode 100644
index 0000000..6985371
--- /dev/null
+++ b/rust-vendor/getrandom/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38e4ad38309a85b56eef4fc759535ccfc322ba9a"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/getrandom/Cargo.toml.orig b/rust-vendor/getrandom/Cargo.toml.orig
new file mode 100644
index 0000000..933b9d9
--- /dev/null
+++ b/rust-vendor/getrandom/Cargo.toml.orig
@@ -0,0 +1,100 @@
+[package]
+name = "getrandom"
+version = "0.3.4"
+edition = "2021"
+rust-version = "1.63" # Sync tests.yml and README.md.
+authors = ["The Rand Project Developers"]
+license = "MIT OR Apache-2.0"
+description = "A small cross-platform library for retrieving random data from system source"
+documentation = "https://docs.rs/getrandom"
+repository = "https://github.com/rust-random/getrandom"
+categories = ["os", "no-std"]
+exclude = [".*"]
+
+[features]
+# Implement std::error::Error for getrandom::Error and
+# use std to retrieve OS error descriptions
+std = []
+
+# Optional backend: wasm_js
+# This flag enables the wasm_js backend and uses it by default on wasm32 where
+# the target_os is unknown. The getrandom_backend cfg may override this.
+# WARNING: It is highly recommended to enable this feature only for binary crates and tests,
+# i.e. avoid unconditionally enabling it in library crates.
+wasm_js = ["dep:wasm-bindgen", "dep:js-sys"]
+
+[dependencies]
+cfg-if = "1"
+
+# getrandom / linux_android_with_fallback
+[target.'cfg(all(any(target_os = "linux", target_os = "android"), not(any(all(target_os = "linux", target_env = ""), getrandom_backend = "custom", getrandom_backend = "linux_raw", getrandom_backend = "rdrand", getrandom_backend = "rndr"))))'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# apple-other
+[target.'cfg(any(target_os = "ios", target_os = "visionos", target_os = "watchos", target_os = "tvos"))'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# efi_rng
+[target.'cfg(all(target_os = "uefi", getrandom_backend = "efi_rng"))'.dependencies]
+r-efi = { version = "5.1", default-features = false }
+
+# getentropy
+[target.'cfg(any(target_os = "macos", target_os = "openbsd", target_os = "vita", target_os = "emscripten"))'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# getrandom
+[target.'cfg(any(target_os = "dragonfly", target_os = "freebsd", target_os = "hurd", target_os = "illumos", target_os = "cygwin", all(target_os = "horizon", target_arch = "arm")))'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# netbsd
+[target.'cfg(target_os = "netbsd")'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# solaris
+[target.'cfg(target_os = "solaris")'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# use_file
+[target.'cfg(any(target_os = "haiku", target_os = "redox", target_os = "nto", target_os = "aix"))'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# vxworks
+[target.'cfg(target_os = "vxworks")'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+# wasi_p2
+[target.'cfg(all(target_arch = "wasm32", target_os = "wasi", target_env = "p2"))'.dependencies]
+wasip2 = { version = "1", default-features = false }
+
+# wasm_js
+[target.'cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))'.dependencies]
+wasm-bindgen = { version = "0.2.98", default-features = false, optional = true }
+[target.'cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none"), target_feature = "atomics"))'.dependencies]
+js-sys = { version = "0.3.77", default-features = false, optional = true }
+[target.'cfg(all(target_arch = "wasm32", any(target_os = "unknown", target_os = "none")))'.dev-dependencies]
+wasm-bindgen-test = "0.3"
+
+[lints.rust.unexpected_cfgs]
+level = "warn"
+check-cfg = [
+ 'cfg(getrandom_backend, values("custom", "efi_rng", "rdrand", "rndr", "linux_getrandom", "linux_raw", "wasm_js", "windows_legacy", "unsupported"))',
+ 'cfg(getrandom_msan)',
+ 'cfg(getrandom_test_linux_fallback)',
+ 'cfg(getrandom_test_linux_without_fallback)',
+ 'cfg(getrandom_test_netbsd_fallback)',
+ 'cfg(target_os, values("cygwin"))', # TODO(MSRV 1.86): Remove this.
+]
+
+[package.metadata.docs.rs]
+features = ["std"]
+
+# workaround for https://github.com/cross-rs/cross/issues/1345
+[package.metadata.cross.target.x86_64-unknown-netbsd]
+pre-build = [
+ "mkdir -p /tmp/netbsd",
+ "curl -fO https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.3/amd64/binary/sets/base.tar.xz",
+ "tar -C /tmp/netbsd -xJf base.tar.xz",
+ "cp /tmp/netbsd/usr/lib/libexecinfo.so /usr/local/x86_64-unknown-netbsd/lib",
+ "rm base.tar.xz",
+ "rm -rf /tmp/netbsd",
+]
diff --git b/rust-vendor/getrandom-0.2.17/.cargo_vcs_info.json b/rust-vendor/getrandom-0.2.17/.cargo_vcs_info.json
new file mode 100644
index 0000000..d0d51b9
--- /dev/null
+++ b/rust-vendor/getrandom-0.2.17/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "b625985d852600a3eeb68556811e59e7c9a6a098"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/getrandom-0.2.17/Cargo.toml.orig b/rust-vendor/getrandom-0.2.17/Cargo.toml.orig
new file mode 100644
index 0000000..fa2a05d
--- /dev/null
+++ b/rust-vendor/getrandom-0.2.17/Cargo.toml.orig
@@ -0,0 +1,67 @@
+[package]
+name = "getrandom"
+version = "0.2.17" # Also update html_root_url in lib.rs when bumping this
+edition = "2018"
+authors = ["The Rand Project Developers"]
+license = "MIT OR Apache-2.0"
+description = "A small cross-platform library for retrieving random data from system source"
+documentation = "https://docs.rs/getrandom"
+repository = "https://github.com/rust-random/getrandom"
+categories = ["os", "no-std"]
+exclude = [".*"]
+
+[dependencies]
+cfg-if = "1"
+
+# When built as part of libstd
+compiler_builtins = { version = "0.1", optional = true }
+core = { version = "1.0", optional = true, package = "rustc-std-workspace-core" }
+
+[target.'cfg(unix)'.dependencies]
+libc = { version = "0.2.154", default-features = false }
+
+[target.'cfg(target_os = "wasi")'.dependencies]
+wasi = { version = "0.11", default-features = false }
+
+[target.'cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown"))'.dependencies]
+wasm-bindgen = { version = "0.2.62", default-features = false, optional = true }
+js-sys = { version = "0.3", optional = true }
+[target.'cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown"))'.dev-dependencies]
+wasm-bindgen-test = "0.3.18"
+
+[features]
+# Implement std-only traits for getrandom::Error
+std = []
+# Disable `/dev/urandom` fallback for Linux and Android targets.
+# Bumps minimum supported Linux kernel version to 3.17 and Android API level to 23 (Marshmallow).
+linux_disable_fallback = []
+# Feature to enable fallback RDRAND-based implementation on x86/x86_64
+rdrand = []
+# Feature to enable JavaScript bindings on wasm*-unknown-unknown
+js = ["wasm-bindgen", "js-sys"]
+# Feature to enable custom RNG implementations
+custom = []
+# Unstable feature to support being a libstd dependency
+rustc-dep-of-std = [
+ "compiler_builtins",
+ "core",
+ "libc/rustc-dep-of-std",
+ "wasi/rustc-dep-of-std",
+]
+# Unstable/test-only feature to run wasm-bindgen tests in a browser
+test-in-browser = []
+
+[package.metadata.docs.rs]
+features = ["std", "custom"]
+rustdoc-args = ["--cfg", "docsrs"]
+
+# workaround for https://github.com/cross-rs/cross/issues/1345
+[package.metadata.cross.target.x86_64-unknown-netbsd]
+pre-build = [
+ "mkdir -p /tmp/netbsd",
+ "curl https://cdn.netbsd.org/pub/NetBSD/NetBSD-9.2/amd64/binary/sets/base.tar.xz -O",
+ "tar -C /tmp/netbsd -xJf base.tar.xz",
+ "cp /tmp/netbsd/usr/lib/libexecinfo.so /usr/local/x86_64-unknown-netbsd/lib",
+ "rm base.tar.xz",
+ "rm -rf /tmp/netbsd",
+]
diff --git b/rust-vendor/glob/.cargo_vcs_info.json b/rust-vendor/glob/.cargo_vcs_info.json
new file mode 100644
index 0000000..195cd9f
--- /dev/null
+++ b/rust-vendor/glob/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "952da299a3a98893805133ec852ab29877e64e98"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/glob/.github/dependabot.yml b/rust-vendor/glob/.github/dependabot.yml
new file mode 100644
index 0000000..de97070
--- /dev/null
+++ b/rust-vendor/glob/.github/dependabot.yml
@@ -0,0 +1,13 @@
+version: 2
+updates:
+ - package-ecosystem: "cargo"
+ directory: "/"
+ schedule:
+ interval: "monthly"
+ open-pull-requests-limit: 10
+ ignore:
+ - dependency-name: "tempdir"
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ schedule:
+ interval: "monthly"
diff --git b/rust-vendor/glob/.github/workflows/publish.yml b/rust-vendor/glob/.github/workflows/publish.yml
new file mode 100644
index 0000000..e715c61
--- /dev/null
+++ b/rust-vendor/glob/.github/workflows/publish.yml
@@ -0,0 +1,27 @@
+name: Release-plz
+
+permissions:
+ pull-requests: write
+ contents: write
+
+on:
+ push:
+ branches:
+ - master
+
+jobs:
+ release-plz:
+ name: Release-plz
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Install Rust (rustup)
+ run: rustup update nightly --no-self-update && rustup default nightly
+ - name: Run release-plz
+ uses: MarcoIeni/release-plz-action@v0.5
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
diff --git b/rust-vendor/glob/.github/workflows/rust.yml b/rust-vendor/glob/.github/workflows/rust.yml
new file mode 100644
index 0000000..e16d2a9
--- /dev/null
+++ b/rust-vendor/glob/.github/workflows/rust.yml
@@ -0,0 +1,99 @@
+name: CI
+
+env:
+ CARGO_TERM_VERBOSE: true
+ RUSTDOCFLAGS: -Dwarnings
+ RUSTFLAGS: -Dwarnings
+
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+
+jobs:
+ test:
+ name: Tests
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ channel:
+ - stable
+ - nightly
+ - 1.63.0 # MSRV of test dependencies
+ os:
+ - macos-13 # x86 MacOS
+ - macos-15 # Arm MacOS
+ - windows-2025
+ - ubuntu-24.04
+ include:
+ - channel: beta
+ os: ubuntu-24.04
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Update rust
+ run: |
+ rustup default ${{ matrix.channel }}
+ rustup update --no-self-update
+
+ - run: cargo test --all
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Update rust
+ run: |
+ # use beta since it gives us near-latest fixes but isn't as volatile as nightly
+ rustup default beta
+ rustup component add clippy
+ rustup update --no-self-update
+ - run: cargo clippy --all -- -Aclippy::while_let_loop
+
+ msrv:
+ name: Check building with the MSRV
+ runs-on: ubuntu-24.04
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Update rust
+ run: |
+ rustup default 1.63.0
+ rustup update --no-self-update
+
+ - run: cargo build
+
+ rustfmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@master
+ - name: Install Rust
+ run: |
+ rustup default nightly
+ rustup update --no-self-update
+ rustup component add rustfmt
+ - run: cargo fmt -- --check
+
+ success:
+ needs:
+ - test
+ - clippy
+ - msrv
+ - rustfmt
+ runs-on: ubuntu-latest
+ # GitHub branch protection is exceedingly silly and treats "jobs skipped because a dependency
+ # failed" as success. So we have to do some contortions to ensure the job fails if any of its
+ # dependencies fails.
+ if: always() # make sure this is never "skipped"
+ steps:
+ # Manually check the status of all dependencies. `if: failure()` does not work.
+ - name: check if any dependency failed
+ run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
diff --git b/rust-vendor/glob/Cargo.toml.orig b/rust-vendor/glob/Cargo.toml.orig
new file mode 100644
index 0000000..a36a0d9
--- /dev/null
+++ b/rust-vendor/glob/Cargo.toml.orig
@@ -0,0 +1,18 @@
+[package]
+name = "glob"
+version = "0.3.3"
+authors = ["The Rust Project Developers"]
+license = "MIT OR Apache-2.0"
+homepage = "https://github.com/rust-lang/glob"
+repository = "https://github.com/rust-lang/glob"
+documentation = "https://docs.rs/glob"
+description = """
+Support for matching file paths against Unix shell style patterns.
+"""
+categories = ["filesystem"]
+rust-version = "1.63.0"
+
+[dev-dependencies]
+# FIXME: This should be replaced by `tempfile`
+tempdir = "0.3"
+doc-comment = "0.3"
diff --git b/rust-vendor/half/.cargo_vcs_info.json b/rust-vendor/half/.cargo_vcs_info.json
new file mode 100644
index 0000000..c4afff8
--- /dev/null
+++ b/rust-vendor/half/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "8cc891f3e4aad956eca7fa79b1f42f87ecd141ae"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/half/.reuse/dep5 b/rust-vendor/half/.reuse/dep5
new file mode 100644
index 0000000..9af2e91
--- /dev/null
+++ b/rust-vendor/half/.reuse/dep5
@@ -0,0 +1,7 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+Copyright: Kathryn Long <squeeself@gmail.com>
+License: MIT OR Apache-2.0
+
+Files: *
+Copyright: 2021 Kathryn Long <squeeself@gmail.com>
+License: MIT OR Apache-2.0
diff --git b/rust-vendor/half/Cargo.toml.orig b/rust-vendor/half/Cargo.toml.orig
new file mode 100644
index 0000000..9c8a3fd
--- /dev/null
+++ b/rust-vendor/half/Cargo.toml.orig
@@ -0,0 +1,63 @@
+[package]
+name = "half"
+# Remember to keep in sync with html_root_url crate attribute
+version = "2.7.1"
+authors = ["Kathryn Long <squeeself@gmail.com>"]
+description = "Half-precision floating point f16 and bf16 types for Rust implementing the IEEE 754-2008 standard binary16 and bfloat16 types."
+repository = "https://github.com/VoidStarKat/half-rs"
+readme = "README.md"
+keywords = ["f16", "bfloat16", "no_std"]
+license = "MIT OR Apache-2.0"
+categories = ["no-std", "data-structures", "encoding"]
+edition = "2021"
+rust-version = "1.81"
+exclude = [".git*", ".editorconfig", ".circleci"]
+
+[features]
+default = ["std"]
+std = ["alloc"]
+use-intrinsics = [] # Deprecated
+alloc = []
+rand_distr = ["dep:rand", "dep:rand_distr"]
+zerocopy = [] # Deprecated
+nightly = []
+
+[dependencies]
+cfg-if = "1.0.0"
+bytemuck = { version = "1.4.1", default-features = false, features = [
+ "derive",
+], optional = true }
+serde = { version = "1.0", default-features = false, features = [
+ "derive",
+], optional = true }
+num-traits = { version = "0.2.16", default-features = false, features = [
+ "libm",
+], optional = true }
+zerocopy = { version = "0.8.26", default-features = false, features = [
+ "derive",
+ "simd",
+] }
+rand = { version = "0.9.0", default-features = false, features = [
+ "thread_rng",
+], optional = true }
+rand_distr = { version = "0.5.0", default-features = false, optional = true }
+rkyv = { version = "0.8.0", optional = true }
+arbitrary = { version = "1.4.1", features = ["derive"], optional = true }
+
+[target.'cfg(target_arch = "spirv")'.dependencies]
+crunchy = "0.2.2"
+
+[dev-dependencies]
+criterion = "0.5"
+quickcheck = "1.0"
+quickcheck_macros = "1.0"
+rand = "0.9.0"
+crunchy = "0.2.2"
+
+[[bench]]
+name = "convert"
+harness = false
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--cfg", "docsrs"]
+all-features = true
diff --git b/rust-vendor/hashbrown/.cargo_vcs_info.json b/rust-vendor/hashbrown/.cargo_vcs_info.json
new file mode 100644
index 0000000..e0ebcf8
--- /dev/null
+++ b/rust-vendor/hashbrown/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "1876e4f02708b93903d55ef598f68e82a826518f"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/hashbrown/Cargo.toml.orig b/rust-vendor/hashbrown/Cargo.toml.orig
new file mode 100644
index 0000000..faa0095
--- /dev/null
+++ b/rust-vendor/hashbrown/Cargo.toml.orig
@@ -0,0 +1,88 @@
+[package]
+name = "hashbrown"
+version = "0.16.1"
+authors = ["Amanieu d'Antras <amanieu@gmail.com>"]
+description = "A Rust port of Google's SwissTable hash map"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/hashbrown"
+readme = "README.md"
+keywords = ["hash", "no_std", "hashmap", "swisstable"]
+categories = ["data-structures", "no-std"]
+exclude = [".github", "/ci/*"]
+edition = "2021"
+rust-version = "1.65.0"
+
+[dependencies]
+# For the default hasher
+foldhash = { version = "0.2.0", default-features = false, optional = true }
+
+# For external trait impls
+rayon = { version = "1.9.0", optional = true }
+serde_core = { version = "1.0.221", default-features = false, optional = true }
+
+# When built as part of libstd
+core = { version = "1.0.0", optional = true, package = "rustc-std-workspace-core" }
+alloc = { version = "1.0.0", optional = true, package = "rustc-std-workspace-alloc" }
+
+# Support for allocators that use allocator-api2
+allocator-api2 = { version = "0.2.9", optional = true, default-features = false, features = [
+ "alloc",
+] }
+
+# Equivalent trait which can be shared with other hash table implementations.
+# NB: this is a public dependency because `Equivalent` is re-exported!
+equivalent = { version = "1.0", optional = true, default-features = false }
+
+# serde v1.0.220 is the first version that released with `serde_core`.
+# This is required to avoid conflict with other `serde` users which may require an older version.
+[target.'cfg(any())'.dependencies]
+serde = { version = "1.0.220", default-features = false, optional = true }
+
+[dev-dependencies]
+lazy_static = "1.4"
+rand = { version = "0.9.0", features = ["small_rng"] }
+rayon = "1.2"
+fnv = "1.0.7"
+serde_test = "1.0"
+bumpalo = { version = "3.13.0", features = ["allocator-api2"] }
+
+[target.'cfg(unix)'.dev-dependencies]
+libc = "0.2.155"
+
+[features]
+default = ["default-hasher", "inline-more", "allocator-api2", "equivalent", "raw-entry"]
+
+# Enables use of nightly features. This is only guaranteed to work on the latest
+# version of nightly Rust.
+nightly = ["foldhash?/nightly", "bumpalo/allocator_api"]
+
+# Enables the RustcEntry API used to provide the standard library's Entry API.
+rustc-internal-api = []
+
+# Internal feature used when building as part of the standard library.
+rustc-dep-of-std = [
+ "nightly",
+ "core",
+ "alloc",
+ "rustc-internal-api",
+]
+
+# Enables serde support.
+serde = ["dep:serde_core", "dep:serde"]
+
+# Enables the deprecated RawEntry API.
+raw-entry = []
+
+# Provides a default hasher. Currently this is foldhash but this is subject to
+# change in the future. Note that the default hasher does *not* provide HashDoS
+# resistance, unlike the one in the standard library.
+default-hasher = ["dep:foldhash"]
+
+# Enables usage of `#[inline]` on far more functions than by default in this
+# crate. This may lead to a performance increase but often comes at a compile
+# time cost.
+inline-more = []
+
+[package.metadata.docs.rs]
+features = ["nightly", "rayon", "serde", "raw-entry"]
+rustdoc-args = ["--generate-link-to-definition"]
diff --git b/rust-vendor/hashbrown-0.14.5/.cargo_vcs_info.json b/rust-vendor/hashbrown-0.14.5/.cargo_vcs_info.json
new file mode 100644
index 0000000..71be784
--- /dev/null
+++ b/rust-vendor/hashbrown-0.14.5/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "025d0f58b62d074f5fd660a22fe293cdc237d589"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/hashbrown-0.14.5/Cargo.toml.orig b/rust-vendor/hashbrown-0.14.5/Cargo.toml.orig
new file mode 100644
index 0000000..7e50b43
--- /dev/null
+++ b/rust-vendor/hashbrown-0.14.5/Cargo.toml.orig
@@ -0,0 +1,71 @@
+[package]
+name = "hashbrown"
+version = "0.14.5"
+authors = ["Amanieu d'Antras <amanieu@gmail.com>"]
+description = "A Rust port of Google's SwissTable hash map"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/hashbrown"
+readme = "README.md"
+keywords = ["hash", "no_std", "hashmap", "swisstable"]
+categories = ["data-structures", "no-std"]
+exclude = [".github", "/ci/*"]
+edition = "2021"
+rust-version = "1.63.0"
+
+[dependencies]
+# For the default hasher
+ahash = { version = "0.8.7", default-features = false, optional = true }
+
+# For external trait impls
+rayon = { version = "1.0", optional = true }
+serde = { version = "1.0.25", default-features = false, optional = true }
+rkyv = { version = "0.7.42", optional = true, default-features = false, features = [
+ "alloc",
+] }
+
+# When built as part of libstd
+core = { version = "1.0.0", optional = true, package = "rustc-std-workspace-core" }
+compiler_builtins = { version = "0.1.2", optional = true }
+alloc = { version = "1.0.0", optional = true, package = "rustc-std-workspace-alloc" }
+
+# Support for allocators that use allocator-api2
+allocator-api2 = { version = "0.2.9", optional = true, default-features = false, features = [
+ "alloc",
+] }
+
+# Equivalent trait which can be shared with other hash table implementations.
+equivalent = { version = "1.0", optional = true, default-features = false }
+
+[dev-dependencies]
+lazy_static = "1.4"
+rand = { version = "0.8.3", features = ["small_rng"] }
+rayon = "1.0"
+fnv = "1.0.7"
+serde_test = "1.0"
+doc-comment = "0.3.1"
+bumpalo = { version = "3.13.0", features = ["allocator-api2"] }
+rkyv = { version = "0.7.42", features = ["validation"] }
+
+[features]
+default = ["ahash", "inline-more", "allocator-api2"]
+
+nightly = ["allocator-api2?/nightly", "bumpalo/allocator_api"]
+
+rustc-internal-api = []
+rustc-dep-of-std = [
+ "nightly",
+ "core",
+ "compiler_builtins",
+ "alloc",
+ "rustc-internal-api",
+]
+raw = []
+
+# Enables usage of `#[inline]` on far more functions than by default in this
+# crate. This may lead to a performance increase but often comes at a compile
+# time cost.
+inline-more = []
+
+[package.metadata.docs.rs]
+features = ["nightly", "rayon", "serde", "raw"]
+rustdoc-args = ["--generate-link-to-definition"]
diff --git b/rust-vendor/hashbrown-0.15.5/.cargo_vcs_info.json b/rust-vendor/hashbrown-0.15.5/.cargo_vcs_info.json
new file mode 100644
index 0000000..94e46c9
--- /dev/null
+++ b/rust-vendor/hashbrown-0.15.5/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "b751eef8e99ccf3652046ef4a9e1ec47c1bfb78d"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/hashbrown-0.15.5/Cargo.toml.orig b/rust-vendor/hashbrown-0.15.5/Cargo.toml.orig
new file mode 100644
index 0000000..4d870fa
--- /dev/null
+++ b/rust-vendor/hashbrown-0.15.5/Cargo.toml.orig
@@ -0,0 +1,77 @@
+[package]
+name = "hashbrown"
+version = "0.15.5"
+authors = ["Amanieu d'Antras <amanieu@gmail.com>"]
+description = "A Rust port of Google's SwissTable hash map"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/hashbrown"
+readme = "README.md"
+keywords = ["hash", "no_std", "hashmap", "swisstable"]
+categories = ["data-structures", "no-std"]
+exclude = [".github", "/ci/*"]
+edition = "2021"
+rust-version = "1.65.0"
+
+[dependencies]
+# For the default hasher
+foldhash = { version = "0.1.2", default-features = false, optional = true }
+
+# For external trait impls
+rayon = { version = "1.2", optional = true }
+serde = { version = "1.0.25", default-features = false, optional = true }
+
+# When built as part of libstd
+core = { version = "1.0.0", optional = true, package = "rustc-std-workspace-core" }
+alloc = { version = "1.0.0", optional = true, package = "rustc-std-workspace-alloc" }
+
+# Support for allocators that use allocator-api2
+allocator-api2 = { version = "0.2.9", optional = true, default-features = false, features = [
+ "alloc",
+] }
+
+# Equivalent trait which can be shared with other hash table implementations.
+equivalent = { version = "1.0", optional = true, default-features = false }
+
+[dev-dependencies]
+lazy_static = "1.4"
+rand = { version = "0.9.0", features = ["small_rng"] }
+rayon = "1.2"
+fnv = "1.0.7"
+serde_test = "1.0"
+doc-comment = "0.3.1"
+bumpalo = { version = "3.13.0", features = ["allocator-api2"] }
+
+[features]
+default = ["default-hasher", "inline-more", "allocator-api2", "equivalent", "raw-entry"]
+
+# Enables use of nightly features. This is only guaranteed to work on the latest
+# version of nightly Rust.
+nightly = ["bumpalo/allocator_api"]
+
+# Enables the RustcEntry API used to provide the standard library's Entry API.
+rustc-internal-api = []
+
+# Internal feature used when building as part of the standard library.
+rustc-dep-of-std = [
+ "nightly",
+ "core",
+ "alloc",
+ "rustc-internal-api",
+]
+
+# Enables the deprecated RawEntry API.
+raw-entry = []
+
+# Provides a default hasher. Currently this is foldhash but this is subject to
+# change in the future. Note that the default hasher does *not* provide HashDoS
+# resistance, unlike the one in the standard library.
+default-hasher = ["dep:foldhash"]
+
+# Enables usage of `#[inline]` on far more functions than by default in this
+# crate. This may lead to a performance increase but often comes at a compile
+# time cost.
+inline-more = []
+
+[package.metadata.docs.rs]
+features = ["nightly", "rayon", "serde", "raw-entry"]
+rustdoc-args = ["--generate-link-to-definition"]
diff --git b/rust-vendor/hex/.cargo_vcs_info.json b/rust-vendor/hex/.cargo_vcs_info.json
new file mode 100644
index 0000000..29545f9
--- /dev/null
+++ b/rust-vendor/hex/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "sha1": "b2b4370b5bf021b98ee7adc92233e8de3f2de792"
+ }
+}
diff --git b/rust-vendor/hex/.github/workflows/rust.yml b/rust-vendor/hex/.github/workflows/rust.yml
new file mode 100644
index 0000000..523dce5
--- /dev/null
+++ b/rust-vendor/hex/.github/workflows/rust.yml
@@ -0,0 +1,32 @@
+name: Test hex
+on: [push, pull_request]
+
+env:
+ RUST_BACKTRACE: '1'
+ RUSTFLAGS: -D warnings
+
+jobs:
+ test:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ # We want the tests to run on all configurations, even if jobs (like on nightly), fail.
+ fail-fast: false
+ matrix:
+ os: [ubuntu-latest, windows-latest, macos-latest]
+ rust: [stable, beta, nightly]
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: hecrj/setup-rust-action@v1
+ with:
+ rust-version: ${{ matrix.rust }}
+ - name: Build
+ run: cargo build --verbose
+ - name: Run tests
+ run: cargo test --verbose
+ - name: Run tests [no-default-features]
+ run: cargo test --verbose --no-default-features
+ - name: Run tests [serde]
+ run: cargo test --verbose --features serde
+ - name: Validate benches still work
+ run: cargo bench --all -- --test
diff --git b/rust-vendor/hex/.gitlab-ci.yml b/rust-vendor/hex/.gitlab-ci.yml
new file mode 100644
index 0000000..afa6710
--- /dev/null
+++ b/rust-vendor/hex/.gitlab-ci.yml
@@ -0,0 +1,47 @@
+stages:
+ - compile
+ - test
+
+compile:
+ stage: compile
+ image: liuchong/rustup:$RUST_VERSION
+ script:
+ - cargo build
+ cache:
+ key: "$CI_COMMIT_REF_SLUG:$RUST_VERSION"
+ paths:
+ - target/
+ parallel:
+ matrix:
+ - RUST_VERSION:
+ - stable
+ - stable-musl
+ - beta
+ - beta-musl
+ - nightly
+ - nightly-musl
+
+test:
+ stage: test
+ image: liuchong/rustup:$RUST_VERSION
+ script:
+ - cargo test
+ - cargo test --no-default-features
+ - cargo test --no-default-features --features alloc
+ - cargo test --no-default-features --features std
+ - cargo test --no-default-features --features serde
+ cache:
+ key: "$CI_COMMIT_REF_SLUG:$RUST_VERSION"
+ paths:
+ - target/
+ needs:
+ - compile
+ parallel:
+ matrix:
+ - RUST_VERSION:
+ - stable
+ - stable-musl
+ - beta
+ - beta-musl
+ - nightly
+ - nightly-musl
diff --git b/rust-vendor/hex/.travis.yml b/rust-vendor/hex/.travis.yml
new file mode 100644
index 0000000..8c16686
--- /dev/null
+++ b/rust-vendor/hex/.travis.yml
@@ -0,0 +1,32 @@
+language: rust
+os:
+ - linux
+ - windows
+ - osx
+rust:
+ - stable
+ - beta
+ - nightly
+env:
+ global:
+ - RUST_BACKTRACE=1
+ - RUSTFLAGS="-D warnings"
+matrix:
+ allow_failures:
+ - rust: nightly
+
+install:
+ - if [[ $TRAVIS_RUST_VERSION == "stable" && $TRAVIS_OS_NAME == "linux" ]]; then rustup component add rustfmt; fi
+ - if [[ $TRAVIS_RUST_VERSION == "stable" && $TRAVIS_OS_NAME == "linux" ]]; then rustup component add clippy; fi
+
+script:
+ - if [[ $TRAVIS_RUST_VERSION == "stable" && $TRAVIS_OS_NAME == "linux" ]]; then cargo fmt -- --check; fi
+ - if [[ $TRAVIS_RUST_VERSION == "stable" && $TRAVIS_OS_NAME == "linux" ]]; then cargo clippy -- -W clippy::all; fi
+ - cargo test
+ - cargo test --features serde
+ - cargo test --no-default-features
+ - cargo test --no-default-features --features std
+ - cargo test --no-default-features --features alloc
+ - cargo test --no-default-features --features serde
+ # Validate benches still work.
+ - cargo bench --all -- --test
diff --git b/rust-vendor/hex/Cargo.toml.orig b/rust-vendor/hex/Cargo.toml.orig
new file mode 100644
index 0000000..b25d8dd
--- /dev/null
+++ b/rust-vendor/hex/Cargo.toml.orig
@@ -0,0 +1,40 @@
+[package]
+name = "hex"
+version = "0.4.3"
+authors = ["KokaKiwi <kokakiwi@kokakiwi.net>"]
+description = "Encoding and decoding data into/from hexadecimal representation."
+license = "MIT OR Apache-2.0"
+documentation = "https://docs.rs/hex/"
+repository = "https://github.com/KokaKiwi/rust-hex"
+edition = "2018"
+readme = "README.md"
+keywords = ["no_std", "hex"]
+categories = ["encoding", "no-std"]
+
+[badges]
+maintenance = { status = "actively-developed" }
+
+[features]
+default = ["std"]
+alloc = []
+std = ["alloc"]
+
+[[bench]]
+name = "hex"
+harness = false
+
+[dependencies]
+serde = { version = "1.0", default-features = false, optional = true }
+
+[dev-dependencies]
+criterion = "0.3"
+rustc-hex = "2.1"
+faster-hex = "0.5"
+version-sync = "0.9"
+pretty_assertions = "0.6"
+serde = { version = "1.0", features = ["derive"] }
+serde_json = "1.0"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/hex-literal/.cargo_vcs_info.json b/rust-vendor/hex-literal/.cargo_vcs_info.json
new file mode 100644
index 0000000..1a901a7
--- /dev/null
+++ b/rust-vendor/hex-literal/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "5c88fe4aa935251bb8285b9e8f8c7433c464e833"
+ },
+ "path_in_vcs": "hex-literal"
+}
\ No newline at end of file
diff --git b/rust-vendor/hex-literal/Cargo.toml.orig b/rust-vendor/hex-literal/Cargo.toml.orig
new file mode 100644
index 0000000..d7f7563
--- /dev/null
+++ b/rust-vendor/hex-literal/Cargo.toml.orig
@@ -0,0 +1,13 @@
+[package]
+name = "hex-literal"
+version = "1.1.0"
+authors = ["RustCrypto Developers"]
+edition = "2024"
+rust-version = "1.85"
+documentation = "https://docs.rs/hex-literal"
+readme = "README.md"
+repository = "https://github.com/RustCrypto/utils"
+license = "MIT OR Apache-2.0"
+keywords = ["hex", "literals"]
+categories = ["no-std"]
+description = "A macro for converting hexadecimal string literals to a byte array at compile time"
diff --git b/rust-vendor/hostname/.cargo_vcs_info.json b/rust-vendor/hostname/.cargo_vcs_info.json
new file mode 100644
index 0000000..18344a0
--- /dev/null
+++ b/rust-vendor/hostname/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "c697709235a03e6d5791f70b9c83d5eb9b51c197"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/hostname/.editorconfig b/rust-vendor/hostname/.editorconfig
new file mode 100644
index 0000000..74c73a9
--- /dev/null
+++ b/rust-vendor/hostname/.editorconfig
@@ -0,0 +1,12 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+charset = utf-8
+indent_style = space
+indent_size = 4
+trim_trailing_whitespace = true
+
+[*.yml]
+indent_size = 2
diff --git b/rust-vendor/hostname/.github/FUNDING.yml b/rust-vendor/hostname/.github/FUNDING.yml
new file mode 100644
index 0000000..90ee18e
--- /dev/null
+++ b/rust-vendor/hostname/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+github: [djc]
+patreon: dochtman
diff --git b/rust-vendor/hostname/.github/dependabot.yml b/rust-vendor/hostname/.github/dependabot.yml
new file mode 100644
index 0000000..cf84b1b
--- /dev/null
+++ b/rust-vendor/hostname/.github/dependabot.yml
@@ -0,0 +1,13 @@
+version: 2
+updates:
+- package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: weekly
+ time: "05:23"
+ open-pull-requests-limit: 99
+- package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: weekly
+ time: "05:27"
diff --git b/rust-vendor/hostname/.github/workflows/ci.yml b/rust-vendor/hostname/.github/workflows/ci.yml
new file mode 100644
index 0000000..6a502ff
--- /dev/null
+++ b/rust-vendor/hostname/.github/workflows/ci.yml
@@ -0,0 +1,277 @@
+on: push
+name: Continuous integration
+
+jobs:
+ lints:
+ name: Lints
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os:
+ - ubuntu-latest
+ - macOS-latest
+ - windows-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: nightly
+ components: rustfmt, clippy
+
+ - name: Run rustfmt
+ if: matrix.os == 'ubuntu-latest'
+ run: |
+ cargo fmt --all -- --check
+
+ - name: Run clippy
+ run: |
+ cargo clippy --locked --all-targets --all-features -- -D warnings
+
+ tier1:
+ # Matches the Rust Tier 1 platform support
+ # See https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-1-with-host-tools
+ name: Tier 1
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ include:
+ - os: ubuntu-latest
+ target: aarch64-unknown-linux-gnu
+ use_cross: true
+ - os: ubuntu-latest
+ target: i686-unknown-linux-gnu
+ use_cross: true
+ - os: ubuntu-latest
+ target: x86_64-unknown-linux-gnu
+ # TODO: Enable it back
+ # - os: windows-latest
+ # target: i686-pc-windows-gnu
+ - os: windows-latest
+ target: i686-pc-windows-msvc
+ use_cross: true
+ - os: windows-latest
+ target: x86_64-pc-windows-gnu
+ - os: windows-latest
+ target: x86_64-pc-windows-msvc
+ - os: macos-latest
+ target: x86_64-apple-darwin
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+ components: rustfmt
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+
+ - name: Check without features
+ run: cargo check --locked --target=${{ matrix.target }}
+
+ - name: Check with all features enabled
+ run: ${{ env.CARGO_BINARY }} check --locked --all-features --target=${{ matrix.target }}
+ env:
+ CARGO_BINARY: ${{ matrix.use_cross == true && 'cross' || 'cargo' }}
+
+ - name: Run tests
+ run: ${{ env.CARGO_BINARY }} test --locked --all-features --target=${{ matrix.target }}
+ env:
+ CARGO_BINARY: ${{ matrix.use_cross == true && 'cross' || 'cargo' }}
+
+ tier2_with_host_tools:
+ # Matches Rust "Tier 2 with Host Tools" platform support
+ # For as much as possible
+ #
+ # See https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-2-with-host-tools
+ name: Tier 2 (with Host Tools)
+ needs: tier1
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ include:
+ - os: macos-latest
+ target: aarch64-apple-darwin
+ - os: windows-latest
+ target: aarch64-pc-windows-msvc
+ - os: ubuntu-latest
+ target: aarch64-unknown-linux-musl
+ - os: ubuntu-latest
+ target: arm-unknown-linux-gnueabi
+ - os: ubuntu-latest
+ target: arm-unknown-linux-gnueabihf
+ - os: ubuntu-latest
+ target: armv7-unknown-linux-gnueabihf
+ - os: ubuntu-latest
+ target: powerpc-unknown-linux-gnu
+ - os: ubuntu-latest
+ target: powerpc64-unknown-linux-gnu
+ - os: ubuntu-latest
+ target: powerpc64le-unknown-linux-gnu
+ - os: ubuntu-latest
+ target: riscv64gc-unknown-linux-gnu
+ - os: ubuntu-latest
+ target: s390x-unknown-linux-gnu
+ - os: ubuntu-latest
+ target: x86_64-unknown-linux-musl
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+ - name: Run build
+ run: |
+ cross build --locked --all-features --target=${{ matrix.target }}
+
+ tier2_with_host_tools_via_cross:
+ # Matches Rust "Tier 2 with Host Tools" platform support
+ # For as much as possible, but where `cross` is needed for cross-compilation
+ #
+ # See https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-2-with-host-tools
+ name: Tier 2 (with Host Tools, via Cross)
+ needs: tier1
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - x86_64-unknown-freebsd
+ - x86_64-unknown-illumos
+ - x86_64-unknown-netbsd
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+ - name: Run build
+ run: |
+ cross build --locked --all-features --target=${{ matrix.target }}
+
+ tier2_without_host_tools:
+ # Matches Rust "Tier 2 with host tools" platform support
+ # For as much as possible, but where `cross` is needed for cross-compilation
+ #
+ # See https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-2-with-host-tools
+ name: Tier 2 (without Host Tools)
+ needs: tier1
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ include:
+ - os: macos-latest
+ target: aarch64-apple-ios
+ # `rust-std` is not available
+ # - os: ubuntu-latest
+ # target: aarch64-unknown-fuchsia
+ - os: ubuntu-latest
+ target: aarch64-linux-android
+ - os: ubuntu-latest
+ target: arm-linux-androideabi
+ - os: ubuntu-latest
+ target: arm-unknown-linux-musleabi
+ - os: ubuntu-latest
+ target: arm-unknown-linux-musleabihf
+ - os: ubuntu-latest
+ target: armv5te-unknown-linux-gnueabi
+ - os: ubuntu-latest
+ target: armv5te-unknown-linux-musleabi
+ - os: ubuntu-latest
+ target: armv7-linux-androideabi
+ - os: ubuntu-latest
+ target: armv7-unknown-linux-gnueabi
+ - os: ubuntu-latest
+ target: armv7-unknown-linux-musleabi
+ - os: ubuntu-latest
+ target: armv7-unknown-linux-musleabihf
+ - os: ubuntu-latest
+ target: i586-unknown-linux-gnu
+ - os: ubuntu-latest
+ target: i586-unknown-linux-musl
+ - os: ubuntu-latest
+ target: i686-linux-android
+ - os: ubuntu-latest
+ target: i686-unknown-freebsd
+ - os: ubuntu-latest
+ target: i686-unknown-linux-musl
+ - os: ubuntu-latest
+ target: sparc64-unknown-linux-gnu
+ - os: ubuntu-latest
+ target: sparcv9-sun-solaris
+ - os: ubuntu-latest
+ target: thumbv7neon-linux-androideabi
+ - os: ubuntu-latest
+ target: thumbv7neon-unknown-linux-gnueabihf
+ - os: ubuntu-latest
+ target: x86_64-linux-android
+ - os: ubuntu-latest
+ target: x86_64-pc-solaris
+ - os: ubuntu-latest
+ target: x86_64-unknown-linux-gnux32
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+ - name: Run build
+ run: |
+ cross build --locked --all-features --target=${{ matrix.target }}
+
+ tier2_without_host_tools_default_features:
+ # Matches Rust "Tier 2 with host tools" platform support
+ # For as much as possible, but where `cross` is needed for cross-compilation
+ #
+ # The only difference from the `tier2_without_host_tools` group is that
+ # no optional crate features are enabled (e.g. Redox has `gethostname(2)`, but not the `sethostname(2)`)
+ #
+ # See https://doc.rust-lang.org/nightly/rustc/platform-support.html#tier-2-with-host-tools
+ name: Tier 2 (without Host Tools)
+ needs: tier1
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ include:
+ - os: ubuntu-latest
+ target: x86_64-unknown-redox
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+ - name: Run build (default features)
+ run: |
+ cross build --locked --target=${{ matrix.target }}
+
+ msrv:
+ name: MSRV
+ strategy:
+ matrix:
+ include:
+ - os: ubuntu-latest
+ - os: macos-latest
+ - os: windows-latest
+
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: 1.74
+ - name: Check MSRV
+ run: cargo check --locked --lib --all-features
diff --git b/rust-vendor/hostname/Cargo.toml.orig b/rust-vendor/hostname/Cargo.toml.orig
new file mode 100644
index 0000000..042ca8b
--- /dev/null
+++ b/rust-vendor/hostname/Cargo.toml.orig
@@ -0,0 +1,34 @@
+[package]
+name = "hostname"
+version = "0.4.2"
+description = "Cross-platform system's host name functions"
+categories = ["api-bindings", "os"]
+keywords = ["hostname", "gethostname", "sethostname"]
+repository = "https://github.com/djc/hostname"
+readme = "README.md"
+license = "MIT"
+edition = "2021"
+rust-version = "1.74"
+
+[features]
+default = []
+# Enables the `hostname::set` function
+set = []
+
+[dependencies]
+cfg-if = "1"
+
+[target.'cfg(any(unix, target_os = "redox"))'.dependencies]
+libc = "0.2"
+
+[target.'cfg(target_os = "windows")'.dependencies]
+windows-link = "0.2"
+
+[dev-dependencies]
+similar-asserts = { version = "1.6.1" }
+version-sync = "0.9"
+windows-bindgen = "0.65"
+
+[package.metadata.docs.rs]
+features = ["set"]
+rustdoc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/iana-time-zone/.cargo_vcs_info.json b/rust-vendor/iana-time-zone/.cargo_vcs_info.json
new file mode 100644
index 0000000..6fcf6d4
--- /dev/null
+++ b/rust-vendor/iana-time-zone/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "3726968181ae67d95c8de2f750a95b9c703ae4c8"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/iana-time-zone/.clang-format b/rust-vendor/iana-time-zone/.clang-format
new file mode 100644
index 0000000..444c17f
--- /dev/null
+++ b/rust-vendor/iana-time-zone/.clang-format
@@ -0,0 +1,9 @@
+---
+BasedOnStyle: Google
+IndentWidth: 4
+ColumnLimit: 100
+---
+Language: Cpp
+SortIncludes: false
+TabWidth: 4
+UseTab: Never
diff --git b/rust-vendor/iana-time-zone/.clippy.toml b/rust-vendor/iana-time-zone/.clippy.toml
new file mode 100644
index 0000000..0298321
--- /dev/null
+++ b/rust-vendor/iana-time-zone/.clippy.toml
@@ -0,0 +1,2 @@
+avoid-breaking-exported-api = true
+msrv = "1.62.0"
diff --git b/rust-vendor/iana-time-zone/.github/dependabot.yml b/rust-vendor/iana-time-zone/.github/dependabot.yml
new file mode 100644
index 0000000..b865579
--- /dev/null
+++ b/rust-vendor/iana-time-zone/.github/dependabot.yml
@@ -0,0 +1,11 @@
+version: 2
+updates:
+ - package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: daily
+
+ - package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: "daily"
diff --git b/rust-vendor/iana-time-zone/.github/workflows/release.yml b/rust-vendor/iana-time-zone/.github/workflows/release.yml
new file mode 100644
index 0000000..1e6d707
--- /dev/null
+++ b/rust-vendor/iana-time-zone/.github/workflows/release.yml
@@ -0,0 +1,17 @@
+name: Publish to crates.io
+on:
+ push:
+ tags: ['v*'] # Triggers when pushing tags starting with 'v'
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+ environment: release # Optional: for enhanced security
+ permissions:
+ id-token: write # Required for OIDC token exchange
+ steps:
+ - uses: actions/checkout@v6
+ - uses: rust-lang/crates-io-auth-action@v1
+ id: auth
+ - run: cargo publish
+ env:
+ CARGO_REGISTRY_TOKEN: ${{ steps.auth.outputs.token }}
diff --git b/rust-vendor/iana-time-zone/.github/workflows/rust.yml b/rust-vendor/iana-time-zone/.github/workflows/rust.yml
new file mode 100644
index 0000000..4fcc15c
--- /dev/null
+++ b/rust-vendor/iana-time-zone/.github/workflows/rust.yml
@@ -0,0 +1,494 @@
+name: build
+
+on:
+ push:
+ branches:
+ - main
+ pull_request:
+ branches: ["**"]
+ schedule:
+ # At 23:25 on Thursday.
+ - cron: "25 23 * * 4"
+ workflow_dispatch:
+
+permissions: {}
+
+jobs:
+ test:
+ strategy:
+ fail-fast: false
+ matrix:
+ runs-on: [ubuntu-22.04, windows-2022, macos-latest]
+ toolchain:
+ - "1.62"
+ - stable
+ - nightly
+ versions:
+ - ""
+ - -Zminimal-versions
+ exclude:
+ # package `regex v1.11.1` cannot be built because it requires rustc
+ # 1.65 or newer, while the currently active rustc version is 1.62.0
+ - toolchain: "1.62"
+ versions: ""
+ # Older proc-macro2 crates fail to compile on the latest nightly
+ - toolchain: nightly
+ versions: -Zminimal-versions
+ runs-on: ${{ matrix.runs-on }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update
+ rustup default ${{ matrix.toolchain }}
+ - name: Update lockfile
+ run: cargo generate-lockfile ${{ matrix.versions }}
+ env:
+ RUSTC_BOOTSTRAP: 1
+ - run: cargo test --all-targets
+ - run: cargo run --example stress-test
+
+ build-wasm:
+ strategy:
+ fail-fast: false
+ matrix:
+ versions:
+ - ""
+ - -Zminimal-versions
+ toolchain:
+ - stable
+ - nightly
+ include:
+ # Without `-Zminimal-versions` a too recent bumpalo version is selected. Newer versions use `edition = "2021"`.
+ - versions: -Zminimal-versions
+ - toolchain: "1.62"
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-unknown-unknown
+ rustup default ${{ matrix.toolchain }}
+ - name: Update lockfile
+ run: cargo generate-lockfile ${{ matrix.versions }}
+ env:
+ RUSTC_BOOTSTRAP: 1
+ - run: cargo build --lib
+
+ test-wasm:
+ strategy:
+ fail-fast: false
+ matrix:
+ toolchain:
+ - stable
+ - nightly
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-unknown-unknown
+ rustup default ${{ matrix.toolchain }}
+ - name: Install Node
+ uses: actions/setup-node@v6
+ with:
+ node-version: "lts/*"
+ - name: Install "wasm-pack"
+ uses: taiki-e/install-action@v2
+ with:
+ tool: wasm-pack
+ - run: wasm-pack test --node
+
+ test-wasi:
+ strategy:
+ fail-fast: false
+ matrix:
+ toolchain:
+ - stable
+ - nightly
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-wasip1
+ rustup default ${{ matrix.toolchain }}
+ - env:
+ CARGO_BUILD_TARGET: wasm32-wasip1
+ run: cargo build --release --examples
+ - name: Install wasmtime
+ uses: bytecodealliance/actions/wasmtime/setup@6aecabac1eb1dcf7ed94ba9471974415ee2ebef2 # v1
+ - name: Run example using wasmtime
+ run: wasmtime ./target/wasm32-wasip1/release/examples/get_timezone.wasm
+
+ test-emscripten:
+ strategy:
+ fail-fast: false
+ matrix:
+ toolchain:
+ - stable
+ - nightly
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target wasm32-unknown-emscripten
+ rustup default ${{ matrix.toolchain }}
+ - uses: mymindstorm/setup-emsdk@6ab9eb1bda2574c4ddb79809fc9247783eaf9021 # v14
+ - env:
+ CARGO_TARGET_WASM32_UNKNOWN_EMSCRIPTEN_RUNNER: node
+ CARGO_BUILD_TARGET: wasm32-unknown-emscripten
+ run: cargo test
+
+ build-cross:
+ strategy:
+ fail-fast: false
+ matrix:
+ target:
+ - s390x-unknown-linux-gnu
+ - x86_64-unknown-freebsd
+ - x86_64-unknown-illumos
+ # # NetBSD disabled waiting for release with fix from
+ # # https://github.com/cross-rs/cross/issues/1345
+ # - x86_64-unknown-netbsd
+ # # Solaris disabled while https://github.com/cross-rs/cross/issues/1599 is open
+ # - sparcv9-sun-solaris
+ versions:
+ - ""
+ - -Zminimal-versions
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install stable --profile minimal --no-self-update --target ${{ matrix.target }}
+ - name: Update lockfile
+ run: cargo generate-lockfile ${{ matrix.versions }}
+ env:
+ RUSTC_BOOTSTRAP: 1
+
+ - name: Install "cross"
+ uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+
+ - run: cross build --target ${{ matrix.target }} --examples
+
+ build-android:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: rustup toolchain install stable --profile minimal --no-self-update
+ - name: Add Rust components
+ run: rustup component add clippy rust-src
+ - name: Add Rust toolchain
+ run: rustup target add aarch64-linux-android armv7-linux-androideabi
+ - name: Setup Android NDK
+ uses: nttld/setup-ndk@v1
+ id: setup-ndk
+ with:
+ ndk-version: r25b
+ local-cache: true
+
+ - name: Install "cargo ndk"
+ uses: taiki-e/install-action@v2
+ with:
+ tool: cargo-ndk
+
+ - name: Check
+ run: cargo ndk check --lib
+ env:
+ ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
+
+ - name: Clippy
+ run: cargo ndk clippy --lib
+ env:
+ ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
+
+ - name: Build library
+ run: cargo ndk build --lib
+ env:
+ ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }}
+
+ build-ios-cross:
+ strategy:
+ fail-fast: false
+ matrix:
+ toolchain:
+ - "1.62"
+ - stable
+ target:
+ - x86_64-apple-ios
+ versions:
+ - ""
+ - -Zminimal-versions
+ exclude:
+ # package `regex v1.11.1` cannot be built because it requires rustc
+ # 1.65 or newer, while the currently active rustc version is 1.62.0
+ - toolchain: "1.62"
+ versions: ""
+ runs-on: macos-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target ${{ matrix.target }}
+ rustup default ${{ matrix.toolchain }}
+ - name: Update lockfile
+ run: cargo generate-lockfile ${{ matrix.versions }}
+ env:
+ RUSTC_BOOTSTRAP: 1
+ - name: Install "cross"
+ run: curl --location --silent --show-error --fail https://github.com/cargo-bins/cargo-quickinstall/releases/download/cross-0.2.5/cross-0.2.5-x86_64-apple-darwin.tar.gz | tar -xzvvf - -C $HOME/.cargo/bin
+ - run: cross build --target ${{ matrix.target }} --examples
+
+ check:
+ strategy:
+ fail-fast: false
+ matrix:
+ toolchain:
+ - "1.62"
+ - stable
+ - nightly
+ versions:
+ - ""
+ - -Zminimal-versions
+ exclude:
+ # package `cc v1.2.17` cannot be built because it requires rustc 1.63
+ # or newer, while the currently active rustc version is 1.62.0
+ - toolchain: "1.62"
+ versions: ""
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ RUST_BACKTRACE: 1
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --component clippy
+ rustup default ${{ matrix.toolchain }}
+ - name: Update lockfile
+ run: cargo generate-lockfile ${{ matrix.versions }}
+ env:
+ RUSTC_BOOTSTRAP: 1
+ - run: cargo check --all-targets --workspace
+ - run: cargo clippy --all-targets --workspace -- -D warnings
+
+ no-docker-image-check-only:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install nightly --profile minimal --no-self-update --component rust-src
+ rustup default nightly
+ - run: cargo check --target x86_64-unknown-haiku -Z build-std --examples
+
+ doc:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install nightly --profile minimal --no-self-update
+ rustup default nightly
+ - run: RUSTDOCFLAGS="-D warnings" cargo doc --all-features
+
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - uses: EmbarkStudios/cargo-deny-action@v2
+
+ fallback:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install stable --profile minimal --no-self-update --target x86_64-fortanix-unknown-sgx
+ # Should fail (outcome is negated):
+ - run: if cargo build --lib --target x86_64-fortanix-unknown-sgx; then exit 1; fi
+ # Should succeed:
+ - run: cargo build --lib --target x86_64-fortanix-unknown-sgx --features fallback
+
+ c:
+ name: Lint and format C
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+
+ - name: Setup Node.js runtime
+ uses: actions/setup-node@v6
+ with:
+ node-version: "lts/*"
+ - name: Install npm
+ run: npm i -f -g npm@8.16.0
+
+ - name: Lint and check formatting with clang-format
+ run: npx github:artichoke/clang-format --check
+
+ test-haiku:
+ strategy:
+ fail-fast: false
+ matrix:
+ runs-on: [ubuntu-22.04, windows-2022, macos-latest]
+ toolchain:
+ - stable
+ versions:
+ - ""
+ runs-on: ${{ matrix.runs-on }}
+ env:
+ RUSTFLAGS: -D warnings
+ RUST_BACKTRACE: 1
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --target x86_64-fortanix-unknown-sgx
+ rustup default ${{ matrix.toolchain }}
+ - name: Update lockfile
+ run: cargo generate-lockfile ${{ matrix.versions }}
+ working-directory: haiku
+ env:
+ RUSTC_BOOTSTRAP: 1
+ - run: cargo test --all-targets
+ working-directory: haiku
+
+ check-haiku:
+ strategy:
+ fail-fast: false
+ matrix:
+ toolchain:
+ - stable
+ versions:
+ - ""
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ RUST_BACKTRACE: 1
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Install Rust
+ run: |
+ rustup toolchain install ${{ matrix.toolchain }} --profile minimal --no-self-update --component clippy
+ rustup default ${{ matrix.toolchain }}
+ - name: Update lockfile
+ run: cargo generate-lockfile ${{ matrix.versions }}
+ working-directory: haiku
+ env:
+ RUSTC_BOOTSTRAP: 1
+ - run: cargo check --all-targets
+ working-directory: haiku
+ - run: cargo clippy --all-targets -- -D warnings
+ working-directory: haiku
+
+ check-all-versions:
+ runs-on: ubuntu-22.04
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+
+ - name: Install Rust
+ run: |
+ rustup toolchain install nightly --profile minimal --no-self-update
+ rustup default nightly
+
+ - name: Install "cargo hack"
+ uses: taiki-e/install-action@v2
+ with:
+ tool: cargo-hack
+
+ - run: cargo hack check --version-range .. --version-step 2 --clean-per-version --clean-per-run
+
+ generate-windows-bindings:
+ name: Generate windows-core bindings with windows-bindgen
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Clean
+ run: rm -rf src/Windows.rs
+ - name: Generate
+ run: cargo r --manifest-path=api_gen/Cargo.toml
+ - name: Diff generated Rust code
+ run: test -z "$(git status --porcelain)" || (echo "::error::Generated files are different, please regenerate with cargo run --manifest-path=api_gen/Cargo.toml!"; git status; false)
+
+ typos:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - uses: crate-ci/typos@master
+
+ devskim:
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+ - name: Run DevSkim scanner
+ uses: microsoft/DevSkim-Action@v1
+ - name: Upload DevSkim scan results to GitHub Security tab
+ uses: github/codeql-action/upload-sarif@v4
+ with:
+ sarif_file: devskim-results.sarif
diff --git b/rust-vendor/iana-time-zone/.github/workflows/zizmor.yaml b/rust-vendor/iana-time-zone/.github/workflows/zizmor.yaml
new file mode 100644
index 0000000..ec783eb
--- /dev/null
+++ b/rust-vendor/iana-time-zone/.github/workflows/zizmor.yaml
@@ -0,0 +1,35 @@
+name: GitHub Actions Security Analysis with zizmor 🌈
+
+on:
+ push:
+ branches: ["main"]
+ pull_request:
+ branches: ["**"]
+
+permissions: {}
+
+jobs:
+ zizmor:
+ name: zizmor latest via PyPI
+ runs-on: ubuntu-latest
+ permissions:
+ security-events: write
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+ with:
+ persist-credentials: false
+
+ - name: Install the latest version of uv
+ uses: astral-sh/setup-uv@v7
+
+ - name: Run zizmor 🌈
+ run: uvx zizmor --format sarif . > results.sarif
+ env:
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Upload SARIF file
+ uses: github/codeql-action/upload-sarif@v4
+ with:
+ sarif_file: results.sarif
+ category: zizmor
diff --git b/rust-vendor/iana-time-zone/Cargo.toml.orig b/rust-vendor/iana-time-zone/Cargo.toml.orig
new file mode 100644
index 0000000..309906c
--- /dev/null
+++ b/rust-vendor/iana-time-zone/Cargo.toml.orig
@@ -0,0 +1,55 @@
+[package]
+name = "iana-time-zone"
+description = "get the IANA time zone for the current system"
+version = "0.1.65"
+authors = [
+ "Andrew Straw <strawman@astraw.com>",
+ "René Kijewski <rene.kijewski@fu-berlin.de>",
+ "Ryan Lopopolo <rjl@hyperbo.la>",
+]
+repository = "https://github.com/strawlab/iana-time-zone"
+license = "MIT OR Apache-2.0"
+keywords = ["IANA", "time"]
+categories = ["date-and-time", "internationalization", "os"]
+readme = "README.md"
+edition = "2021"
+rust-version = "1.62.0"
+
+[features]
+# When enabled, the library will succeed to compile for unknown target platforms, and return an `Err(GetTimezoneError::OsError)` at runtime.
+fallback = []
+
+[target.'cfg(target_os = "android")'.dependencies]
+android_system_properties = "0.1.5"
+
+[target.'cfg(target_vendor = "apple")'.dependencies]
+core-foundation-sys = "0.8.6"
+
+[target.'cfg(target_os = "windows")'.dependencies]
+windows-core = ">=0.56, <=0.62"
+
+[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dependencies]
+js-sys = "0.3.66"
+# Set a minimum, but unused, dependency on `log` to ensure that cfg-if 1.0.0
+# gets pulled in in a minimal versions build for the indirect dependency from
+# `wasm-bindgen`.
+log = "0.4.14"
+wasm-bindgen = "0.2.89"
+
+[target.'cfg(all(target_arch = "wasm32", target_os = "unknown"))'.dev-dependencies]
+wasm-bindgen-test = "0.3.46"
+getrandom = { version = "0.2.1", features = ["js"] }
+
+[target.'cfg(target_os = "haiku")'.dependencies]
+iana-time-zone-haiku = { version = "0.1.1", path = "haiku" }
+
+[dev-dependencies]
+chrono-tz = "0.10.1"
+# Set a minimum, but unused, dependency on `getrandom` to ensure that cfg-if
+# 1.0.0 gets pulled in in a minimal versions build for the indirect dependency
+# from `chrono`.
+getrandom = "0.2.1"
+
+[workspace]
+members = [".", "haiku"]
+default-members = ["."]
diff --git b/rust-vendor/icu_calendar/.cargo_vcs_info.json b/rust-vendor/icu_calendar/.cargo_vcs_info.json
new file mode 100644
index 0000000..d75612e
--- /dev/null
+++ b/rust-vendor/icu_calendar/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "components/calendar"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_calendar/Cargo.toml.orig b/rust-vendor/icu_calendar/Cargo.toml.orig
new file mode 100644
index 0000000..1567ce4
--- /dev/null
+++ b/rust-vendor/icu_calendar/Cargo.toml.orig
@@ -0,0 +1,75 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_calendar"
+description = "Date APIs for Gregorian and non-Gregorian calendars"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+calendrical_calculations = { workspace = true }
+displaydoc = { workspace = true }
+icu_provider = { workspace = true }
+icu_locale_core = { workspace = true }
+ixdtf = { workspace = true, optional = true }
+tinystr = { workspace = true, features = ["zerovec"] }
+zerovec = { workspace = true, features = ["derive"] }
+
+databake = { workspace = true, features = ["derive"], optional = true }
+serde = { workspace = true, features = ["derive"], optional = true }
+
+icu_calendar_data = { workspace = true, optional = true }
+icu_locale = { workspace = true, optional = true }
+
+[dev-dependencies]
+icu_provider = { path = "../../provider/core", features = ["logging"] }
+icu = { path = "../../components/icu", default-features = false }
+itertools = { workspace = true }
+serde = { workspace = true, features = ["derive", "alloc"] }
+serde_json = { workspace = true }
+simple_logger = { workspace = true }
+ureq = { workspace = true }
+
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+
+[features]
+default = ["compiled_data", "ixdtf"]
+ixdtf = ["dep:ixdtf"]
+logging = ["calendrical_calculations/logging"]
+serde = ["dep:serde", "zerovec/serde", "tinystr/serde", "icu_provider/serde"]
+datagen = ["serde", "dep:databake", "zerovec/databake", "tinystr/databake", "alloc", "icu_provider/export"]
+compiled_data = ["dep:icu_calendar_data", "dep:icu_locale", "icu_locale?/compiled_data", "icu_provider/baked"]
+unstable = []
+
+alloc = ["icu_locale_core/alloc", "tinystr/alloc", "serde?/alloc"]
+
+[[bench]]
+name = "date"
+harness = false
+
+[[bench]]
+name = "convert"
+harness = false
+
+[[test]]
+name = "arithmetic"
+required-features = ["ixdtf"]
+
+[package.metadata.cargo-semver-checks.lints]
+workspace = true
diff --git b/rust-vendor/icu_calendar_data/.cargo_vcs_info.json b/rust-vendor/icu_calendar_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..266c749
--- /dev/null
+++ b/rust-vendor/icu_calendar_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "provider/data/calendar"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_calendar_data/Cargo.toml.orig b/rust-vendor/icu_calendar_data/Cargo.toml.orig
new file mode 100644
index 0000000..238a482
--- /dev/null
+++ b/rust-vendor/icu_calendar_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_calendar_data"
+description = "Data for the icu_calendar crate"
+license = "Unicode-3.0"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.0.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_collator/.cargo_vcs_info.json b/rust-vendor/icu_collator/.cargo_vcs_info.json
new file mode 100644
index 0000000..19886dd
--- /dev/null
+++ b/rust-vendor/icu_collator/.cargo_vcs_info.json
@@ -0,0 +1,7 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3",
+ "dirty": true
+ },
+ "path_in_vcs": "components/collator"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_collator/Cargo.toml.orig b/rust-vendor/icu_collator/Cargo.toml.orig
new file mode 100644
index 0000000..3c19b8d
--- /dev/null
+++ b/rust-vendor/icu_collator/Cargo.toml.orig
@@ -0,0 +1,48 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_collator"
+description = "API for comparing strings according to language-dependent conventions"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+icu_collections = { workspace = true }
+icu_normalizer = { workspace = true, features = ["utf8_iter", "utf16_iter"] }
+icu_locale_core = { workspace = true, features = ["alloc"] }
+icu_properties = { workspace = true }
+icu_provider = { workspace = true }
+utf8_iter = { workspace = true }
+utf16_iter = { workspace = true }
+smallvec = { workspace = true, features = ["union", "const_generics", "const_new"] } # alloc
+zerovec = { workspace = true }
+
+databake = { workspace = true, optional = true, features = ["derive"] }
+serde = { workspace = true, features = ["derive", "alloc"], optional = true }
+
+icu_collator_data = { workspace = true, optional = true }
+icu_locale = { workspace = true, optional = true }
+
+[features]
+default = ["compiled_data"]
+serde = ["dep:serde", "zerovec/serde", "icu_properties/serde", "icu_normalizer/serde", "icu_collections/serde", "icu_provider/serde"]
+datagen = ["serde", "dep:databake", "zerovec/databake", "icu_properties/datagen", "icu_normalizer/datagen", "icu_collections/databake", "icu_provider/export"]
+compiled_data = ["dep:icu_collator_data", "icu_normalizer/compiled_data", "dep:icu_locale", "icu_locale?/compiled_data", "icu_provider/baked"]
+latin1 = []
+unstable = []
+
+[[bench]]
+name = "bench"
+harness = false
diff --git b/rust-vendor/icu_collator_data/.cargo_vcs_info.json b/rust-vendor/icu_collator_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..d96267f
--- /dev/null
+++ b/rust-vendor/icu_collator_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "provider/data/collator"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_collator_data/Cargo.toml.orig b/rust-vendor/icu_collator_data/Cargo.toml.orig
new file mode 100644
index 0000000..f10860c
--- /dev/null
+++ b/rust-vendor/icu_collator_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_collator_data"
+description = "Data for the icu_collator crate"
+license = "Unicode-3.0"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.0.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_collections/.cargo_vcs_info.json b/rust-vendor/icu_collections/.cargo_vcs_info.json
new file mode 100644
index 0000000..4364a1d
--- /dev/null
+++ b/rust-vendor/icu_collections/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "components/collections"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_collections/Cargo.toml.orig b/rust-vendor/icu_collections/Cargo.toml.orig
new file mode 100644
index 0000000..5e93a0c
--- /dev/null
+++ b/rust-vendor/icu_collections/Cargo.toml.orig
@@ -0,0 +1,66 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_collections"
+description = "Collection of API for use in ICU libraries."
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+displaydoc = { workspace = true }
+yoke = { workspace = true, features = ["derive"] }
+zerofrom = { workspace = true, features = ["derive"] }
+zerovec = { workspace = true, features = ["derive", "yoke"] }
+potential_utf = { workspace = true, features = ["zerovec"] }
+
+serde = { workspace = true, features = ["derive"], optional = true }
+databake = { workspace = true, features = ["derive"], optional = true }
+
+[dev-dependencies]
+iai = { workspace = true }
+icu = { path = "../../components/icu", default-features = false }
+icu_properties = { path = "../../components/properties" }
+postcard = { workspace = true, features = ["alloc"] }
+serde = { workspace = true, features = ["derive"] }
+serde_json = { workspace = true }
+
+toml = { workspace = true }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[features]
+serde = ["dep:serde", "zerovec/serde", "potential_utf/serde", "alloc"]
+databake = ["dep:databake", "zerovec/databake"]
+alloc = ["serde?/alloc", "zerovec/alloc"]
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[[bench]]
+name = "codepointtrie"
+harness = false
+path = "benches/codepointtrie.rs"
+
+[[bench]]
+name = "iai_cpt"
+harness = false
+path = "benches/iai_cpt.rs"
+
+[[bench]]
+name = "inv_list"
+harness = false
+path = "benches/inv_list.rs"
diff --git b/rust-vendor/icu_datetime/.cargo_vcs_info.json b/rust-vendor/icu_datetime/.cargo_vcs_info.json
new file mode 100644
index 0000000..9de118e
--- /dev/null
+++ b/rust-vendor/icu_datetime/.cargo_vcs_info.json
@@ -0,0 +1,7 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3",
+ "dirty": true
+ },
+ "path_in_vcs": "components/datetime"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_datetime/Cargo.toml.orig b/rust-vendor/icu_datetime/Cargo.toml.orig
new file mode 100644
index 0000000..e2ae96a
--- /dev/null
+++ b/rust-vendor/icu_datetime/Cargo.toml.orig
@@ -0,0 +1,118 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_datetime"
+description = "Human-readable formatting of dates, times, and time zones in hundreds of locales"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+displaydoc = { workspace = true }
+fixed_decimal = { workspace = true }
+icu_calendar = { workspace = true }
+icu_decimal = { workspace = true }
+icu_locale_core = { workspace = true }
+icu_pattern = { workspace = true, features = ["zerovec", "alloc"] }
+icu_plurals = { workspace = true }
+icu_provider = { workspace = true }
+icu_time = { workspace = true, features = ["alloc"] }
+tinystr = { workspace = true, features = ["alloc", "zerovec"] }
+potential_utf = { workspace = true, features = ["alloc", "zerovec"] }
+writeable = { workspace = true }
+zerovec = { workspace = true, features = ["alloc", "yoke"] }
+
+serde = { workspace = true, features = ["derive", "alloc"], optional = true }
+zerotrie = { workspace = true, features = ["alloc"], optional = true }
+databake = { workspace = true, features = ["derive"], optional = true}
+either = { workspace = true, optional = true }
+smallvec = { workspace = true, optional = true }
+litemap = { workspace = true, optional = true }
+
+icu_datetime_data = { workspace = true, optional = true }
+icu_locale = { workspace = true, optional = true }
+
+[features]
+default = ["compiled_data", "ixdtf"]
+serde = [
+ "dep:serde",
+ "icu_calendar/serde",
+ "icu_decimal/serde",
+ "icu_pattern/serde",
+ "icu_plurals/serde",
+ "icu_provider/alloc",
+ "icu_provider/serde",
+ "icu_time/serde",
+ "litemap?/serde",
+ "smallvec?/serde",
+ "tinystr/serde",
+ "potential_utf/serde",
+ "zerovec/serde",
+ "dep:zerotrie",
+]
+datagen = [
+ "dep:databake",
+ "dep:either",
+ "dep:litemap",
+ "dep:smallvec",
+ "icu_calendar/datagen",
+ "icu_pattern/databake",
+ "icu_plurals/datagen",
+ "icu_time/datagen",
+ "icu_provider/export",
+ "serde",
+]
+logging = ["icu_calendar/logging"]
+experimental = []
+compiled_data = ["dep:icu_datetime_data", "icu_calendar/compiled_data", "icu_decimal/compiled_data", "icu_plurals/compiled_data", "icu_time/compiled_data", "dep:icu_locale", "icu_locale?/compiled_data", "icu_provider/baked"]
+ixdtf = ["icu_time/ixdtf", "icu_calendar/ixdtf"]
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[package.metadata.cargo-all-features]
+skip_optional_dependencies = true
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_run_size_tests)'] }
+
+[[bench]]
+name = "datetime"
+harness = false
+required-features = ["compiled_data", "serde", "experimental"]
+
+[[bench]]
+name = "pattern"
+harness = false
+required-features = ["serde", "experimental"]
+
+[[test]]
+name = "datetime"
+required-features = ["experimental", "compiled_data", "serde"]
+
+[[test]]
+name = "resolved_components"
+required-features = ["experimental", "compiled_data"]
+
+[[test]]
+name = "simple_test"
+required-features = ["compiled_data"]
+
+[[test]]
+name = "skeleton_serialization"
+required-features = ["experimental"]
+
+[package.metadata.cargo-semver-checks.lints]
+workspace = true
diff --git b/rust-vendor/icu_datetime_data/.cargo_vcs_info.json b/rust-vendor/icu_datetime_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..27bdc92
--- /dev/null
+++ b/rust-vendor/icu_datetime_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "1a5df5fb8ef81876970fbbd3d720140ae7237007"
+ },
+ "path_in_vcs": "provider/data/datetime"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_datetime_data/Cargo.toml.orig b/rust-vendor/icu_datetime_data/Cargo.toml.orig
new file mode 100644
index 0000000..0961cf8
--- /dev/null
+++ b/rust-vendor/icu_datetime_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_datetime_data"
+description = "Data for the icu_datetime crate"
+license = "Unicode-3.0"
+version = "2.1.2"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.1.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_decimal/.cargo_vcs_info.json b/rust-vendor/icu_decimal/.cargo_vcs_info.json
new file mode 100644
index 0000000..94691eb
--- /dev/null
+++ b/rust-vendor/icu_decimal/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "components/decimal"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_decimal/Cargo.toml.orig b/rust-vendor/icu_decimal/Cargo.toml.orig
new file mode 100644
index 0000000..fe3ec6a
--- /dev/null
+++ b/rust-vendor/icu_decimal/Cargo.toml.orig
@@ -0,0 +1,58 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_decimal"
+description = "API for formatting basic decimal numbers in a locale-sensitive way"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+fixed_decimal = { workspace = true }
+icu_provider = { workspace = true }
+icu_locale_core = { workspace = true }
+writeable = { workspace = true }
+zerovec = { workspace = true, features = ["alloc"] }
+databake = { workspace = true, features = ["derive"], optional = true}
+serde = { workspace = true, features = ["derive"], optional = true }
+
+icu_decimal_data = { workspace = true, optional = true }
+icu_locale = { workspace = true, optional = true }
+
+[dev-dependencies]
+icu = { path = "../../components/icu", default-features = false }
+icu_provider_adapters = { path = "../../provider/adapters" }
+rand = { workspace = true }
+rand_pcg = { workspace = true }
+rand_distr = { workspace = true }
+getrandom = { workspace = true, features = ["wasm_js"] }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[features]
+default = ["compiled_data"]
+serde = ["dep:serde", "icu_provider/serde", "zerovec/serde"]
+datagen = ["serde", "dep:databake", "zerovec/databake", "icu_provider/export", "alloc"]
+compiled_data = ["dep:icu_decimal_data", "dep:icu_locale", "icu_locale?/compiled_data", "icu_provider/baked"]
+ryu = ["fixed_decimal/ryu"]
+alloc = ["serde?/alloc", "zerovec/alloc"]
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_run_size_tests)'] }
+
+[[bench]]
+name = "fixed_decimal_format"
+harness = false
diff --git b/rust-vendor/icu_decimal_data/.cargo_vcs_info.json b/rust-vendor/icu_decimal_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..33aaf53
--- /dev/null
+++ b/rust-vendor/icu_decimal_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "provider/data/decimal"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_decimal_data/Cargo.toml.orig b/rust-vendor/icu_decimal_data/Cargo.toml.orig
new file mode 100644
index 0000000..b826ed6
--- /dev/null
+++ b/rust-vendor/icu_decimal_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_decimal_data"
+description = "Data for the icu_decimal crate"
+license = "Unicode-3.0"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.0.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_locale/.cargo_vcs_info.json b/rust-vendor/icu_locale/.cargo_vcs_info.json
new file mode 100644
index 0000000..82f90aa
--- /dev/null
+++ b/rust-vendor/icu_locale/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "components/locale"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_locale/Cargo.toml.orig b/rust-vendor/icu_locale/Cargo.toml.orig
new file mode 100644
index 0000000..1d96b01
--- /dev/null
+++ b/rust-vendor/icu_locale/Cargo.toml.orig
@@ -0,0 +1,62 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_locale"
+description = "API for Unicode Language and Locale Identifiers canonicalization"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.cargo-all-features]
+skip_optional_dependencies = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+databake = { workspace = true, optional = true, features = ["derive"] }
+icu_locale_core = { workspace = true, features = ["alloc", "zerovec"] }
+icu_provider = { workspace = true, features = ["alloc"] }
+serde = { workspace = true, features = ["derive", "alloc"], optional = true }
+tinystr = { workspace = true, features = ["alloc", "zerovec"] }
+potential_utf = { workspace = true, features = ["alloc", "zerovec"] }
+zerovec = { workspace = true, features = ["alloc", "yoke"] }
+
+icu_collections = { workspace = true }
+
+icu_locale_data = { workspace = true, optional = true }
+
+[dev-dependencies]
+serde = { workspace = true, features = ["derive"] }
+serde_json = { workspace = true }
+icu = { path = "../../components/icu", default-features = false }
+writeable = { path = "../../utils/writeable" }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[features]
+default = ["compiled_data"]
+serde = ["dep:serde", "icu_locale_core/serde", "tinystr/serde", "zerovec/serde", "icu_provider/serde", "potential_utf/serde", "icu_collections/serde"]
+datagen = ["serde", "dep:databake", "zerovec/databake", "icu_locale_core/databake", "tinystr/databake", "icu_collections/databake", "icu_provider/export"]
+compiled_data = ["dep:icu_locale_data", "icu_provider/baked"]
+
+[[bench]]
+name = "locale_canonicalizer"
+harness = false
+
+[[test]]
+name = "locale_canonicalizer"
+required-features = ["serde"]
diff --git b/rust-vendor/icu_locale_core/.cargo_vcs_info.json b/rust-vendor/icu_locale_core/.cargo_vcs_info.json
new file mode 100644
index 0000000..c1582af
--- /dev/null
+++ b/rust-vendor/icu_locale_core/.cargo_vcs_info.json
@@ -0,0 +1,7 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3",
+ "dirty": true
+ },
+ "path_in_vcs": "components/locale_core"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_locale_core/Cargo.toml.orig b/rust-vendor/icu_locale_core/Cargo.toml.orig
new file mode 100644
index 0000000..94d03fa
--- /dev/null
+++ b/rust-vendor/icu_locale_core/Cargo.toml.orig
@@ -0,0 +1,55 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_locale_core"
+description = "API for managing Unicode Language and Locale Identifiers"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+displaydoc = { workspace = true }
+litemap = { workspace = true }
+tinystr = { workspace = true }
+writeable = { workspace = true }
+
+databake = { workspace = true, features = ["derive"], optional = true }
+serde = { workspace = true, optional = true }
+zerovec = { workspace = true, optional = true }
+
+[features]
+databake = ["dep:databake", "alloc"]
+serde = ["dep:serde", "tinystr/serde"]
+zerovec = ["dep:zerovec", "tinystr/zerovec"]
+alloc = ["litemap/alloc", "tinystr/alloc", "writeable/alloc", "serde?/alloc"]
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[[bench]]
+name = "subtags"
+harness = false
+
+[[bench]]
+name = "langid"
+harness = false
+
+[[bench]]
+name = "locale"
+harness = false
+
+[[bench]]
+name = "iai_langid"
+harness = false
diff --git b/rust-vendor/icu_locale_data/.cargo_vcs_info.json b/rust-vendor/icu_locale_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..a29a817
--- /dev/null
+++ b/rust-vendor/icu_locale_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "1a5df5fb8ef81876970fbbd3d720140ae7237007"
+ },
+ "path_in_vcs": "provider/data/locale"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_locale_data/Cargo.toml.orig b/rust-vendor/icu_locale_data/Cargo.toml.orig
new file mode 100644
index 0000000..f30953e
--- /dev/null
+++ b/rust-vendor/icu_locale_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_locale_data"
+description = "Data for the icu_locale crate"
+license = "Unicode-3.0"
+version = "2.1.2"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.1.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_normalizer/.cargo_vcs_info.json b/rust-vendor/icu_normalizer/.cargo_vcs_info.json
new file mode 100644
index 0000000..03ed94b
--- /dev/null
+++ b/rust-vendor/icu_normalizer/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "components/normalizer"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_normalizer/Cargo.toml.orig b/rust-vendor/icu_normalizer/Cargo.toml.orig
new file mode 100644
index 0000000..e41f566
--- /dev/null
+++ b/rust-vendor/icu_normalizer/Cargo.toml.orig
@@ -0,0 +1,72 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_normalizer"
+description = "API for normalizing text into Unicode Normalization Forms"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+license.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+icu_collections = { workspace = true }
+icu_properties = { workspace = true, optional = true }
+icu_provider = { workspace = true }
+smallvec = { workspace = true } # alloc
+utf16_iter = { workspace = true, optional = true }
+utf8_iter = { workspace = true, optional = true }
+write16 = { workspace = true, features = ["alloc"], optional = true }
+zerovec = { workspace = true }
+
+databake = { workspace = true, features = ["derive"], optional = true }
+serde = { workspace = true, features = ["derive", "alloc"], optional = true }
+
+icu_normalizer_data = { workspace = true, optional = true }
+
+[dev-dependencies]
+arraystring = { workspace = true }
+arrayvec = { workspace = true }
+atoi = { workspace = true }
+detone = { workspace = true }
+icu = { path = "../../components/icu", default-features = false }
+write16 = { workspace = true, features = ["arrayvec", "smallvec"] }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[features]
+default = ["compiled_data", "utf8_iter", "utf16_iter"]
+serde = ["dep:serde", "icu_collections/serde", "zerovec/serde", "icu_properties?/serde", "icu_provider/serde"]
+# n.b. "icu_properties" + "icu_properties?/datagen" is equivalent to "icu_properties/datagen", however
+# we specify this explicitly since "optional_dep/feature" is a footgun that leads to us often accidentally enabling features
+datagen = ["serde", "dep:databake", "icu_properties", "icu_collections/databake", "zerovec/databake", "icu_properties?/datagen", "icu_provider/export"]
+experimental = []
+compiled_data = ["dep:icu_normalizer_data", "icu_properties?/compiled_data", "icu_provider/baked"]
+icu_properties = ["dep:icu_properties"]
+# For dealing with UTF16 strings
+utf16_iter = ["dep:utf16_iter", "dep:write16"]
+# For dealing with potentially ill-formed UTF8 strings
+utf8_iter = ["dep:utf8_iter"]
+
+# added by accident
+write16 = []
+
+[[bench]]
+name = "bench"
+harness = false
+required-features = ["utf16_iter", "utf8_iter"]
+
+# Lint to avoid complaining about icu4x_unstable_fast_trie_only for now
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_unstable_fast_trie_only)'] }
diff --git b/rust-vendor/icu_normalizer_data/.cargo_vcs_info.json b/rust-vendor/icu_normalizer_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..a5bf926
--- /dev/null
+++ b/rust-vendor/icu_normalizer_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "provider/data/normalizer"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_normalizer_data/Cargo.toml.orig b/rust-vendor/icu_normalizer_data/Cargo.toml.orig
new file mode 100644
index 0000000..5bbeb40
--- /dev/null
+++ b/rust-vendor/icu_normalizer_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_normalizer_data"
+description = "Data for the icu_normalizer crate"
+license = "Unicode-3.0"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.0.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_pattern/.cargo_vcs_info.json b/rust-vendor/icu_pattern/.cargo_vcs_info.json
new file mode 100644
index 0000000..509002e
--- /dev/null
+++ b/rust-vendor/icu_pattern/.cargo_vcs_info.json
@@ -0,0 +1,7 @@
+{
+ "git": {
+ "sha1": "29dfe2790b6cfdab94ca6a6b69f58ce54802dbf7",
+ "dirty": true
+ },
+ "path_in_vcs": "components/pattern"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_pattern/Cargo.toml.orig b/rust-vendor/icu_pattern/Cargo.toml.orig
new file mode 100644
index 0000000..e818f56
--- /dev/null
+++ b/rust-vendor/icu_pattern/Cargo.toml.orig
@@ -0,0 +1,41 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_pattern"
+description = "ICU pattern utilities"
+version = "0.4.1"
+
+authors.workspace = true
+edition.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.workspaces]
+independent = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+either = { workspace = true }
+displaydoc = { workspace = true }
+writeable = { workspace = true, features = ["either"] }
+
+databake = { workspace = true, features = ["derive"], optional = true }
+litemap = { workspace = true, optional = true }
+serde = { workspace = true, features = ["derive"], optional = true }
+yoke = { workspace = true, features = ["derive"], optional = true }
+zerovec = { workspace = true, optional = true }
+
+[features]
+default = []
+alloc = ["serde?/alloc", "writeable/alloc", "zerovec?/alloc"]
+databake = ["dep:databake"]
+litemap = ["dep:litemap"]
+serde = ["alloc", "dep:serde"]
+yoke = ["dep:yoke"]
+zerovec = ["dep:zerovec", "alloc"]
diff --git b/rust-vendor/icu_plurals/.cargo_vcs_info.json b/rust-vendor/icu_plurals/.cargo_vcs_info.json
new file mode 100644
index 0000000..b0150e9
--- /dev/null
+++ b/rust-vendor/icu_plurals/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "components/plurals"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_plurals/Cargo.toml.orig b/rust-vendor/icu_plurals/Cargo.toml.orig
new file mode 100644
index 0000000..245233e
--- /dev/null
+++ b/rust-vendor/icu_plurals/Cargo.toml.orig
@@ -0,0 +1,81 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_plurals"
+description = "Unicode Plural Rules categorizer for numeric input"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+fixed_decimal = { workspace = true }
+icu_provider = { workspace = true, features = ["alloc"] }
+zerovec = { workspace = true, features = ["alloc", "yoke"] }
+
+databake = { workspace = true, features = ["derive"], optional = true}
+serde = { workspace = true, features = ["derive", "alloc"], optional = true }
+displaydoc = { workspace = true, optional = true }
+
+icu_plurals_data = { workspace = true, optional = true }
+icu_locale = { workspace = true, optional = true }
+
+[dev-dependencies]
+icu = { path = "../../components/icu", default-features = false }
+icu_locale_core = { path = "../../components/locale_core" }
+serde = { workspace = true, features = ["derive"] }
+serde_json = { workspace = true }
+postcard = { workspace = true, features = ["alloc"] }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[features]
+default = ["compiled_data"]
+serde = ["dep:serde", "zerovec/serde", "icu_locale_core/serde", "icu_provider/serde", "dep:displaydoc"]
+datagen = ["serde", "zerovec/databake", "dep:databake", "icu_provider/export"]
+experimental = []
+compiled_data = ["dep:icu_plurals_data", "dep:icu_locale", "icu_locale?/compiled_data", "icu_provider/baked"]
+
+# added by accident
+icu_normalizer_data = []
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[[bench]]
+name = "operands"
+harness = false
+
+[[bench]]
+name = "parser"
+harness = false
+required-features = ["serde"]
+
+[[bench]]
+name = "pluralrules"
+harness = false
+required-features = ["serde"]
+
+[[test]]
+name = "plurals"
+required-features = ["serde"]
+
+[[test]]
+name = "operands"
+required-features = ["serde", "experimental"]
+
+[[test]]
+name = "rules"
+required-features = ["experimental"]
\ No newline at end of file
diff --git b/rust-vendor/icu_plurals_data/.cargo_vcs_info.json b/rust-vendor/icu_plurals_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..6d03b63
--- /dev/null
+++ b/rust-vendor/icu_plurals_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "provider/data/plurals"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_plurals_data/Cargo.toml.orig b/rust-vendor/icu_plurals_data/Cargo.toml.orig
new file mode 100644
index 0000000..d1e41e7
--- /dev/null
+++ b/rust-vendor/icu_plurals_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_plurals_data"
+description = "Data for the icu_plurals crate"
+license = "Unicode-3.0"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.0.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_properties/.cargo_vcs_info.json b/rust-vendor/icu_properties/.cargo_vcs_info.json
new file mode 100644
index 0000000..b176601
--- /dev/null
+++ b/rust-vendor/icu_properties/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "323738440f7ff810b8130b7881322466015f7fec"
+ },
+ "path_in_vcs": "components/properties"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_properties/Cargo.toml.orig b/rust-vendor/icu_properties/Cargo.toml.orig
new file mode 100644
index 0000000..c8c2b92
--- /dev/null
+++ b/rust-vendor/icu_properties/Cargo.toml.orig
@@ -0,0 +1,47 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_properties"
+description = "Definitions for Unicode properties"
+version = "2.1.2"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+icu_collections = { workspace = true }
+icu_provider = { workspace = true }
+zerovec = { workspace = true, features = ["derive", "yoke"] }
+zerotrie = { workspace = true, features = ["yoke", "zerofrom"] }
+databake = { workspace = true, features = ["derive"], optional = true}
+serde = { workspace = true, features = ["derive"], optional = true }
+icu_locale_core = { workspace = true, features = ["zerovec"] }
+
+unicode-bidi = { workspace = true, optional = true }
+
+icu_properties_data = { workspace = true, optional = true }
+
+[dev-dependencies]
+icu = { path = "../../components/icu", default-features = false }
+
+[features]
+default = ["compiled_data"]
+serde = ["dep:serde", "icu_locale_core/serde", "zerovec/serde", "icu_collections/serde", "icu_provider/serde", "zerotrie/serde"]
+datagen = ["serde", "dep:databake", "zerovec/databake", "icu_collections/databake", "icu_locale_core/databake", "zerotrie/databake", "icu_provider/export"]
+unicode_bidi = [ "dep:unicode-bidi" ]
+compiled_data = ["dep:icu_properties_data", "icu_provider/baked"]
+alloc = ["zerovec/alloc", "icu_collections/alloc", "serde?/alloc"]
+
+[package.metadata.cargo-semver-checks.lints]
+workspace = true
diff --git b/rust-vendor/icu_properties_data/.cargo_vcs_info.json b/rust-vendor/icu_properties_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..0d0ace6
--- /dev/null
+++ b/rust-vendor/icu_properties_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "323738440f7ff810b8130b7881322466015f7fec"
+ },
+ "path_in_vcs": "provider/data/properties"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_properties_data/Cargo.toml.orig b/rust-vendor/icu_properties_data/Cargo.toml.orig
new file mode 100644
index 0000000..2ff88e4
--- /dev/null
+++ b/rust-vendor/icu_properties_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_properties_data"
+description = "Data for the icu_properties crate"
+license = "Unicode-3.0"
+version = "2.1.2"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.0.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/icu_provider/.cargo_vcs_info.json b/rust-vendor/icu_provider/.cargo_vcs_info.json
new file mode 100644
index 0000000..1b3d4a7
--- /dev/null
+++ b/rust-vendor/icu_provider/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "provider/core"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_provider/Cargo.toml.orig b/rust-vendor/icu_provider/Cargo.toml.orig
new file mode 100644
index 0000000..73c8043
--- /dev/null
+++ b/rust-vendor/icu_provider/Cargo.toml.orig
@@ -0,0 +1,90 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_provider"
+description = "Trait and struct definitions for the ICU data provider"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+displaydoc = { workspace = true }
+icu_locale_core = { workspace = true }
+stable_deref_trait = { workspace = true, optional = true }
+writeable = { workspace = true, optional = true }
+yoke = { workspace = true, features = ["derive"] }
+zerofrom = { workspace = true, features = ["derive"] }
+zerovec = { workspace = true, features = ["derive"]}
+
+# baked
+zerotrie = { workspace = true, optional = true }
+
+# log
+log = { workspace = true, optional = true }
+
+# serde
+bincode = { workspace = true, optional = true }
+postcard = { workspace = true, optional = true }
+serde = { workspace = true, features = ["derive"], optional = true }
+serde_json = { workspace = true, optional = true }
+
+# export
+erased-serde = { workspace = true, optional = true }
+databake = { workspace = true, optional = true, features = ["derive"] }
+
+[dev-dependencies]
+serde_json = { workspace = true }
+icu = { path = "../../components/icu", default-features = false }
+icu_locale = { path = "../../components/locale" }
+icu_provider_adapters = { path = "../adapters", default-features = false }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[features]
+std = ["alloc"]
+alloc = ["icu_locale_core/alloc", "serde?/alloc", "yoke/alloc", "zerofrom/alloc", "zerovec/alloc", "zerotrie?/alloc", "dep:stable_deref_trait", "dep:writeable"]
+sync = []
+# Enable logging of additional context of data errors
+logging = ["dep:log"]
+
+# Enable BufferProvider and other deserialization infrastructure
+serde = ["dep:serde", "yoke/serde"]
+
+# Features for specific serde formats
+deserialize_json = ["serde", "dep:serde_json"]
+deserialize_bincode_1 = ["serde", "dep:bincode", "std"]
+deserialize_postcard_1 = ["serde", "dep:postcard"]
+
+# Dependencies for baked provider scaffolding
+baked = ["dep:zerotrie", "dep:writeable"]
+
+# Dependencies for running data generation
+export = ["serde", "dep:erased-serde", "dep:databake", "std", "sync", "dep:postcard", "zerovec/databake"]
+
+# added by accident
+zerotrie = []
+
+[package.metadata.cargo-all-features]
+denylist = ["macros"]
+# We have tons of features here, limit the amount of tests we run
+max_combination_size = 3
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[[bench]]
+name = "data_locale_bench"
+harness = false
diff --git b/rust-vendor/icu_time/.cargo_vcs_info.json b/rust-vendor/icu_time/.cargo_vcs_info.json
new file mode 100644
index 0000000..9bd8569
--- /dev/null
+++ b/rust-vendor/icu_time/.cargo_vcs_info.json
@@ -0,0 +1,7 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3",
+ "dirty": true
+ },
+ "path_in_vcs": "components/time"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_time/Cargo.toml.orig b/rust-vendor/icu_time/Cargo.toml.orig
new file mode 100644
index 0000000..46dfe4d
--- /dev/null
+++ b/rust-vendor/icu_time/Cargo.toml.orig
@@ -0,0 +1,46 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_time"
+description = "Processing of dates, times, and time zones with a focus on i18n and interop"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+version.workspace = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+calendrical_calculations = { workspace = true }
+displaydoc = { workspace = true }
+icu_calendar = { workspace = true }
+icu_provider = { workspace = true }
+icu_locale_core = { workspace = true, features = ["zerovec"] }
+ixdtf = { workspace = true, optional = true }
+zerotrie = { workspace = true, features = ["yoke", "zerofrom"] }
+zerovec = { workspace = true, features = ["derive", "yoke"] }
+
+databake = { workspace = true, optional = true, features = ["derive"] }
+serde = { workspace = true, features = ["derive"], optional = true }
+
+icu_time_data = { workspace = true, optional = true }
+
+[features]
+default = ["compiled_data", "ixdtf"]
+ixdtf = ["dep:ixdtf", "icu_calendar/ixdtf"]
+serde = ["dep:serde", "zerovec/serde", "zerotrie/serde", "icu_provider/serde", "icu_locale_core/serde", "alloc"]
+datagen = ["serde", "dep:databake", "zerovec/databake", "zerotrie/databake", "icu_provider/export", "icu_locale_core/databake", "alloc"]
+compiled_data = ["dep:icu_time_data", "icu_calendar/compiled_data", "icu_provider/baked"]
+alloc = ["zerotrie/alloc", "serde?/alloc", "zerovec/alloc"]
+
+[package.metadata.cargo-semver-checks.lints]
+workspace = true
diff --git b/rust-vendor/icu_time_data/.cargo_vcs_info.json b/rust-vendor/icu_time_data/.cargo_vcs_info.json
new file mode 100644
index 0000000..fd92a6b
--- /dev/null
+++ b/rust-vendor/icu_time_data/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "38a49da495248dd1ded84cf306e4ca42e64d5bb3"
+ },
+ "path_in_vcs": "provider/data/time"
+}
\ No newline at end of file
diff --git b/rust-vendor/icu_time_data/Cargo.toml.orig b/rust-vendor/icu_time_data/Cargo.toml.orig
new file mode 100644
index 0000000..c610cba
--- /dev/null
+++ b/rust-vendor/icu_time_data/Cargo.toml.orig
@@ -0,0 +1,27 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "icu_time_data"
+description = "Data for the icu_time crate"
+license = "Unicode-3.0"
+version.workspace = true
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+repository.workspace = true
+rust-version.workspace = true
+
+[package.metadata.sources]
+cldr = { tagged = "48.0.0" }
+icuexport = { tagged = "release-78.1rc" }
+segmenter_lstm = { tagged = "v0.1.0" }
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(icu4x_custom_data)'] }
+
+[dependencies]
diff --git b/rust-vendor/indexmap/.cargo_vcs_info.json b/rust-vendor/indexmap/.cargo_vcs_info.json
new file mode 100644
index 0000000..eb2d019
--- /dev/null
+++ b/rust-vendor/indexmap/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a4aba99f09636ad727d934d367f701c965367cc3"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/indexmap/.github/workflows/ci.yml b/rust-vendor/indexmap/.github/workflows/ci.yml
new file mode 100644
index 0000000..81290b3
--- /dev/null
+++ b/rust-vendor/indexmap/.github/workflows/ci.yml
@@ -0,0 +1,153 @@
+on:
+ push:
+ branches: [ main ]
+ pull_request:
+ branches: [ main ]
+ merge_group:
+
+name: CI
+
+env:
+ CARGO_TERM_COLOR: always
+ CARGO_INCREMENTAL: 0
+
+jobs:
+ tests:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ include:
+ - rust: 1.82.0 # MSRV
+ features:
+ - rust: stable
+ features: arbitrary
+ - rust: stable
+ features: quickcheck
+ - rust: stable
+ features: rayon
+ - rust: stable
+ features: serde
+ - rust: stable
+ features: sval
+ - rust: stable
+ features: borsh
+ - rust: stable
+ features: std
+ - rust: beta
+ features:
+ - rust: nightly
+ bench: test build benchmarks
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Lock MSRV-compatible dependencies
+ if: matrix.rust == '1.82.0'
+ env:
+ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
+ # Note that this uses the runner's pre-installed stable cargo
+ run: cargo generate-lockfile
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Tests
+ run: |
+ cargo build --verbose --features "${{ matrix.features }}"
+ cargo doc --verbose --features "${{ matrix.features }}"
+ cargo test --verbose --features "${{ matrix.features }}"
+ cargo test --release --verbose --features "${{ matrix.features }}"
+ - name: Tests (serde)
+ if: matrix.features == 'serde'
+ run: |
+ cargo test --verbose -p test-serde
+ - name: Tests (sval)
+ if: matrix.features == 'sval'
+ run: |
+ cargo test --verbose -p test-sval
+ - name: Test run benchmarks
+ if: matrix.bench != ''
+ run: cargo test -v --benches
+
+ nostd_build:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ include:
+ - rust: 1.82.0
+ target: thumbv6m-none-eabi
+ - rust: stable
+ target: thumbv6m-none-eabi
+
+ steps:
+ - uses: actions/checkout@v4
+ - name: Lock MSRV-compatible dependencies
+ if: matrix.rust == '1.82.0'
+ env:
+ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
+ # Note that this uses the runner's pre-installed stable cargo
+ run: cargo generate-lockfile
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ target: ${{ matrix.target }}
+ - name: Tests
+ run: |
+ cargo build -vv --target=${{ matrix.target }} --no-default-features
+ cargo build -v -p test-nostd --target=${{ matrix.target }}
+
+ clippy:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@beta
+ with:
+ components: clippy
+ - run: cargo clippy --all-features
+
+ miri:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: miri, rust-src
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: cargo-nextest
+ if: github.event_name == 'merge_group'
+ - run: cargo miri nextest run
+ if: github.event_name == 'merge_group'
+ - run: cargo miri test --doc
+
+ minimal-versions:
+ name: Check MSRV and minimal-versions
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@nightly
+ - uses: dtolnay/rust-toolchain@1.82.0 # MSRV
+ - uses: taiki-e/install-action@v2
+ with:
+ tool: cargo-hack
+ - name: Lock minimal direct dependencies
+ run: cargo +nightly hack generate-lockfile --remove-dev-deps -Z direct-minimal-versions
+ env:
+ CARGO_RESOLVER_INCOMPATIBLE_RUST_VERSIONS: fallback
+ - name: Build (nightly)
+ run: cargo +nightly build --verbose --all-features
+ - name: Build (MSRV)
+ run: cargo build --verbose --features arbitrary,quickcheck,serde,sval,rayon
+
+ # One job that "summarizes" the success state of this pipeline. This can then be added to branch
+ # protection, rather than having to add each job separately.
+ success:
+ name: Success
+ runs-on: ubuntu-latest
+ needs: [tests, nostd_build, clippy, miri, minimal-versions]
+ # Github branch protection is exceedingly silly and treats "jobs skipped because a dependency
+ # failed" as success. So we have to do some contortions to ensure the job fails if any of its
+ # dependencies fails.
+ if: always() # make sure this is never "skipped"
+ steps:
+ # Manually check the status of all dependencies. `if: failure()` does not work.
+ - name: check if any dependency failed
+ run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
diff --git b/rust-vendor/indexmap/.rustfmt.toml b/rust-vendor/indexmap/.rustfmt.toml
new file mode 100644
index 0000000..3a26366
--- /dev/null
+++ b/rust-vendor/indexmap/.rustfmt.toml
@@ -0,0 +1 @@
+edition = "2021"
diff --git b/rust-vendor/indexmap/Cargo.toml.orig b/rust-vendor/indexmap/Cargo.toml.orig
new file mode 100644
index 0000000..2979f04
--- /dev/null
+++ b/rust-vendor/indexmap/Cargo.toml.orig
@@ -0,0 +1,76 @@
+[package]
+name = "indexmap"
+edition = "2021"
+version = "2.13.0"
+documentation = "https://docs.rs/indexmap/"
+repository = "https://github.com/indexmap-rs/indexmap"
+license = "Apache-2.0 OR MIT"
+description = "A hash table with consistent order and fast iteration."
+keywords = ["hashmap", "no_std"]
+categories = ["data-structures", "no-std"]
+rust-version = "1.82"
+
+[lib]
+bench = false
+
+[dependencies]
+equivalent = { version = "1.0", default-features = false }
+hashbrown = { version = "0.16.1", default-features = false }
+
+arbitrary = { version = "1.0", optional = true, default-features = false }
+quickcheck = { version = "1.0", optional = true, default-features = false }
+serde_core = { version = "1.0.220", optional = true, default-features = false }
+rayon = { version = "1.9", optional = true }
+sval = { version = "2", optional = true, default-features = false }
+
+# deprecated: use borsh's "indexmap" feature instead.
+borsh = { version = "1.2", optional = true, default-features = false }
+
+# serde v1.0.220 is the first version that released with `serde_core`.
+# This is required to avoid conflict with other `serde` users which may require an older version.
+[target.'cfg(any())'.dependencies]
+serde = { version = "1.0.220", default-features = false, optional = true }
+
+[dev-dependencies]
+itertools = "0.14"
+fastrand = { version = "2", default-features = false }
+quickcheck = { version = "1.0", default-features = false }
+fnv = "1.0"
+serde = { version = "1.0", default-features = false, features = ["derive"] }
+
+[features]
+default = ["std"]
+std = []
+serde = ["dep:serde_core", "dep:serde"]
+
+# for testing only, of course
+test_debug = []
+
+[profile.bench]
+debug = true
+
+[package.metadata.release]
+allow-branch = ["main"]
+sign-tag = true
+tag-name = "{{version}}"
+
+[package.metadata.docs.rs]
+features = ["arbitrary", "quickcheck", "serde", "borsh", "rayon", "sval"]
+rustdoc-args = ["--cfg", "docsrs"]
+
+[workspace]
+members = ["test-nostd", "test-serde", "test-sval"]
+
+[lints.rust]
+private-bounds = "deny"
+private-interfaces = "deny"
+unnameable-types = "deny"
+unreachable-pub = "deny"
+
+# We *mostly* avoid unsafe code, but there are a few fine-grained cases allowed
+unsafe-code = "deny"
+
+rust-2018-idioms = "warn"
+
+[lints.clippy]
+style = "allow"
diff --git b/rust-vendor/indicatif/.cargo_vcs_info.json b/rust-vendor/indicatif/.cargo_vcs_info.json
new file mode 100644
index 0000000..032b451
--- /dev/null
+++ b/rust-vendor/indicatif/.cargo_vcs_info.json
@@ -0,0 +1,7 @@
+{
+ "git": {
+ "sha1": "4de2f604c3f5af5556db0a1d15e296102879c8d9",
+ "dirty": true
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/indicatif/.github/dependabot.yml b/rust-vendor/indicatif/.github/dependabot.yml
new file mode 100644
index 0000000..8ef5278
--- /dev/null
+++ b/rust-vendor/indicatif/.github/dependabot.yml
@@ -0,0 +1,10 @@
+version: 2
+updates:
+- package-ecosystem: cargo
+ directory: "/"
+ schedule:
+ interval: daily
+- package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: daily
diff --git b/rust-vendor/indicatif/.github/workflows/rust.yml b/rust-vendor/indicatif/.github/workflows/rust.yml
new file mode 100644
index 0000000..1e1e17c
--- /dev/null
+++ b/rust-vendor/indicatif/.github/workflows/rust.yml
@@ -0,0 +1,89 @@
+name: CI
+
+on:
+ push:
+ branches: ['main']
+ pull_request:
+ schedule:
+ - cron: "43 6 * * 5"
+
+env:
+ CLICOLOR_FORCE: 1
+
+jobs:
+ test:
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macos-latest, windows-latest]
+ rust: [stable]
+ features: [--all-features]
+ target: [""]
+ include:
+ - os: ubuntu-latest
+ rust: stable
+ features: ""
+ - os: ubuntu-latest
+ rust: stable
+ features: --no-default-features
+ - os: ubuntu-latest
+ rust: beta
+ features: --all-features
+ - os: ubuntu-latest
+ rust: stable
+ features: --all-features
+ target: --target armv5te-unknown-linux-gnueabi
+ use-cross: true
+
+ runs-on: ${{ matrix.os }}
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - run: cargo test ${{ matrix.features }}
+
+ cross:
+ runs-on: ubuntu-latest
+
+ strategy:
+ matrix:
+ target: [armv5te-unknown-linux-gnueabi]
+
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ target: ${{ matrix.target }}
+ - uses: taiki-e/install-action@cross
+ - run: cross build --target ${{ matrix.target }} --all-features
+
+ msrv:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: "1.71"
+ - run: cargo check --lib --all-features
+
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: rustfmt, clippy
+ - run: cargo fmt --all -- --check
+ - run: cargo clippy --all-targets --all-features -- -D warnings
+ - name: doc
+ run: cargo doc --no-deps --document-private-items
+ env:
+ RUSTDOCFLAGS: -Dwarnings
+
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: EmbarkStudios/cargo-deny-action@v2
diff --git b/rust-vendor/indicatif/Cargo.toml.orig b/rust-vendor/indicatif/Cargo.toml.orig
new file mode 100644
index 0000000..8d03330
--- /dev/null
+++ b/rust-vendor/indicatif/Cargo.toml.orig
@@ -0,0 +1,47 @@
+[package]
+name = "indicatif"
+version = "0.18.4"
+edition = "2021"
+rust-version = "1.71"
+description = "A progress bar and cli reporting library for Rust"
+keywords = ["cli", "progress", "pb", "colors", "progressbar"]
+categories = ["command-line-interface"]
+license = "MIT"
+repository = "https://github.com/console-rs/indicatif"
+documentation = "https://docs.rs/indicatif"
+readme = "README.md"
+exclude = ["screenshots/*"]
+
+[dependencies]
+console = { version = "0.16", default-features = false, features = ["ansi-parsing", "std"] }
+futures-core = { version = "0.3", default-features = false, optional = true }
+unit-prefix = "0.5.1"
+portable-atomic = "1.12.0"
+rayon = { version = "1.1", optional = true }
+tokio = { version = "1", optional = true, features = ["io-util"] }
+unicode-segmentation = { version = "1", optional = true }
+unicode-width = { version = "0.2", optional = true }
+vt100 = { version = "0.16.1", optional = true }
+
+[dev-dependencies]
+clap = { version = "4", features = ["color", "derive"] }
+once_cell = "1"
+rand = "0.9"
+tokio = { version = "1", features = ["fs", "time", "rt"] }
+futures = "0.3" # so the doctest for wrap_stream is nice
+pretty_assertions = "1.4.0"
+
+[target.'cfg(target_arch = "wasm32")'.dependencies]
+web-time = { version = "1.1.0", optional = true }
+
+[features]
+default = ["unicode-width", "wasmbind"]
+unicode-width = ["dep:unicode-width", "console/unicode-width"]
+improved_unicode = ["unicode-segmentation", "unicode-width"]
+in_memory = ["vt100"]
+futures = ["dep:futures-core"]
+wasmbind = ["dep:web-time"]
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
diff --git b/rust-vendor/inotify/.cargo_vcs_info.json b/rust-vendor/inotify/.cargo_vcs_info.json
new file mode 100644
index 0000000..777469b
--- /dev/null
+++ b/rust-vendor/inotify/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "96fc2c633bb7133414949cd5094599d35d8e82a7"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/inotify/.github/workflows/rust.yml b/rust-vendor/inotify/.github/workflows/rust.yml
new file mode 100644
index 0000000..bff6689
--- /dev/null
+++ b/rust-vendor/inotify/.github/workflows/rust.yml
@@ -0,0 +1,44 @@
+name: Rust
+
+on: [push, pull_request]
+
+jobs:
+ build:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v1
+ - name: Install rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: 1.70.0
+ override: true
+ components: clippy
+ - name: Check rust and cargo version
+ run: rustc -V && cargo -V
+ - name: Build
+ run: cargo build --verbose
+ - name: Run tests
+ run: cargo test --verbose
+ - name: Run Clippy lints
+ run: cargo clippy --verbose -- -D warnings
+ - name: Build (no default features)
+ run: cargo build --verbose --no-default-features
+ - name: Run tests (no default features)
+ run: cargo test --verbose --no-default-features
+ - name: Run Clippy lints (no default features)
+ run: cargo clippy --verbose --no-default-features -- -D warnings
+
+ miri:
+ name: "Miri"
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Install Miri
+ run: |
+ rustup toolchain install nightly --component miri
+ rustup override set nightly
+ cargo miri setup
+ - name: Test with Miri tests with "from_buffer" in name
+ run: cargo miri test from_buffer
diff --git b/rust-vendor/inotify/Cargo.toml.orig b/rust-vendor/inotify/Cargo.toml.orig
new file mode 100644
index 0000000..e485f19
--- /dev/null
+++ b/rust-vendor/inotify/Cargo.toml.orig
@@ -0,0 +1,53 @@
+[package]
+
+name = "inotify"
+version = "0.11.0"
+authors = [
+ "Hanno Braun <mail@hannobraun.de>",
+ "Félix Saparelli <me@passcod.name>",
+ "Cristian Kubis <cristian.kubis@tsunix.de>",
+ "Frank Denis <github@pureftpd.org>"
+]
+edition = "2018"
+rust-version = "1.70"
+
+description = "Idiomatic wrapper for inotify"
+documentation = "https://docs.rs/inotify"
+repository = "https://github.com/hannobraun/inotify"
+license = "ISC"
+readme = "README.md"
+
+keywords = ["inotify", "linux"]
+categories = ["api-bindings", "filesystem"]
+exclude = ["/.travis.yml", "/inotify-rs.sublime-project"]
+
+[badges]
+maintenance = { status = "actively-developed" }
+travis-ci = { repository = "inotify-rs/inotify" }
+
+
+[features]
+default = ["stream"]
+stream = ["futures-core", "tokio"]
+
+
+[dependencies]
+bitflags = "2"
+futures-core = { version = "0.3.1", optional = true }
+inotify-sys = "0.1.3"
+libc = "0.2"
+tokio = { version = "1.0.1", optional = true, features = ["net"] }
+
+[dev-dependencies]
+maplit = "1.0"
+rand = "0.8"
+tempfile = "3.1.0"
+futures-util = "0.3.1"
+tokio = { version = "1.0.1", features = ["macros", "rt-multi-thread"] }
+
+[[example]]
+name = "stream"
+required-features = ["stream"]
+
+[[example]]
+name = "watch"
diff --git b/rust-vendor/inotify-sys/.cargo_vcs_info.json b/rust-vendor/inotify-sys/.cargo_vcs_info.json
new file mode 100644
index 0000000..c11f2da
--- /dev/null
+++ b/rust-vendor/inotify-sys/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "sha1": "57f7facfa12ae0aff2054972691b4cd5f5afc154"
+ }
+}
diff --git b/rust-vendor/inotify-sys/Cargo.toml.orig b/rust-vendor/inotify-sys/Cargo.toml.orig
new file mode 100644
index 0000000..4c0b004
--- /dev/null
+++ b/rust-vendor/inotify-sys/Cargo.toml.orig
@@ -0,0 +1,20 @@
+[package]
+name = "inotify-sys"
+version = "0.1.5"
+authors = ["Hanno Braun <hb@hannobraun.de>"]
+
+description = "inotify bindings for the Rust programming language"
+documentation = "https://docs.rs/inotify-sys"
+repository = "https://github.com/hannobraun/inotify-sys"
+license = "ISC"
+readme = "README.md"
+
+keywords = ["inotify", "linux"]
+categories = ["external-ffi-bindings", "filesystem"]
+exclude = ["/.travis.yml", "/inotify-sys.sublime-project"]
+
+[badges]
+travis-ci = { repository = "inotify-rs/inotify-sys" }
+
+[dependencies]
+libc = "0.2"
diff --git b/rust-vendor/intl-memoizer/.cargo_vcs_info.json b/rust-vendor/intl-memoizer/.cargo_vcs_info.json
new file mode 100644
index 0000000..7ae269e
--- /dev/null
+++ b/rust-vendor/intl-memoizer/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f22da4ea48328b4c617b7666c482634c49fbe0a7"
+ },
+ "path_in_vcs": "intl-memoizer"
+}
\ No newline at end of file
diff --git b/rust-vendor/intl-memoizer/Cargo.toml.orig b/rust-vendor/intl-memoizer/Cargo.toml.orig
new file mode 100644
index 0000000..fdaf68b
--- /dev/null
+++ b/rust-vendor/intl-memoizer/Cargo.toml.orig
@@ -0,0 +1,32 @@
+[package]
+name = "intl-memoizer"
+description = """
+A memoizer specifically tailored for storing lazy-initialized intl formatters for Project Fluent,
+a localization system designed to unleash the entire expressive power of natural language translations.
+"""
+version = "0.5.3"
+edition.workspace = true
+rust-version.workspace = true
+homepage.workspace = true
+repository.workspace = true
+license.workspace = true
+authors.workspace = true
+categories.workspace = true
+keywords.workspace = true
+readme = "README.md"
+include = [
+ "src/**/*",
+ "benches/*.rs",
+ "Cargo.toml",
+ "README.md",
+ "LICENSE-APACHE",
+ "LICENSE-MIT",
+]
+
+[dependencies]
+unic-langid.workspace = true
+type-map = "0.5"
+
+[dev-dependencies]
+intl_pluralrules.workspace = true
+fluent-langneg.workspace = true
diff --git b/rust-vendor/intl_pluralrules/.cargo_vcs_info.json b/rust-vendor/intl_pluralrules/.cargo_vcs_info.json
new file mode 100644
index 0000000..e67b351
--- /dev/null
+++ b/rust-vendor/intl_pluralrules/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d0715d5b7cca72e228d6e6c4de154bd30dfdd06a"
+ },
+ "path_in_vcs": "intl_pluralrules"
+}
\ No newline at end of file
diff --git b/rust-vendor/intl_pluralrules/Cargo.toml.orig b/rust-vendor/intl_pluralrules/Cargo.toml.orig
new file mode 100644
index 0000000..3bf3b8e
--- /dev/null
+++ b/rust-vendor/intl_pluralrules/Cargo.toml.orig
@@ -0,0 +1,34 @@
+[package]
+name = "intl_pluralrules"
+version = "7.0.2"
+edition = "2018"
+authors = ["Kekoa Riggin <kekoariggin@gmail.com>", "Zibi Braniecki <zbraniecki@mozilla.com>"]
+description = "Unicode Plural Rules categorizer for numeric input."
+license = "Apache-2.0/MIT"
+repository = "https://github.com/zbraniecki/pluralrules"
+readme = "README.md"
+keywords = ["localization", "l10n", "i18n", "intl", "internationalization"]
+categories = ["localization", "internationalization"]
+include = [
+ "src/**/*",
+ "benches/*.rs",
+ "Cargo.toml",
+ "README.md"
+]
+
+[badges]
+travis-ci = { repository = "zbraniecki/pluralrules", branch = "master" }
+coveralls = { repository = "zbraniecki/pluralrules", branch = "master", service = "github" }
+
+maintenance = { status = "actively-developed" }
+
+[dependencies]
+unic-langid = "0.9"
+
+[dev-dependencies]
+criterion = "0.3"
+unic-langid = { version = "0.9", features = ["macros"] }
+
+[[bench]]
+name = "pluralrules"
+harness = false
diff --git b/rust-vendor/is_terminal_polyfill/.cargo_vcs_info.json b/rust-vendor/is_terminal_polyfill/.cargo_vcs_info.json
new file mode 100644
index 0000000..75e4978
--- /dev/null
+++ b/rust-vendor/is_terminal_polyfill/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "9ed4c24ea4e9202cb38a6564368252ed35197a08"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/is_terminal_polyfill/Cargo.toml.orig b/rust-vendor/is_terminal_polyfill/Cargo.toml.orig
new file mode 100644
index 0000000..61999e3
--- /dev/null
+++ b/rust-vendor/is_terminal_polyfill/Cargo.toml.orig
@@ -0,0 +1,106 @@
+[package]
+name = "is_terminal_polyfill"
+version = "1.70.2"
+description = "Polyfill for `is_terminal` stdlib feature for use with older MSRVs"
+repository = "https://github.com/polyfill-rs/is_terminal_polyfill"
+categories = []
+keywords = []
+license = "MIT OR Apache-2.0"
+edition = "2021"
+rust-version = "1.70.0" # MSRV
+include = [
+ "build.rs",
+ "src/**/*",
+ "Cargo.toml",
+ "Cargo.lock",
+ "LICENSE*",
+ "README.md",
+ "benches/**/*",
+ "examples/**/*"
+]
+
+[package.metadata.docs.rs]
+all-features = true
+
+[package.metadata.release]
+pre-release-replacements = [
+ {file="CHANGELOG.md", search="Unreleased", replace="{{version}}", min=1},
+ {file="CHANGELOG.md", search="\\.\\.\\.HEAD", replace="...{{tag_name}}", exactly=1},
+ {file="CHANGELOG.md", search="ReleaseDate", replace="{{date}}", min=1},
+ {file="CHANGELOG.md", search="<!-- next-header -->", replace="<!-- next-header -->\n## [Unreleased] - ReleaseDate\n", exactly=1},
+ {file="CHANGELOG.md", search="<!-- next-url -->", replace="<!-- next-url -->\n[Unreleased]: https://github.com/polyfill-rs/is_terminal_polyfill/compare/{{tag_name}}...HEAD", exactly=1},
+]
+
+[features]
+default = []
+
+[dependencies]
+
+[lints.rust]
+rust_2018_idioms = "warn"
+unreachable_pub = "warn"
+unsafe_op_in_unsafe_fn = "warn"
+unused_lifetimes = "warn"
+unused_macro_rules = "warn"
+unused_qualifications = "warn"
+
+[lints.clippy]
+bool_assert_comparison = "allow"
+branches_sharing_code = "allow"
+checked_conversions = "warn"
+collapsible_else_if = "allow"
+create_dir = "warn"
+dbg_macro = "warn"
+debug_assert_with_mut_call = "warn"
+doc_markdown = "warn"
+empty_enum = "warn"
+enum_glob_use = "warn"
+expl_impl_clone_on_copy = "warn"
+explicit_deref_methods = "warn"
+explicit_into_iter_loop = "warn"
+fallible_impl_from = "warn"
+filter_map_next = "warn"
+flat_map_option = "warn"
+float_cmp_const = "warn"
+fn_params_excessive_bools = "warn"
+from_iter_instead_of_collect = "warn"
+if_same_then_else = "allow"
+implicit_clone = "warn"
+imprecise_flops = "warn"
+inconsistent_struct_constructor = "warn"
+inefficient_to_string = "warn"
+infinite_loop = "warn"
+invalid_upcast_comparisons = "warn"
+large_digit_groups = "warn"
+large_stack_arrays = "warn"
+large_types_passed_by_value = "warn"
+let_and_return = "allow" # sometimes good to name what you are returning
+linkedlist = "warn"
+lossy_float_literal = "warn"
+macro_use_imports = "warn"
+match_wildcard_for_single_variants = "warn"
+mem_forget = "warn"
+mutex_integer = "warn"
+needless_continue = "warn"
+needless_for_each = "warn"
+negative_feature_names = "warn"
+path_buf_push_overwrite = "warn"
+ptr_as_ptr = "warn"
+rc_mutex = "warn"
+redundant_feature_names = "warn"
+ref_option_ref = "warn"
+rest_pat_in_fully_bound_structs = "warn"
+same_functions_in_if_condition = "warn"
+self_named_module_files = "warn"
+semicolon_if_nothing_returned = "warn"
+single_match_else = "warn"
+str_to_string = "warn"
+string_add = "warn"
+string_add_assign = "warn"
+string_lit_as_bytes = "warn"
+string_to_string = "warn"
+todo = "warn"
+trait_duplication_in_bounds = "warn"
+verbose_file_reads = "warn"
+wildcard_imports = "warn"
+zero_sized_map_values = "warn"
diff --git b/rust-vendor/itertools/.cargo_vcs_info.json b/rust-vendor/itertools/.cargo_vcs_info.json
new file mode 100644
index 0000000..a6fc921
--- /dev/null
+++ b/rust-vendor/itertools/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a015a6831525ee1637df747d3f530a627d9741bf"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/itertools/.codecov.yml b/rust-vendor/itertools/.codecov.yml
new file mode 100644
index 0000000..d06394a
--- /dev/null
+++ b/rust-vendor/itertools/.codecov.yml
@@ -0,0 +1,7 @@
+coverage:
+ status:
+ project:
+ default:
+ target: auto
+ # Allow a tiny drop of overall project coverage in PR to reduce spurious failures.
+ threshold: 0.25%
diff --git b/rust-vendor/itertools/.github/dependabot.yml b/rust-vendor/itertools/.github/dependabot.yml
new file mode 100644
index 0000000..71607d0
--- /dev/null
+++ b/rust-vendor/itertools/.github/dependabot.yml
@@ -0,0 +1,6 @@
+version: 2
+updates:
+- package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: daily
diff --git b/rust-vendor/itertools/.github/workflows/ci.yml b/rust-vendor/itertools/.github/workflows/ci.yml
new file mode 100644
index 0000000..8e2a9d6
--- /dev/null
+++ b/rust-vendor/itertools/.github/workflows/ci.yml
@@ -0,0 +1,101 @@
+name: CI
+
+on:
+ pull_request:
+ paths-ignore:
+ - "**.md"
+ merge_group:
+ paths-ignore:
+ - "**.md"
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ features:
+ [
+ "",
+ "--no-default-features",
+ "--no-default-features --features use_alloc",
+ "--all-targets --all-features",
+ ]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ components: clippy
+ - run: RUSTFLAGS="--deny warnings" cargo clippy ${{ matrix.features }}
+
+ doc:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - run: RUSTDOCFLAGS="-Dwarnings" cargo doc --all-features
+
+ msrv:
+ runs-on: ubuntu-latest
+ env:
+ CARGO_NET_GIT_FETCH_WITH_CLI: true
+ steps:
+ - uses: actions/checkout@v4
+ - uses: taiki-e/install-action@cargo-no-dev-deps
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ # Here, it does not trigger a PR from dependabot.
+ toolchain: 1.63.0
+ - run: cargo no-dev-deps check
+
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - run: cargo test --all-features
+
+ miri:
+ runs-on: ubuntu-latest
+ env:
+ CARGO_TERM_COLOR: always
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: nightly
+ components: miri
+ - uses: taiki-e/install-action@nextest
+ - run: |
+ cargo miri nextest run --all-features
+ cargo miri test --doc
+
+ check-format:
+ name: check format
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: rustfmt
+ - run: cargo fmt --check
+
+ semver-checks:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - uses: obi1kenobi/cargo-semver-checks-action@v2.4
+ with:
+ rust-toolchain: manual
+ feature-group: all-features
+
+ # Used to signal to branch protections that all other jobs have succeeded.
+ all-jobs-succeed:
+ name: All checks succeeded
+ if: success()
+ runs-on: ubuntu-latest
+ needs: [check, msrv, test, check-format, doc]
+ steps:
+ - name: Mark the job as successful
+ run: exit 0
diff --git b/rust-vendor/itertools/.github/workflows/coverage.yml b/rust-vendor/itertools/.github/workflows/coverage.yml
new file mode 100644
index 0000000..5c08456
--- /dev/null
+++ b/rust-vendor/itertools/.github/workflows/coverage.yml
@@ -0,0 +1,34 @@
+on:
+ push:
+ branches: [master]
+ paths-ignore:
+ - "**.md"
+ pull_request:
+ paths-ignore:
+ - "**.md"
+
+name: Code Coverage
+
+jobs:
+ coverage:
+ name: coverage
+ runs-on: ubuntu-latest
+ steps:
+ - name: checkout source
+ uses: actions/checkout@v4
+
+ - name: Install nightly toolchain
+ uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: llvm-tools-preview
+
+ - name: Install cargo-llvm-cov
+ uses: taiki-e/install-action@cargo-llvm-cov
+
+ - name: Run llvm-cov
+ run: cargo llvm-cov --all-features --doctests --workspace --lcov --output-path lcov.info
+
+ - name: Upload coverage to Codecov
+ uses: codecov/codecov-action@v4
+ with:
+ files: lcov.info
diff --git b/rust-vendor/itertools/Cargo.toml.orig b/rust-vendor/itertools/Cargo.toml.orig
new file mode 100644
index 0000000..1d8a68f
--- /dev/null
+++ b/rust-vendor/itertools/Cargo.toml.orig
@@ -0,0 +1,81 @@
+[package]
+name = "itertools"
+version = "0.14.0"
+
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-itertools/itertools"
+documentation = "https://docs.rs/itertools/"
+authors = ["bluss"]
+readme = "README.md"
+
+description = "Extra iterator adaptors, iterator methods, free functions, and macros."
+
+keywords = ["iterator", "data-structure", "zip", "product"]
+categories = ["algorithms", "rust-patterns", "no-std", "no-std::no-alloc"]
+
+edition = "2018"
+
+# When bumping, please resolve all `#[allow(clippy::*)]` that are newly resolvable.
+rust-version = "1.63.0"
+
+[lib]
+bench = false
+test = false
+
+[dependencies]
+either = { version = "1.0", default-features = false }
+
+[dev-dependencies]
+rand = "0.7"
+criterion = { version = "0.4.0", features = ["html_reports"] }
+paste = "1.0.0" # Used in test_std to instantiate generic tests
+permutohedron = "0.2"
+quickcheck = { version = "0.9", default-features = false }
+
+[features]
+default = ["use_std"]
+use_std = ["use_alloc", "either/use_std"]
+use_alloc = []
+
+[profile]
+bench = { debug = true }
+
+[[bench]]
+name = "tuple_combinations"
+harness = false
+
+[[bench]]
+name = "tuples"
+harness = false
+
+[[bench]]
+name = "fold_specialization"
+harness = false
+
+[[bench]]
+name = "combinations_with_replacement"
+harness = false
+
+[[bench]]
+name = "tree_reduce"
+harness = false
+
+[[bench]]
+name = "bench1"
+harness = false
+
+[[bench]]
+name = "combinations"
+harness = false
+
+[[bench]]
+name = "powerset"
+harness = false
+
+[[bench]]
+name = "specializations"
+harness = false
+
+[[bench]]
+name = "k_smallest"
+harness = false
diff --git b/rust-vendor/itertools-0.13.0/.cargo_vcs_info.json b/rust-vendor/itertools-0.13.0/.cargo_vcs_info.json
new file mode 100644
index 0000000..848cbe4
--- /dev/null
+++ b/rust-vendor/itertools-0.13.0/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d5084d15e959b85d89a49e5cd33ad6267bc541a3"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/itertools-0.13.0/.codecov.yml b/rust-vendor/itertools-0.13.0/.codecov.yml
new file mode 100644
index 0000000..d06394a
--- /dev/null
+++ b/rust-vendor/itertools-0.13.0/.codecov.yml
@@ -0,0 +1,7 @@
+coverage:
+ status:
+ project:
+ default:
+ target: auto
+ # Allow a tiny drop of overall project coverage in PR to reduce spurious failures.
+ threshold: 0.25%
diff --git b/rust-vendor/itertools-0.13.0/.github/dependabot.yml b/rust-vendor/itertools-0.13.0/.github/dependabot.yml
new file mode 100644
index 0000000..71607d0
--- /dev/null
+++ b/rust-vendor/itertools-0.13.0/.github/dependabot.yml
@@ -0,0 +1,6 @@
+version: 2
+updates:
+- package-ecosystem: github-actions
+ directory: "/"
+ schedule:
+ interval: daily
diff --git b/rust-vendor/itertools-0.13.0/.github/workflows/ci.yml b/rust-vendor/itertools-0.13.0/.github/workflows/ci.yml
new file mode 100644
index 0000000..239ce24
--- /dev/null
+++ b/rust-vendor/itertools-0.13.0/.github/workflows/ci.yml
@@ -0,0 +1,85 @@
+name: CI
+
+on:
+ pull_request:
+ paths-ignore:
+ - "**.md"
+ merge_group:
+ paths-ignore:
+ - "**.md"
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ features:
+ [
+ "",
+ "--no-default-features",
+ "--no-default-features --features use_alloc",
+ "--all-targets --all-features",
+ ]
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ components: clippy
+ - run: RUSTFLAGS="--deny warnings" cargo clippy ${{ matrix.features }}
+
+ doc:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - run: RUSTDOCFLAGS="-Dwarnings" cargo doc --all-features
+
+ msrv:
+ runs-on: ubuntu-latest
+ env:
+ CARGO_NET_GIT_FETCH_WITH_CLI: true
+ steps:
+ - uses: actions/checkout@v4
+ - uses: taiki-e/install-action@cargo-no-dev-deps
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ # Here, it does not trigger a PR from dependabot.
+ toolchain: 1.43.1
+ - run: cargo no-dev-deps check
+
+ test:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - run: cargo test --all-features
+
+ check-format:
+ name: check format
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ components: rustfmt
+ - run: cargo fmt --check
+
+ semver-checks:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: obi1kenobi/cargo-semver-checks-action@v2.4
+ with:
+ rust-toolchain: stable
+ feature-group: all-features
+
+ # Used to signal to branch protections that all other jobs have succeeded.
+ all-jobs-succeed:
+ name: All checks succeeded
+ if: success()
+ runs-on: ubuntu-latest
+ needs: [check, msrv, test, check-format, doc]
+ steps:
+ - name: Mark the job as successful
+ run: exit 0
diff --git b/rust-vendor/itertools-0.13.0/.github/workflows/coverage.yml b/rust-vendor/itertools-0.13.0/.github/workflows/coverage.yml
new file mode 100644
index 0000000..5c08456
--- /dev/null
+++ b/rust-vendor/itertools-0.13.0/.github/workflows/coverage.yml
@@ -0,0 +1,34 @@
+on:
+ push:
+ branches: [master]
+ paths-ignore:
+ - "**.md"
+ pull_request:
+ paths-ignore:
+ - "**.md"
+
+name: Code Coverage
+
+jobs:
+ coverage:
+ name: coverage
+ runs-on: ubuntu-latest
+ steps:
+ - name: checkout source
+ uses: actions/checkout@v4
+
+ - name: Install nightly toolchain
+ uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: llvm-tools-preview
+
+ - name: Install cargo-llvm-cov
+ uses: taiki-e/install-action@cargo-llvm-cov
+
+ - name: Run llvm-cov
+ run: cargo llvm-cov --all-features --doctests --workspace --lcov --output-path lcov.info
+
+ - name: Upload coverage to Codecov
+ uses: codecov/codecov-action@v4
+ with:
+ files: lcov.info
diff --git b/rust-vendor/itertools-0.13.0/Cargo.toml.orig b/rust-vendor/itertools-0.13.0/Cargo.toml.orig
new file mode 100644
index 0000000..7fb6a39
--- /dev/null
+++ b/rust-vendor/itertools-0.13.0/Cargo.toml.orig
@@ -0,0 +1,77 @@
+[package]
+name = "itertools"
+version = "0.13.0"
+
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-itertools/itertools"
+documentation = "https://docs.rs/itertools/"
+authors = ["bluss"]
+readme = "README.md"
+
+description = "Extra iterator adaptors, iterator methods, free functions, and macros."
+
+keywords = ["iterator", "data-structure", "zip", "product"]
+categories = ["algorithms", "rust-patterns", "no-std", "no-std::no-alloc"]
+
+edition = "2018"
+
+# When bumping, please resolve all `#[allow(clippy::*)]` that are newly resolvable.
+rust-version = "1.43.1"
+
+[lib]
+bench = false
+test = false
+
+[dependencies]
+either = { version = "1.0", default-features = false }
+
+[dev-dependencies]
+rand = "0.7"
+criterion = "0.4.0"
+paste = "1.0.0" # Used in test_std to instantiate generic tests
+permutohedron = "0.2"
+quickcheck = { version = "0.9", default_features = false }
+
+[features]
+default = ["use_std"]
+use_std = ["use_alloc", "either/use_std"]
+use_alloc = []
+
+[profile]
+bench = { debug = true }
+
+[[bench]]
+name = "tuple_combinations"
+harness = false
+
+[[bench]]
+name = "tuples"
+harness = false
+
+[[bench]]
+name = "fold_specialization"
+harness = false
+
+[[bench]]
+name = "combinations_with_replacement"
+harness = false
+
+[[bench]]
+name = "tree_reduce"
+harness = false
+
+[[bench]]
+name = "bench1"
+harness = false
+
+[[bench]]
+name = "combinations"
+harness = false
+
+[[bench]]
+name = "powerset"
+harness = false
+
+[[bench]]
+name = "specializations"
+harness = false
diff --git b/rust-vendor/itoa/.cargo_vcs_info.json b/rust-vendor/itoa/.cargo_vcs_info.json
new file mode 100644
index 0000000..078f4a2
--- /dev/null
+++ b/rust-vendor/itoa/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "21d610902fb79eb16b7c155d25574fb7376d9e97"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/itoa/.github/FUNDING.yml b/rust-vendor/itoa/.github/FUNDING.yml
new file mode 100644
index 0000000..7507077
--- /dev/null
+++ b/rust-vendor/itoa/.github/FUNDING.yml
@@ -0,0 +1 @@
+github: dtolnay
diff --git b/rust-vendor/itoa/.github/workflows/ci.yml b/rust-vendor/itoa/.github/workflows/ci.yml
new file mode 100644
index 0000000..6b7c03d
--- /dev/null
+++ b/rust-vendor/itoa/.github/workflows/ci.yml
@@ -0,0 +1,126 @@
+name: CI
+
+on:
+ push:
+ pull_request:
+ workflow_dispatch:
+ schedule: [cron: "40 1 * * *"]
+
+permissions:
+ contents: read
+
+env:
+ RUSTFLAGS: -Dwarnings
+
+jobs:
+ pre_ci:
+ uses: dtolnay/.github/.github/workflows/pre_ci.yml@master
+
+ test:
+ name: Rust ${{matrix.rust}}
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust: [nightly, beta, stable, 1.86.0]
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{matrix.rust}}
+ - name: Enable type layout randomization
+ run: echo RUSTFLAGS=${RUSTFLAGS}\ -Zrandomize-layout >> $GITHUB_ENV
+ if: matrix.rust == 'nightly'
+ - run: cargo build
+ - run: cargo test
+ - run: cargo test --release
+ - run: cargo build --no-default-features
+ - run: cargo test --tests --no-default-features
+ - run: cargo test --tests --no-default-features --release
+ - run: cargo build --tests --features no-panic --release
+ if: matrix.rust == 'nightly'
+ - run: cargo bench --no-run
+ if: matrix.rust == 'nightly'
+ - uses: actions/upload-artifact@v6
+ if: matrix.rust == 'nightly' && always()
+ with:
+ name: Cargo.lock
+ path: Cargo.lock
+ continue-on-error: true
+
+ msrv:
+ name: Rust 1.68.0
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@1.68
+ - run: cargo build
+ - run: cargo build --no-default-features
+
+ doc:
+ name: Documentation
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ env:
+ RUSTDOCFLAGS: -Dwarnings
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@nightly
+ - uses: dtolnay/install@cargo-docs-rs
+ - run: cargo docs-rs
+
+ miri:
+ name: Miri
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@miri
+ - run: cargo miri setup
+ - run: cargo miri test
+ env:
+ MIRIFLAGS: -Zmiri-strict-provenance
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-latest
+ if: github.event_name != 'pull_request'
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@clippy
+ - run: cargo clippy --tests --benches -- -Dclippy::all -Dclippy::pedantic
+
+ fuzz:
+ name: Fuzz
+ needs: pre_ci
+ if: needs.pre_ci.outputs.continue
+ runs-on: ubuntu-latest
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@nightly
+ - uses: dtolnay/install@cargo-fuzz
+ - run: cargo fuzz check
+
+ outdated:
+ name: Outdated
+ runs-on: ubuntu-latest
+ if: github.event_name != 'pull_request'
+ timeout-minutes: 45
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ - uses: dtolnay/install@cargo-outdated
+ - run: cargo outdated --workspace --exit-code 1
+ - run: cargo outdated --manifest-path fuzz/Cargo.toml --exit-code 1
diff --git b/rust-vendor/itoa/Cargo.toml.orig b/rust-vendor/itoa/Cargo.toml.orig
new file mode 100644
index 0000000..d89b787
--- /dev/null
+++ b/rust-vendor/itoa/Cargo.toml.orig
@@ -0,0 +1,33 @@
+[package]
+name = "itoa"
+version = "1.0.17"
+authors = ["David Tolnay <dtolnay@gmail.com>"]
+categories = ["value-formatting", "no-std", "no-std::no-alloc"]
+description = "Fast integer primitive to string conversion"
+documentation = "https://docs.rs/itoa"
+edition = "2021"
+exclude = ["*.png", "chart/**"]
+keywords = ["integer"]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/dtolnay/itoa"
+rust-version = "1.68"
+
+[dependencies]
+no-panic = { version = "0.1", optional = true }
+
+[target.'cfg(not(miri))'.dev-dependencies]
+criterion = { version = "0.8", default-features = false }
+
+[[bench]]
+name = "bench"
+harness = false
+
+[package.metadata.docs.rs]
+targets = ["x86_64-unknown-linux-gnu"]
+rustdoc-args = [
+ "--generate-link-to-definition",
+ "--generate-macro-expansion",
+ "--extern-html-root-url=core=https://doc.rust-lang.org",
+ "--extern-html-root-url=alloc=https://doc.rust-lang.org",
+ "--extern-html-root-url=std=https://doc.rust-lang.org",
+]
diff --git b/rust-vendor/ixdtf/.cargo_vcs_info.json b/rust-vendor/ixdtf/.cargo_vcs_info.json
new file mode 100644
index 0000000..a32e9d3
--- /dev/null
+++ b/rust-vendor/ixdtf/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "29dfe2790b6cfdab94ca6a6b69f58ce54802dbf7"
+ },
+ "path_in_vcs": "utils/ixdtf"
+}
\ No newline at end of file
diff --git b/rust-vendor/ixdtf/Cargo.toml.orig b/rust-vendor/ixdtf/Cargo.toml.orig
new file mode 100644
index 0000000..86e56c7
--- /dev/null
+++ b/rust-vendor/ixdtf/Cargo.toml.orig
@@ -0,0 +1,38 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "ixdtf"
+description = "Parser for Internet eXtended DateTime Format"
+version = "0.6.4"
+
+authors.workspace = true
+categories.workspace = true
+edition.workspace = true
+homepage.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version = "1.82"
+
+[package.metadata.workspaces]
+independent = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[features]
+default = ["duration"]
+duration = []
+
+[dependencies]
+
+[dev-dependencies]
+serde-json-core = { workspace = true, features = ["std"] }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[package.metadata.cargo-semver-checks.lints]
+workspace = true
diff --git b/rust-vendor/jiff/.cargo_vcs_info.json b/rust-vendor/jiff/.cargo_vcs_info.json
new file mode 100644
index 0000000..82ee63e
--- /dev/null
+++ b/rust-vendor/jiff/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "e5b7f0d061e4da9598aed73f6171e78baa8b007f"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/jiff/Cargo.toml.orig b/rust-vendor/jiff/Cargo.toml.orig
new file mode 100644
index 0000000..15b60de
--- /dev/null
+++ b/rust-vendor/jiff/Cargo.toml.orig
@@ -0,0 +1,299 @@
+[package]
+name = "jiff"
+version = "0.2.23" #:version
+authors = ["Andrew Gallant <jamslam@gmail.com>"]
+license = "Unlicense OR MIT"
+repository = "https://github.com/BurntSushi/jiff"
+documentation = "https://docs.rs/jiff"
+description = '''
+A date-time library that encourages you to jump into the pit of success.
+
+This library is heavily inspired by the Temporal project.
+'''
+categories = ["date-and-time", "no-std"]
+keywords = ["date", "time", "calendar", "zone", "duration"]
+edition = "2021"
+autotests = false
+autoexamples = false
+rust-version = "1.70"
+# We include `/tests/lib.rs` to squash a `cargo package` warning that the
+# `integration` test target is being ignored. We don't include anything else
+# so tests obviously won't work, but it makes `cargo package` quiet.
+include = [
+ "/src/**/*.rs",
+ "/tests/lib.rs",
+ "/*.md",
+ "COPYING",
+ "LICENSE-MIT",
+ "UNLICENSE",
+]
+
+[workspace]
+members = [
+ "crates/jiff-cli",
+ "crates/jiff-static",
+ "crates/jiff-tzdb",
+ "crates/jiff-tzdb-platform",
+]
+
+# Features are documented in the "Crate features" section of the crate docs:
+# https://docs.rs/jiff/*/#crate-features
+[features]
+default = [
+ "std",
+ "tz-system",
+ "tz-fat",
+ "tzdb-bundle-platform",
+ "tzdb-zoneinfo",
+ "tzdb-concatenated",
+ "perf-inline",
+]
+std = ["alloc", "log?/std", "serde_core?/std"]
+alloc = ["serde_core?/alloc", "portable-atomic-util/alloc"]
+serde = ["dep:serde_core"]
+logging = ["dep:log"]
+
+# When enabled, Jiff will include code that attempts to determine the "system"
+# time zone. For example, on Unix systems, this is usually determined by
+# looking at the symlink information on /etc/localtime. But in general, it's
+# very platform specific and heuristic oriented. On some platforms, this may
+# require extra dependencies. (For example, `windows-sys` on Windows.)
+tz-system = ["std", "dep:windows-sys"]
+
+# When enabled, Jiff will "fatten" time zone data so that it contains more
+# transitions. This uses a little extra heap memory (or binary size, when
+# embedding time zone data into your binary) in exchange for generally faster
+# time zone lookups.
+#
+# Why is this a thing? The TZif files that make up the IANA Time Zone Database
+# contain both explicit transitions for when offsets change (e.g., twice a
+# year for DST) _and_ a more general rule for dealing with offset changes
+# that aren't explicitly listed. In the long ago, TZif data only contained the
+# explicit transitions. Later, they added support for the general rule
+# mechanism, which is only used for "current" transitions. The general rule
+# is implemented via, roughly, POSIX time zone strings.
+#
+# Not all consumers of the IANA Time Zone Database support POSIX time zone
+# strings, and so, the TZif files can be built in a "fat" mode that adds extra
+# transitions (usually up to the year 2037). This means that if you want to
+# find the offset for a timestamp in a particular time zone before 2037, you
+# just need to do one very fast binary search on the explicit transitions.
+#
+# However, these explicit transitions up through 2037 aren't, strictly
+# speaking, required. For example, the DST transition rule in the United States
+# (as of 2026-02-07) is perfectly described by a single POSIX time zone string:
+#
+# EST5EDT,M3.2.0,M11.1.0
+#
+# Therefore, it isn't necessary to add any explicit transitions to, e.g.,
+# `America/New_York` after the year 2007. (It would only become necessary if
+# the DST transition rule changed.)
+#
+# Thus, the TZif data files for the IANA Time Zone Database can _also_ be
+# generated in a "slim" fashion, where only the historical transitions are
+# included. Some platforms use the slim data by default, while others uses
+# the fat data.
+#
+# The problem is that determining the offset from a POSIX time zone can
+# generally be more costly than a simple binary search on explicit transitions.
+# That in turn means your time zone lookup performance can vary quite a bit due
+# to factors generally beyond your control. In order to mitigate this problem,
+# Jiff will automatically "fatten" up slim TZif data to include more explicit
+# transitions in memory. This smoothes out those performance differences.
+#
+# Users may want to disable this if they are sensitive to the extra memory
+# used. But generally speaking, the extra memory used is no more than what
+# would be used by "fat" TZif data files from `/usr/share/zoneinfo`.
+tz-fat = ["jiff-static?/tz-fat"]
+
+# When enabled, the `jiff::tz::get` and `jiff::tz::include` proc-macros
+# become available. These proc macros enable creating `TimeZone` values in a
+# `const` context for use in `core`-only environments.
+#
+# Users should generally prefer using Jiff's default zoneinfo integration at
+# runtime. On Unix systems, this will enable applications using Jiff to get
+# automatic tzdb updates when `/usr/share/zoneinfo` is updated without needing
+# to re-compile the application.
+#
+# Note that this introduces a build-time dependency on `jiff-tzdb`.
+static = ["static-tz", "jiff-static?/tzdb"]
+
+# When enabled, the `jiff::tz::include` macro becomes available.
+#
+# This proc-macro parses the TZif data (from a file) at compile time and
+# generates a special static structure that can be used by Jiff at runtime
+# to do tzdb lookups. This effectively provides a way to use time zones in
+# core-only environments without dynamic memory allocation.
+#
+# This is a subset of the functionality provided by `static`. Namely, this
+# doesn't result in a dependency on `jiff-tzdb`. It requires users to include
+# the time zone they want as a file, where as enabling `static` (which also
+# enables this feature, by necessity) permits using Jiff's bundled tzdb.
+static-tz = ["dep:jiff-static"]
+
+# This conditionally bundles tzdb into the binary depending on which platform
+# Jiff is being built for.
+tzdb-bundle-platform = ["dep:jiff-tzdb-platform", "alloc"]
+
+# This forces the jiff-tzdb crate to be included. If tzdb-zoneinfo is enabled,
+# then the system tzdb will take priority over the bundled database.
+tzdb-bundle-always = ["dep:jiff-tzdb", "alloc"]
+
+# This enables the system or "zoneinfo" time zone database. This is the
+# database that is typically found at /usr/share/zoneinfo on macOS and Linux.
+tzdb-zoneinfo = ["std"]
+
+# This enables the system concatenated time zone database. On some platforms,
+# like Android, this is the standard time zone database instead of the more
+# widespread `zoneinfo` directory created by `zic` itseld.
+#
+# This being enabled just means that some standard paths will be searched
+# for the concatenated database and it will be used if the standard zoneinfo
+# directory couldn't be found.
+tzdb-concatenated = ["std"]
+
+# This enables bindings to web browser APIs for retrieving the current time
+# and configured time zone. This ONLY applies on wasm32-unknown-unknown and
+# wasm64-unknown-unknown targets. Specifically, *not* on wasm32-wasi or
+# wasm32-unknown-emscripten targets.
+#
+# This is an "ecosystem" compromise due to the fact that there is no general
+# way to determine at compile time whether a wasm target is intended for use
+# on the "web." In practice, only wasm{32,64}-unknown-unknown targets are used
+# on the web, but wasm{32,64}-unknown-unknown targets can be used in non-web
+# contexts as well. Thus, the `js` feature should be enabled only by binaries,
+# tests or benchmarks when it is *known* that the application will be used in a
+# web context.
+#
+# Libraries that depend on Jiff should not need to define their own `js`
+# feature just to forward it to Jiff. Instead, application authors can depend
+# on Jiff directly and enable the `js` feature themselves.
+#
+# (This is the same dependency setup that the `getrandom` crate uses.)
+js = ["dep:wasm-bindgen", "dep:js-sys"]
+
+# When enabled, more aggressive inline annotations are used. This can
+# improve performance in some cases, particularly around the areas of parsing
+# and formatting.
+perf-inline = []
+
+[dependencies]
+jiff-static = { version = "0.2", path = "crates/jiff-static", optional = true }
+jiff-tzdb = { version = "0.1.6", path = "crates/jiff-tzdb", optional = true }
+log = { version = "0.4.21", optional = true, default-features = false }
+serde_core = { version = "1.0.221", optional = true, default-features = false }
+
+# This ensures that `jiff-static` is always used with a compatible version
+# of `jiff`. Namely, since `jiff-static` emits code that relies on internal
+# Jiff APIs that aren't covered by semver, we only guarantee compatibility for
+# one version of Jiff for each release of `jiff-static`.
+#
+# (This is the same pattern that `serde` and `serde_derive` use as of
+# 2025-02-22.)
+#
+# This also helps with compilation, although in Jiff's case, we don't use
+# `syn` so this is less of a problem.
+#
+# See: https://github.com/matklad/macro-dep-test
+[target.'cfg(any())'.dependencies]
+jiff-static = { version = "=0.2.23", path = "crates/jiff-static" }
+
+# Note that the `cfg` gate for the `tzdb-bundle-platform` must repeat the
+# target gate on this dependency. The intent is that `tzdb-bundle-platform`
+# is enabled by default, but that the `tzdb-bundle-platform` crate is only
+# actually used on platforms without a system tzdb (i.e., Windows and wasm).
+[target.'cfg(any(windows, target_family = "wasm"))'.dependencies]
+jiff-tzdb-platform = { version = "0.1.3", path = "crates/jiff-tzdb-platform", optional = true }
+
+[target.'cfg(windows)'.dependencies.windows-sys]
+version = ">=0.52.0, <=0.61.*"
+default-features = false
+features = ["Win32_Foundation", "Win32_System_Time"]
+optional = true
+
+[target.'cfg(all(any(target_arch = "wasm32", target_arch = "wasm64"), target_os = "unknown"))'.dependencies]
+js-sys = { version = "0.3.50", optional = true }
+wasm-bindgen = { version = "0.2.70", optional = true }
+
+# For targets that have no atomics in `std`, we add a dependency on
+# `portable-atomic-util` for its Arc implementation.
+#
+# Note that for this to work, you may need to enable a `portable-atomic`
+# feature like `portable-atomic/unsafe-assume-single-core` or
+# `portable-atomic/critical-section`.
+[target.'cfg(not(target_has_atomic = "ptr"))'.dependencies]
+portable-atomic = { version = "1.10.0", default-features = false }
+portable-atomic-util = { version = "0.2.4", default-features = false }
+
+[dev-dependencies]
+anyhow = "1.0.81"
+chrono = { version = "0.4.38", features = ["serde"] }
+chrono-tz = "0.10.0"
+humantime = "2.1.0"
+insta = "1.39.0"
+log = "0.4.21"
+# We force `serde` to be enabled in dev mode so that the docs render and test
+# correctly. We also enable `static` so that we can test our proc macros.
+jiff = { path = "./", default-features = false, features = ["serde", "static"] }
+quickcheck = { version = "1.0.3", default-features = false }
+serde = { version = "1.0.203", features = ["derive"] }
+serde_json = "1.0.117"
+serde_yaml = "0.9.34"
+tabwriter = "1.4.0"
+time = { version = "0.3.36", features = ["local-offset", "macros", "parsing"] }
+time-tz = "2.0.0"
+tzfile = "0.1.3"
+walkdir = "2.5.0"
+
+# Uncomment if you want to activate doc tests that import from `jiff_icu`
+# (currently only in `COMPARE.md`). Otherwise, this creates a circular
+# dependency and causes `jiff-icu` to get re-compiled all the time.
+# icu = { version = "1.5.0", features = ["std"] }
+# jiff-icu = { path = "./crates/jiff-icu" }
+
+# hifitime doesn't build on wasm for some reason, so exclude it there.
+[target.'cfg(not(target_family = "wasm"))'.dev-dependencies.hifitime]
+version = "3.9.0"
+
+[[test]]
+path = "tests/lib.rs"
+name = "integration"
+
+# This is just like the default 'test' profile, but debug_assertions are
+# disabled. This is important to cover for Jiff because we do a lot of extra
+# work in our internal ranged integer types when debug_assertions are enabled.
+# It also makes types fatter. It's very useful for catching overflow bugs.
+# But since there's a fair bit of logic there, it's also worth running tests
+# without debug_assertions enabled to exercise the *actual* code paths used
+# in production.
+[profile.testrelease]
+inherits = "test"
+debug-assertions = false
+
+[package.metadata.docs.rs]
+# We want to document all features.
+all-features = true
+# Since this crate's feature setup is pretty complicated, it is worth opting
+# into a nightly unstable option to show the features that need to be enabled
+# for public API items. To do that, we set `docsrs_jiff`, and when that's
+# enabled, we enable the 'doc_cfg' feature.
+#
+# To test this locally, run:
+#
+# RUSTDOCFLAGS="--cfg docsrs_jiff" cargo +nightly doc --all-features
+#
+# Note that we use `docsrs_jiff` instead of the more standard `docsrs` because
+# other crates use that same `cfg` knob. And since we are enabling a nightly
+# feature, they sometimes break. By using our "own" `cfg` knob, we are closer
+# to being masters of our own destiny.
+rustdoc-args = ["--cfg", "docsrs_jiff"]
+
+# Ref: https://github.com/BurntSushi/jiff/issues/502
+[package.metadata.playground]
+default-features = true
+features = ["logging", "serde", "static", "tzdb-bundle-always"]
+
+# This squashes the (AFAIK) erroneous warning that `docsrs_jiff` is not a
+# valid `cfg` knob.
+[lints.rust]
+unexpected_cfgs = { level = "allow", check-cfg = ['cfg(docsrs_jiff)'] }
diff --git b/rust-vendor/jiff-icu/.cargo_vcs_info.json b/rust-vendor/jiff-icu/.cargo_vcs_info.json
new file mode 100644
index 0000000..b84a874
--- /dev/null
+++ b/rust-vendor/jiff-icu/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "6bab68dc24df7cea36d17099178e8ed25d24c356"
+ },
+ "path_in_vcs": "crates/jiff-icu"
+}
\ No newline at end of file
diff --git b/rust-vendor/jiff-icu/Cargo.toml.orig b/rust-vendor/jiff-icu/Cargo.toml.orig
new file mode 100644
index 0000000..510cdab
--- /dev/null
+++ b/rust-vendor/jiff-icu/Cargo.toml.orig
@@ -0,0 +1,67 @@
+[package]
+name = "jiff-icu"
+version = "0.2.2" #:version
+authors = ["Andrew Gallant <jamslam@gmail.com>"]
+license = "Unlicense OR MIT"
+homepage = "https://github.com/BurntSushi/jiff/tree/master/crates/jiff-icu"
+repository = "https://github.com/BurntSushi/jiff"
+documentation = "https://docs.rs/jiff-icu"
+description = "Conversion routines between Jiff and ICU4X."
+categories = ["date-and-time"]
+keywords = ["date", "time", "temporal", "zone", "icu"]
+edition = "2021"
+rust-version = "1.82"
+include = ["/src/*.rs", "/*.dat", "COPYING", "LICENSE-MIT", "UNLICENSE"]
+
+# Integration crates in Jiff are explicitly isolated from the workspace to
+# avoid dependencies accumulating. I was originally motivated to do this
+# because rustc kept getting stun-locked compiling diesel. And this was somehow
+# happening every time I saved a file inside of Jiff proper. So I just ragequit
+# including everything in the same workspace and put integration crates (and
+# examples) into their own little bloated fiefdoms.
+[workspace]
+
+[lib]
+name = "jiff_icu"
+bench = false
+path = "src/lib.rs"
+
+[features]
+default = ["std", "zoned"]
+std = ["jiff/std", "alloc"]
+alloc = ["jiff/alloc", "icu_calendar/alloc", "icu_time?/alloc"]
+time = ["dep:icu_time"]
+# Compiled data is needed for parsing IANA time zone identifiers used by Jiff.
+zoned = ["time", "icu_time?/compiled_data"]
+
+[dependencies]
+jiff = { version = "0.2.11", path = "../..", default-features = false }
+icu_calendar = { version = "2.0.0", default-features = false }
+icu_time = { version = "2.0.0", optional = true, default-features = false }
+
+[dev-dependencies]
+jiff = { version = "0.2.11", path = "../..", default-features = true }
+icu = { version = "2.0.0" }
+
+[package.metadata.docs.rs]
+# We want to document all features.
+all-features = true
+# Since this crate's feature setup is pretty complicated, it is worth opting
+# into a nightly unstable option to show the features that need to be enabled
+# for public API items. To do that, we set `docsrs_jiff`, and when that's
+# enabled, we enable the 'doc_cfg' feature.
+#
+# To test this locally, run:
+#
+# RUSTDOCFLAGS="--cfg docsrs_jiff" cargo +nightly doc --all-features
+#
+# Note that we use `docsrs_jiff` instead of the more standard `docsrs` because
+# other crates use that same `cfg` knob. And since we are enabling a nightly
+# feature, they sometimes break. By using our "own" `cfg` knob, we are closer
+# to being masters of our own destiny.
+rustdoc-args = ["--cfg", "docsrs_jiff"]
+
+# This squashes the (AFAIK) erroneous warning that `docsrs_jiff` is not a
+# valid `cfg` knob.
+[lints.rust]
+unexpected_cfgs = { level = "allow", check-cfg = ['cfg(docsrs_jiff)'] }
diff --git b/rust-vendor/jiff-icu/README.md b/rust-vendor/jiff-icu/README.md
new file mode 100644
index 0000000..d7952a3
--- /dev/null
+++ b/rust-vendor/jiff-icu/README.md
@@ -0,0 +1,13 @@
+jiff-icu
+========
+A crate for converting between the datetime types found in [`icu`] and
+[`jiff`]. This can, for example, be used to augment uses of Jiff with
+functionality it doesn't support. For example, non-Gregorian calendars and
+datetime localization.
+
+[`icu`]: https://docs.rs/icu/1/
+[`jiff`]: https://docs.rs/jiff/0.2
+
+### Documentation
+
+https://docs.rs/jiff-icu
diff --git b/rust-vendor/jiff-static/.cargo_vcs_info.json b/rust-vendor/jiff-static/.cargo_vcs_info.json
new file mode 100644
index 0000000..2cb279c
--- /dev/null
+++ b/rust-vendor/jiff-static/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "e5b7f0d061e4da9598aed73f6171e78baa8b007f"
+ },
+ "path_in_vcs": "crates/jiff-static"
+}
\ No newline at end of file
diff --git b/rust-vendor/jiff-static/Cargo.toml.orig b/rust-vendor/jiff-static/Cargo.toml.orig
new file mode 100644
index 0000000..b3d1515
--- /dev/null
+++ b/rust-vendor/jiff-static/Cargo.toml.orig
@@ -0,0 +1,42 @@
+[package]
+name = "jiff-static"
+version = "0.2.23" #:version
+authors = ["Andrew Gallant <jamslam@gmail.com>"]
+license = "Unlicense OR MIT"
+homepage = "https://github.com/BurntSushi/jiff/tree/master/crates/jiff-static"
+repository = "https://github.com/BurntSushi/jiff"
+documentation = "https://docs.rs/jiff-tzdb"
+description = "Create static TimeZone values for Jiff (useful in core-only environments)."
+categories = ["date-and-time"]
+keywords = ["date", "time", "static", "zone", "iana"]
+workspace = "../.."
+edition = "2021"
+rust-version = "1.70"
+include = ["/src/**/*.rs", "COPYING", "LICENSE-MIT", "UNLICENSE"]
+
+[lib]
+name = "jiff_static"
+bench = false
+proc-macro = true
+
+[features]
+default = []
+# This forces the jiff-tzdb crate to be included and makes the `get` proc macro
+# available (which pulls from the bundled tzdb).
+tzdb = ["dep:jiff-tzdb"]
+# This fattens up the TZif data to contain more explicit transitions. This may
+# improve the performance of time zone lookups.
+#
+# See the `tz-fat` feature in this repository's root `Cargo.toml` for more
+# context.
+tz-fat = []
+# Equivalent to the eponymous feature in `jiff` proper. Except it isn't
+# enabled by default here, since we don't really care about that level of
+# perf at compile time.
+perf-inline = []
+
+[dependencies]
+jiff-tzdb = { version = "0.1.6", path = "../jiff-tzdb", optional = true }
+proc-macro2 = "1.0.93"
+quote = "1.0.38"
+syn = "2.0.98"
diff --git b/rust-vendor/jiff-static/README.md b/rust-vendor/jiff-static/README.md
new file mode 100644
index 0000000..103ad6d
--- /dev/null
+++ b/rust-vendor/jiff-static/README.md
@@ -0,0 +1,19 @@
+jiff-static
+===========
+This is an optional dependency of `jiff` that embeds time zone data into your
+binary via procedural macros. It unlocks the use case of creating a `TimeZone`
+value in core-only environments without dynamic memory allocation.
+
+Users should generally not depend on this directly, but instead use it
+through Jiff. Namely, all of the procedural macros defined in this crate
+are re-exported through Jiff's public API. For example, one can enable the
+`static` or `static-tz` crate features in `jiff` to get `jiff::tz::get!` and
+`jiff::tz::include!`.
+
+**WARNING**: The `src/shared` directory in this crate is copied from the
+`../src/shared` directory. This copy is managed by `jiff-cli generate shared`.
+See the comments in the code for why this is done.
+
+### Documentation
+
+https://docs.rs/jiff-static
diff --git b/rust-vendor/keccak/.cargo_vcs_info.json b/rust-vendor/keccak/.cargo_vcs_info.json
new file mode 100644
index 0000000..cc27992
--- /dev/null
+++ b/rust-vendor/keccak/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a8936d9662ca92fd177d289580066ceabb937b0c"
+ },
+ "path_in_vcs": "keccak"
+}
\ No newline at end of file
diff --git b/rust-vendor/keccak/Cargo.toml.orig b/rust-vendor/keccak/Cargo.toml.orig
new file mode 100644
index 0000000..8e81c00
--- /dev/null
+++ b/rust-vendor/keccak/Cargo.toml.orig
@@ -0,0 +1,23 @@
+[package]
+name = "keccak"
+version = "0.1.6"
+description = """
+Pure Rust implementation of the Keccak sponge function including the keccak-f
+and keccak-p variants
+"""
+authors = ["RustCrypto Developers"]
+license = "Apache-2.0 OR MIT"
+documentation = "https://docs.rs/keccak"
+repository = "https://github.com/RustCrypto/sponges/tree/master/keccak"
+keywords = ["crypto", "sponge", "keccak", "keccak-f", "keccak-p"]
+categories = ["cryptography", "no-std"]
+readme = "README.md"
+edition = "2018"
+
+[features]
+asm = [] # Use optimized assembly when available (currently only ARMv8)
+no_unroll = [] # Do no unroll loops for binary size reduction
+simd = [] # Use core::simd (nightly-only)
+
+[target.'cfg(target_arch = "aarch64")'.dependencies]
+cpufeatures = "0.2"
diff --git b/rust-vendor/lazy_static/.cargo_vcs_info.json b/rust-vendor/lazy_static/.cargo_vcs_info.json
new file mode 100644
index 0000000..8f4e11e
--- /dev/null
+++ b/rust-vendor/lazy_static/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "be7c1c43f264699f956b70ce8e29941bd1e61bde"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/lazy_static/Cargo.toml.orig b/rust-vendor/lazy_static/Cargo.toml.orig
new file mode 100644
index 0000000..3de0e4b
--- /dev/null
+++ b/rust-vendor/lazy_static/Cargo.toml.orig
@@ -0,0 +1,28 @@
+[package]
+name = "lazy_static"
+# NB: When modifying, also modify html_root_url in lib.rs
+version = "1.5.0"
+authors = ["Marvin Löbel <loebel.marvin@gmail.com>"]
+license = "MIT OR Apache-2.0"
+
+description = "A macro for declaring lazily evaluated statics in Rust."
+readme = "README.md"
+documentation = "https://docs.rs/lazy_static"
+
+repository = "https://github.com/rust-lang-nursery/lazy-static.rs"
+keywords = ["macro", "lazy", "static"]
+categories = [ "no-std", "rust-patterns", "memory-management" ]
+exclude = [".github"]
+
+[dependencies.spin]
+version = "0.9.8"
+default-features = false
+features = ["once"]
+optional = true
+
+[features]
+spin_no_std = ["spin"]
+
+[dev-dependencies]
+doc-comment = "0.3.1"
+trybuild = "1"
diff --git b/rust-vendor/libc/.cargo_vcs_info.json b/rust-vendor/libc/.cargo_vcs_info.json
new file mode 100644
index 0000000..e3d93c6
--- /dev/null
+++ b/rust-vendor/libc/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "e879ee90b6cd8f79b352d4d4d1f8ca05f94f2f53"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/libc/.editorconfig b/rust-vendor/libc/.editorconfig
new file mode 100644
index 0000000..155c990
--- /dev/null
+++ b/rust-vendor/libc/.editorconfig
@@ -0,0 +1,7 @@
+[*.sh]
+# See https://github.com/mvdan/sh/blob/master/cmd/shfmt/shfmt.1.scd#examples
+indent_style = space
+indent_size = 4
+
+switch_case_indent = true
+space_redirects = true
diff --git b/rust-vendor/libc/.git-blame-ignore-revs b/rust-vendor/libc/.git-blame-ignore-revs
new file mode 100644
index 0000000..d358a2c
--- /dev/null
+++ b/rust-vendor/libc/.git-blame-ignore-revs
@@ -0,0 +1,6 @@
+# Format macro bodies
+50f26e08e146b7e9c7d1af9614486eba327d1e31
+
+# Automated changes related to the 2021 edition upgrade
+643182f7da26cedb09349b8bb3735c2e58ba24e6
+108310db03e7db35ef48a902d9ce9a88ab8f9b77
diff --git b/rust-vendor/libc/.release-plz.toml b/rust-vendor/libc/.release-plz.toml
new file mode 100644
index 0000000..6442af5
--- /dev/null
+++ b/rust-vendor/libc/.release-plz.toml
@@ -0,0 +1,49 @@
+[workspace]
+git_release_name = "{{ version }}"
+git_tag_name = "{{ version }}"
+
+[changelog]
+body = """
+## [{{ version | trim_start_matches(pat="v") }}]\
+ {%- if release_link -%}\
+ ({{ release_link }})\
+ {% endif %} \
+ - {{ timestamp | date(format="%Y-%m-%d") }}
+{% for group, commits in commits | group_by(attribute="group") %}
+### {{ group | upper_first }}
+ {% for commit in commits %}
+ - {% if commit.scope -%}{{ commit.scope | upper_first }}: {% endif %}
+ {%- if commit.breaking %}[**breaking**] {% endif %}
+ {{- commit.message }}
+ {%- if commit.links %} ([{{ commit.links.1.text }}]({{ commit.links.1.href }})){% endif -%}
+ {% endfor %}
+{% endfor %}
+{%- if github -%}
+{% if github.contributors | filter(attribute="is_first_time", value=true) | length != 0 %}
+ ## New Contributors ❤️
+{% endif %}\
+{% for contributor in github.contributors | filter(attribute="is_first_time", value=true) %}
+ * @{{ contributor.username }} made their first contribution
+ {%- if contributor.pr_number %} in \
+ [#{{ contributor.pr_number }}]({{ self::remote_url() }}/pull/{{ contributor.pr_number }}) \
+ {%- endif %}
+{%- endfor -%}
+{%- endif %}
+"""
+
+commit_parsers = [
+ { message = '(?i)^(\w+: )?feat', group = "added" },
+ { message = '(?i)^(\w+: )?add', group = "added" },
+ { message = '(?i)^(\w+: )?change', group = "changed" },
+ { message = '(?i)^(\w+: )?cleanup', group = "cleanup" },
+ { message = '(?i)^(\w+: )?deprecate', group = "deprecated" },
+ { message = '(?i)^(\w+: )?remove', group = "removed" },
+ { message = '(?i)^(\w+: )?fix', group = "fixed" },
+ { message = '(?i)^(\w+: )?fix', group = "fixed" },
+ { message = '^.*', group = "other" },
+]
+
+link_parsers = [
+ # Extract backport patterns
+ { pattern = '\(backport <.*/(\d+)>\)', text = "#$1", href = "https://github.com/rust-lang/libc/pull/$1"}
+]
diff --git b/rust-vendor/libc/.rustfmt.toml b/rust-vendor/libc/.rustfmt.toml
new file mode 100644
index 0000000..42e6cff
--- /dev/null
+++ b/rust-vendor/libc/.rustfmt.toml
@@ -0,0 +1,6 @@
+edition = "2021"
+error_on_line_overflow = true
+group_imports = "StdExternalCrate"
+imports_granularity = "Module"
+# This crate gets large lists of reexports. Use vertical to reduce conflicts.
+imports_layout = "Vertical"
diff --git b/rust-vendor/libc/Cargo.toml.orig b/rust-vendor/libc/Cargo.toml.orig
new file mode 100644
index 0000000..7bb55b4
--- /dev/null
+++ b/rust-vendor/libc/Cargo.toml.orig
@@ -0,0 +1,218 @@
+[package]
+name = "libc"
+version = "0.2.182"
+keywords = ["libc", "ffi", "bindings", "operating", "system"]
+categories = ["external-ffi-bindings", "no-std", "os"]
+exclude = ["/ci/*", "/.github/*", "/.cirrus.yml", "/triagebot.toml", "cherry-pick-stable.sh"]
+description = "Raw FFI bindings to platform libraries like libc."
+authors = ["The Rust Project Developers"]
+edition = "2021"
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-lang/libc"
+rust-version = "1.63"
+
+[package.metadata.docs.rs]
+features = ["extra_traits"]
+default-target = "x86_64-unknown-linux-gnu"
+targets = [
+ # Note: Keep this in sync with ci/verify-build.py
+ #
+ # Tier 1
+ "aarch64-apple-darwin",
+ "aarch64-pc-windows-msvc",
+ "aarch64-unknown-linux-gnu",
+ "i686-pc-windows-msvc",
+ "i686-unknown-linux-gnu",
+ "x86_64-pc-windows-gnu",
+ "x86_64-pc-windows-msvc",
+ "x86_64-unknown-linux-gnu",
+ #
+ # Tier 2 with host tools
+ "aarch64-pc-windows-gnullvm",
+ "aarch64-unknown-linux-musl",
+ "aarch64-unknown-linux-ohos",
+ "arm-unknown-linux-gnueabi",
+ "arm-unknown-linux-gnueabihf",
+ "armv7-unknown-linux-gnueabihf",
+ "armv7-unknown-linux-ohos",
+ "i686-pc-windows-gnu",
+ "loongarch64-unknown-linux-gnu",
+ "loongarch64-unknown-linux-musl",
+ "powerpc-unknown-linux-gnu",
+ "powerpc64-unknown-linux-gnu",
+ "powerpc64le-unknown-linux-gnu",
+ "powerpc64le-unknown-linux-musl",
+ "riscv64gc-unknown-linux-gnu",
+ "s390x-unknown-linux-gnu",
+ "sparcv9-sun-solaris",
+ "x86_64-apple-darwin",
+ "x86_64-pc-solaris",
+ "x86_64-pc-windows-gnullvm",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-illumos",
+ "x86_64-unknown-linux-musl",
+ "x86_64-unknown-linux-ohos",
+ "x86_64-unknown-netbsd",
+ #
+ # Tier 2 without host tools
+ "aarch64-apple-ios",
+ "aarch64-apple-tvos",
+ "aarch64-apple-visionos",
+ "aarch64-apple-watchos",
+ "aarch64-linux-android",
+ "aarch64-unknown-fuchsia",
+ "arm-linux-androideabi",
+ "arm-unknown-linux-musleabi",
+ "arm-unknown-linux-musleabihf",
+ "arm64ec-pc-windows-msvc",
+ "armv5te-unknown-linux-gnueabi",
+ "armv5te-unknown-linux-musleabi",
+ "armv7-linux-androideabi",
+ "armv7-unknown-linux-musleabihf",
+ "i586-unknown-linux-gnu",
+ "i586-unknown-linux-musl",
+ "i686-linux-android",
+ "i686-unknown-freebsd",
+ "i686-unknown-linux-musl",
+ "nvptx64-nvidia-cuda",
+ "riscv64gc-unknown-linux-musl",
+ "sparc64-unknown-linux-gnu",
+ "thumbv7neon-linux-androideabi",
+ "thumbv7neon-unknown-linux-gnueabihf",
+ "wasm32-unknown-emscripten",
+ "wasm32-unknown-unknown",
+ "wasm32-wasip1",
+ "wasm32-wasip2",
+ "x86_64-fortanix-unknown-sgx",
+ "x86_64-linux-android",
+ "x86_64-unknown-fuchsia",
+ "x86_64-unknown-linux-gnux32",
+ "x86_64-unknown-redox",
+ #
+ # Tier 3 targets that are distinct enough to be useful, or have historically
+ # been documented.
+ "aarch64-unknown-freebsd",
+ "aarch64-unknown-hermit",
+ "aarch64-unknown-illumos",
+ "aarch64-unknown-netbsd",
+ "aarch64-unknown-nto-qnx800",
+ "aarch64-unknown-openbsd",
+ "aarch64-unknown-redox",
+ "aarch64-wrs-vxworks",
+ "aarch64_be-unknown-linux-gnu",
+ "aarch64_be-unknown-linux-musl",
+ "armebv7r-none-eabi",
+ "armebv7r-none-eabihf",
+ "armv7-linux-androideabi",
+ "armv7-wrs-vxworks-eabihf",
+ "armv7r-none-eabi",
+ "armv7r-none-eabihf",
+ "hexagon-unknown-linux-musl",
+ "i686-unknown-haiku",
+ "i686-unknown-netbsd",
+ "i686-unknown-openbsd",
+ "i686-wrs-vxworks",
+ "mips-unknown-linux-gnu",
+ "mips-unknown-linux-musl",
+ "mips64-unknown-linux-gnuabi64",
+ "mips64-unknown-linux-muslabi64",
+ "mips64el-unknown-linux-gnuabi64",
+ "mips64el-unknown-linux-muslabi64",
+ "mipsel-sony-psp",
+ "mipsel-unknown-linux-gnu",
+ "mipsel-unknown-linux-musl",
+ "powerpc-unknown-linux-gnuspe",
+ "powerpc-unknown-netbsd",
+ "powerpc-wrs-vxworks",
+ "powerpc-wrs-vxworks-spe",
+ "powerpc64-ibm-aix",
+ "powerpc64-unknown-freebsd",
+ "powerpc64-unknown-linux-gnu",
+ "powerpc64-unknown-linux-musl",
+ "powerpc64-wrs-vxworks",
+ "riscv32-wrs-vxworks",
+ "riscv32gc-unknown-linux-musl",
+ "riscv32i-unknown-none-elf",
+ "riscv32imac-unknown-none-elf",
+ "riscv32imc-unknown-none-elf",
+ "riscv64-wrs-vxworks",
+ "riscv64gc-unknown-freebsd",
+ "riscv64gc-unknown-hermit",
+ "riscv64gc-unknown-none-elf",
+ "riscv64imac-unknown-none-elf",
+ "s390x-unknown-linux-musl",
+ "sparc-unknown-linux-gnu",
+ "sparc64-unknown-netbsd",
+ "thumbv6m-none-eabi",
+ "thumbv7em-none-eabi",
+ "thumbv7em-none-eabihf",
+ "thumbv7m-none-eabi",
+ "wasm32-wasip3",
+ "x86_64-apple-ios",
+ "x86_64-pc-cygwin",
+ "x86_64-unknown-dragonfly",
+ "x86_64-unknown-haiku",
+ "x86_64-unknown-hermit",
+ "x86_64-unknown-hurd-gnu",
+ "x86_64-unknown-l4re-uclibc",
+ "x86_64-unknown-openbsd",
+ "x86_64-wrs-vxworks"
+]
+cargo-args = ["-Zbuild-std=core"]
+
+[dependencies]
+rustc-std-workspace-core = { version = "1.0.1", optional = true }
+
+[features]
+default = ["std"]
+std = []
+rustc-dep-of-std = ['align', 'rustc-std-workspace-core']
+extra_traits = []
+
+# `const-extern-function` is deprecated and no longer does anything
+const-extern-fn = []
+
+# `align` is deprecated and no longer does anything
+align = []
+
+# use_std is deprecated, use `std` instead
+use_std = ['std']
+
+[workspace]
+members = [
+ "ctest",
+ "libc-test",
+]
+
+# FIXME(msrv): These should be renamed as `[workspace.lints.*]` once MSRV is above 1.64
+# This way all crates can use it with `[lints] workspace=true` section
+
+[lints.rust]
+# FIXME(cleanup): make ident usage consistent in each file
+unused_qualifications = "allow"
+
+[lints.clippy]
+# Enable pedantic lints - use this manually once in a while, but don't enable by default
+# pedantic = { level = "warn", priority = -1 }
+
+# We are okay with the current state of these lints
+explicit_iter_loop = "warn"
+identity_op = "allow" # some expressions like `0 | x` are clearer for bit ops
+manual_assert = "warn"
+map_unwrap_or = "warn"
+missing_safety_doc = "allow" # safety? in libc? seriously?
+non_minimal_cfg = "allow" # for some reason cfg_if! sometimes trigger this
+ptr_as_ptr = "warn"
+unnecessary_semicolon = "warn"
+
+# FIXME(clippy): these should be fixed if possible
+expl_impl_clone_on_copy = "allow"
+uninlined_format_args = "allow"
+unnecessary_cast = "allow" # some casts like `as usize` are only needed for some targets
+used_underscore_binding = "allow"
+
+[package.metadata.cargo-semver-checks.lints]
+# Alignment is an internal detail that users must not rely upon
+repr_align_removed = "warn"
+# We deprecate things all the time
+global_value_marked_deprecated = "warn"
diff --git b/rust-vendor/libloading/.cargo_vcs_info.json b/rust-vendor/libloading/.cargo_vcs_info.json
new file mode 100644
index 0000000..a5ed371
--- /dev/null
+++ b/rust-vendor/libloading/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f4ec9e702de2d0778bccff8525dc44e4cacac2d1"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/libloading/.github/workflows/libloading.yml b/rust-vendor/libloading/.github/workflows/libloading.yml
new file mode 100644
index 0000000..817d1df
--- /dev/null
+++ b/rust-vendor/libloading/.github/workflows/libloading.yml
@@ -0,0 +1,126 @@
+concurrency:
+ group: ${{ github.workflow }}-${{ github.ref }}
+ cancel-in-progress: true
+
+on:
+ push:
+ branches: [master]
+ paths-ignore: ['*.mkd', 'LICENSE']
+ pull_request:
+ types: [opened, reopened, synchronize]
+
+jobs:
+ native-test:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ rust_toolchain: [nightly, stable, 1.71.0]
+ os: [ubuntu-latest, windows-latest, macOS-latest]
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v2
+ - run: rustup install ${{ matrix.rust_toolchain }} --profile=minimal
+ - run: rustup default ${{ matrix.rust_toolchain }}
+ - run: rustup component add clippy
+ - run: cargo update -p libc --precise 0.2.155
+ if: ${{ matrix.rust_toolchain == '1.71.0' }}
+ - run: cargo clippy
+ - run: cargo test -- --nocapture
+ - run: cargo test --release -- --nocapture
+ - run: cargo rustdoc -Zunstable-options --config 'build.rustdocflags=["--cfg", "libloading_docs", "-D", "rustdoc::broken_intra_doc_links"]'
+ if: ${{ matrix.rust_toolchain == 'nightly' }}
+ # pwsh.exe drops quotes kekw. https://stackoverflow.com/a/59036879
+ shell: bash
+
+ windows-test:
+ runs-on: windows-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust_toolchain: [nightly, stable]
+ rust_target:
+ - x86_64-pc-windows-gnullvm
+ - i686-pc-windows-gnu
+ include:
+ - rust_target: x86_64-pc-windows-gnullvm
+ mingw_path: C:/msys64/clang64/bin
+ package: mingw-w64-clang-x86_64-clang
+ - rust_target: i686-pc-windows-gnu
+ mingw_path: C:/msys64/mingw32/bin
+ package: mingw-w64-i686-gcc
+ steps:
+ - uses: actions/checkout@v2
+ - run: rustup install ${{ matrix.rust_toolchain }} --profile=minimal
+ - run: rustup default ${{ matrix.rust_toolchain }}
+ - run: rustup target add ${{ matrix.rust_target }}
+ - uses: msys2/setup-msys2@v2
+ with:
+ release: false
+ install: ${{ matrix.package }}
+ - run: echo "${{ matrix.mingw_path }}" | Out-File -FilePath $env:GITHUB_PATH -Append
+ if: ${{ matrix.mingw_path }}"
+ - run: cargo test --target ${{ matrix.rust_target }}
+ env:
+ TARGET: ${{ matrix.rust_target}}
+
+ msys2-test:
+ runs-on: windows-latest
+ strategy:
+ fail-fast: false
+ steps:
+ - uses: actions/checkout@v2
+ - run: rustup install nightly --profile=minimal
+ - run: rustup default nightly
+ - run: rustup component add rust-src
+ - uses: msys2/setup-msys2@v2
+ with:
+ release: false
+ install: gcc
+ - run: echo "INPUT(libmsys-2.0.a)" | Out-File -FilePath "C:\msys64\usr\lib\libcygwin.a"
+ - run: |
+ $env:PATH = "C:\msys64\usr\bin\;$env:PATH"
+ cargo test --target x86_64-pc-cygwin -Zbuild-std
+ env:
+ CARGO_TARGET_X86_64_PC_CYGWIN_LINKER: x86_64-pc-cygwin-gcc.exe
+
+ bare-cross-build:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust_toolchain: [nightly]
+ rust_target:
+ # BSDs: could be tested with full system emulation
+ # - x86_64-unknown-dragonfly
+ # - x86_64-unknown-freebsd
+ - x86_64-unknown-haiku
+ # - x86_64-unknown-netbsd
+ - x86_64-unknown-openbsd
+ - x86_64-unknown-redox
+ - x86_64-unknown-fuchsia
+ - wasm32-unknown-unknown
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v2
+ - run: rustup install ${{ matrix.rust_toolchain }} --profile=minimal
+ - run: rustup default ${{ matrix.rust_toolchain }}
+ - run: rustup component add rust-src --toolchain nightly --target ${{ matrix.rust_target }}
+ - run: cargo build --target ${{ matrix.rust_target }} -Zbuild-std
+
+ cross-ios-build:
+ runs-on: macos-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust_toolchain: [nightly, stable]
+ rust_target:
+ - aarch64-apple-ios
+ - x86_64-apple-ios
+ timeout-minutes: 20
+ steps:
+ - uses: actions/checkout@v2
+ - run: rustup install ${{ matrix.rust_toolchain }} --profile=minimal
+ - run: rustup default ${{ matrix.rust_toolchain }}
+ - run: rustup target add ${{ matrix.rust_target }}
+ - run: cargo build --target=${{ matrix.rust_target }}
diff --git b/rust-vendor/libloading/Cargo.toml.orig b/rust-vendor/libloading/Cargo.toml.orig
new file mode 100644
index 0000000..9276fd6
--- /dev/null
+++ b/rust-vendor/libloading/Cargo.toml.orig
@@ -0,0 +1,40 @@
+[package]
+name = "libloading"
+# When bumping
+# * Don’t forget to add an entry to `src/changelog.rs`
+# * If bumping to an incompatible version, adjust the documentation in `src/lib.rs`
+version = "0.8.9"
+authors = ["Simonas Kazlauskas <libloading@kazlauskas.me>"]
+license = "ISC"
+repository = "https://github.com/nagisa/rust_libloading/"
+documentation = "https://docs.rs/libloading/"
+readme = "README.mkd"
+description = "Bindings around the platform's dynamic library loading primitives with greatly improved memory safety."
+keywords = ["dlopen", "load", "shared", "dylib"]
+categories = ["api-bindings"]
+rust-version = "1.71.0"
+edition = "2015"
+
+[target.'cfg(windows)'.dependencies.windows-link]
+version = "0.2"
+
+[target.'cfg(windows)'.dev-dependencies.windows-sys]
+version = "0.61"
+features = ["Win32_Foundation"]
+
+[target.'cfg(unix)'.dependencies.cfg-if]
+version = "1"
+
+[dev-dependencies]
+libc = "0.2"
+static_assertions = "1.1"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "libloading_docs"]
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = [
+ 'cfg(libloading_docs)',
+ 'cfg(target_os, values("cygwin"))',
+] }
diff --git b/rust-vendor/libm/.cargo_vcs_info.json b/rust-vendor/libm/.cargo_vcs_info.json
new file mode 100644
index 0000000..0ce5125
--- /dev/null
+++ b/rust-vendor/libm/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "dfd2203a4d6110820ad7bb65cafe1bf331a03a3d"
+ },
+ "path_in_vcs": "libm"
+}
\ No newline at end of file
diff --git b/rust-vendor/libm/Cargo.toml.orig b/rust-vendor/libm/Cargo.toml.orig
new file mode 100644
index 0000000..4d8b9bf
--- /dev/null
+++ b/rust-vendor/libm/Cargo.toml.orig
@@ -0,0 +1,52 @@
+[package]
+name = "libm"
+version = "0.2.16"
+authors = [
+ "Alex Crichton <alex@alexcrichton.com>",
+ "Amanieu d'Antras <amanieu@gmail.com>",
+ "Jorge Aparicio <japaricious@gmail.com>",
+ "Trevor Gross <tg@trevorgross.com>",
+]
+description = "libm in pure Rust"
+categories = ["no-std"]
+keywords = ["libm", "math"]
+repository = "https://github.com/rust-lang/compiler-builtins"
+license = "MIT"
+edition = "2021"
+rust-version = "1.63"
+
+[features]
+default = ["arch"]
+
+# Enable architecture-specific features such as SIMD or assembly routines.
+arch = []
+
+# This tells the compiler to assume that a Nightly toolchain is being used and
+# that it should activate any useful Nightly things accordingly.
+unstable = ["unstable-intrinsics", "unstable-float"]
+
+# Enable calls to functions in `core::intrinsics`
+unstable-intrinsics = []
+
+# Make some internal things public for testing.
+unstable-public-internals = []
+
+# Enable the nightly-only `f16` and `f128`.
+unstable-float = []
+
+# Used to prevent using any intrinsics or arch-specific code.
+#
+# HACK: this is a negative feature which is generally a bad idea in Cargo, but
+# we need it to be able to forbid other features when this crate is used in
+# Rust dependencies. Setting this overrides all features that may enable
+# hard float operations.
+force-soft-floats = []
+
+[dev-dependencies]
+no-panic = "0.1.35"
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = [
+ # compiler-builtins sets this feature, but we use it in `libm`
+ 'cfg(feature, values("compiler-builtins"))',
+] }
diff --git b/rust-vendor/linux-raw-sys/.cargo_vcs_info.json b/rust-vendor/linux-raw-sys/.cargo_vcs_info.json
new file mode 100644
index 0000000..fca3b04
--- /dev/null
+++ b/rust-vendor/linux-raw-sys/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "0e2918cf3e366d9c923d4ca05f169b49d826db56"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/linux-raw-sys/Cargo.toml.orig b/rust-vendor/linux-raw-sys/Cargo.toml.orig
new file mode 100644
index 0000000..830fe68
--- /dev/null
+++ b/rust-vendor/linux-raw-sys/Cargo.toml.orig
@@ -0,0 +1,61 @@
+[package]
+name = "linux-raw-sys"
+version = "0.12.1"
+authors = ["Dan Gohman <dev@sunfishcode.online>"]
+description = "Generated bindings for Linux's userspace API"
+documentation = "https://docs.rs/linux-raw-sys"
+license = "Apache-2.0 WITH LLVM-exception OR Apache-2.0 OR MIT"
+repository = "https://github.com/sunfishcode/linux-raw-sys"
+edition = "2021"
+keywords = ["linux", "uapi", "ffi"]
+categories = ["external-ffi-bindings"]
+exclude = ["/gen", "/.*"]
+rust-version = "1.63"
+
+[dependencies]
+core = { version = "1.0.0", optional = true, package = "rustc-std-workspace-core" }
+
+[dev-dependencies]
+static_assertions = "1.1.0"
+libc = "0.2.100"
+
+[package.metadata.docs.rs]
+features = ["default", "bootparam", "btrfs", "elf_uapi", "image", "ioctl", "landlock", "netlink", "io_uring", "if_arp", "if_ether", "if_packet", "net", "ptrace", "prctl", "elf", "xdp", "mempolicy", "system", "loop_device"]
+targets = ["x86_64-unknown-linux-gnu", "i686-unknown-linux-gnu"]
+
+[lints.rust.unexpected_cfgs]
+level = "warn"
+check-cfg = [
+ 'cfg(target_arch, values("xtensa"))',
+]
+
+# The rest of this file is auto-generated!
+[features]
+auxvec = []
+bootparam = []
+btrfs = []
+elf_uapi = []
+errno = []
+general = []
+if_arp = []
+if_ether = []
+if_packet = []
+if_tun = []
+image = []
+io_uring = []
+ioctl = []
+landlock = []
+loop_device = []
+mempolicy = []
+net = []
+netlink = []
+prctl = []
+ptrace = []
+system = []
+vm_sockets = []
+xdp = []
+default = ["std", "general", "errno"]
+std = []
+no_std = []
+elf = []
+rustc-dep-of-std = ["core", "no_std"]
diff --git b/rust-vendor/litemap/.cargo_vcs_info.json b/rust-vendor/litemap/.cargo_vcs_info.json
new file mode 100644
index 0000000..de7b369
--- /dev/null
+++ b/rust-vendor/litemap/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "29dfe2790b6cfdab94ca6a6b69f58ce54802dbf7"
+ },
+ "path_in_vcs": "utils/litemap"
+}
\ No newline at end of file
diff --git b/rust-vendor/litemap/Cargo.toml.orig b/rust-vendor/litemap/Cargo.toml.orig
new file mode 100644
index 0000000..44a1318
--- /dev/null
+++ b/rust-vendor/litemap/Cargo.toml.orig
@@ -0,0 +1,77 @@
+# This file is part of ICU4X. For terms of use, please see the file
+# called LICENSE at the top level of the ICU4X source tree
+# (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
+
+[package]
+name = "litemap"
+version = "0.8.1"
+keywords = ["sorted", "vec", "map", "hashmap", "btreemap"]
+description = "A key-value Map implementation based on a flat, sorted Vec."
+documentation = "https://docs.rs/litemap"
+
+authors.workspace = true
+edition.workspace = true
+include.workspace = true
+license.workspace = true
+repository.workspace = true
+rust-version = "1.82"
+
+[package.metadata.workspaces]
+independent = true
+
+[package.metadata.docs.rs]
+all-features = true
+
+[dependencies]
+databake = { workspace = true, optional = true }
+serde_core = { workspace = true, optional = true, features = ["alloc"]}
+yoke = { workspace = true, features = ["derive"], optional = true }
+
+[dev-dependencies]
+rand = { workspace = true }
+bincode = { workspace = true }
+icu_benchmark_macros = { path = "../../tools/benchmark/macros" }
+icu_locale_core = { path = "../../components/locale_core" }
+postcard = { workspace = true, features = ["use-std"] }
+rkyv = { workspace = true, features = ["validation"] }
+serde_core = { workspace = true }
+serde_json = { workspace = true }
+
+[target.'cfg(not(target_arch = "wasm32"))'.dev-dependencies]
+criterion = { workspace = true }
+
+[features]
+default = ["alloc"]
+alloc = []
+databake = ["dep:databake"]
+serde = ["dep:serde_core", "alloc"]
+yoke = ["dep:yoke"]
+
+# Enables the `testing` module with tools for testing custom stores.
+testing = ["alloc"]
+
+[lib]
+bench = false # This option is required for Benchmark CI
+
+[[test]]
+name = "serde"
+required-features = ["serde"]
+
+[[test]]
+name = "store"
+required-features = ["testing"]
+
+[[example]]
+name = "litemap_bincode"
+path = "examples/litemap_bincode.rs"
+required-features = ["serde"]
+
+[[example]]
+name = "litemap_postcard"
+path = "examples/litemap_postcard.rs"
+required-features = ["serde"]
+
+[[bench]]
+name = "litemap"
+harness = false
+required-features = ["serde"]
diff --git b/rust-vendor/litrs/.cargo_vcs_info.json b/rust-vendor/litrs/.cargo_vcs_info.json
new file mode 100644
index 0000000..c7958b7
--- /dev/null
+++ b/rust-vendor/litrs/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "66ceed89adfd30d1fd04fabfdfe436aedc4cadbf"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/litrs/Cargo.toml.orig b/rust-vendor/litrs/Cargo.toml.orig
new file mode 100644
index 0000000..624633c
--- /dev/null
+++ b/rust-vendor/litrs/Cargo.toml.orig
@@ -0,0 +1,36 @@
+[package]
+name = "litrs"
+version = "1.0.0"
+authors = ["Lukas Kalbertodt <lukas.kalbertodt@gmail.com>"]
+edition = "2021"
+rust-version = "1.56"
+
+description = """
+Parse and inspect Rust literals (i.e. tokens in the Rust programming language
+representing fixed values). Particularly useful for proc macros, but can also
+be used outside of a proc-macro context.
+"""
+documentation = "https://docs.rs/litrs"
+repository = "https://github.com/LukasKalbertodt/litrs"
+readme = "README.md"
+license = "MIT OR Apache-2.0"
+
+keywords = ["literal", "parsing", "proc-macro", "type", "procedural"]
+categories = [
+ "development-tools::procedural-macro-helpers",
+ "parser-implementations",
+ "development-tools::build-utils",
+]
+exclude = [".github"]
+
+
+[features]
+check_suffix = ["unicode-xid"]
+
+[dependencies]
+proc-macro2 = { version = "1.0.63", optional = true }
+unicode-xid = { version = "0.2.4", optional = true }
+
+
+[package.metadata.docs.rs]
+features = ["proc-macro2"]
diff --git b/rust-vendor/lock_api/.cargo_vcs_info.json b/rust-vendor/lock_api/.cargo_vcs_info.json
new file mode 100644
index 0000000..c098f6f
--- /dev/null
+++ b/rust-vendor/lock_api/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d7828fff7b5d6327ae608e82db45f888b344449a"
+ },
+ "path_in_vcs": "lock_api"
+}
\ No newline at end of file
diff --git b/rust-vendor/lock_api/Cargo.toml.orig b/rust-vendor/lock_api/Cargo.toml.orig
new file mode 100644
index 0000000..3cdc25b
--- /dev/null
+++ b/rust-vendor/lock_api/Cargo.toml.orig
@@ -0,0 +1,30 @@
+[package]
+name = "lock_api"
+version = "0.4.14"
+authors = ["Amanieu d'Antras <amanieu@gmail.com>"]
+description = "Wrappers to create fully-featured Mutex and RwLock types. Compatible with no_std."
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/Amanieu/parking_lot"
+keywords = ["mutex", "rwlock", "lock", "no_std"]
+categories = ["concurrency", "no-std"]
+edition = "2021"
+rust-version = "1.71.0"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
+
+[dependencies]
+scopeguard = { version = "1.1.0", default-features = false }
+owning_ref = { version = "0.4.1", optional = true }
+
+# Optional dependency for supporting serde. Optional crates automatically
+# create a feature with the same name as the crate, so if you need serde
+# support, just pass "--features serde" when building this crate.
+serde = { version = "1.0.126", default-features = false, optional = true }
+
+[features]
+default = ["atomic_usize"]
+nightly = []
+arc_lock = []
+atomic_usize = []
diff --git b/rust-vendor/log/.cargo_vcs_info.json b/rust-vendor/log/.cargo_vcs_info.json
new file mode 100644
index 0000000..7cbf962
--- /dev/null
+++ b/rust-vendor/log/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "b1e2df7bce7a1b685aa9bfd1db0a5cac1f0fc27d"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/log/.github/workflows/main.yml b/rust-vendor/log/.github/workflows/main.yml
new file mode 100644
index 0000000..249cc08
--- /dev/null
+++ b/rust-vendor/log/.github/workflows/main.yml
@@ -0,0 +1,117 @@
+name: CI
+on: [push, pull_request]
+
+# Ensure only read permission is granted
+permissions:
+ contents: read
+
+jobs:
+ test:
+ name: Test
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ include:
+ - build: stable
+ os: ubuntu-latest
+ rust: stable
+ - build: beta
+ os: ubuntu-latest
+ rust: beta
+ - build: nightly
+ os: ubuntu-latest
+ rust: nightly
+ - build: macos
+ os: macos-latest
+ rust: stable
+ - build: win32
+ os: windows-latest
+ rust: stable-i686-pc-windows-msvc
+ - build: win64
+ os: windows-latest
+ rust: stable-x86_64-pc-windows-msvc
+ - build: mingw
+ os: windows-latest
+ rust: stable-x86_64-pc-windows-gnu
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - uses: taiki-e/install-action@cargo-hack
+ - run: cargo hack test --feature-powerset --exclude-features max_level_off,max_level_error,max_level_warn,max_level_info,max_level_debug,max_level_trace,release_max_level_off,release_max_level_error,release_max_level_warn,release_max_level_info,release_max_level_debug,release_max_level_trace
+ - run: cargo run --verbose --manifest-path test_max_level_features/Cargo.toml
+ - run: cargo run --verbose --manifest-path test_max_level_features/Cargo.toml --release
+
+ check:
+ name: Check Format and Clippy
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ components: clippy
+ - run: cargo fmt -- --check
+ - run: cargo fmt --manifest-path test_max_level_features/Cargo.toml -- --check
+ - run: cargo clippy --verbose
+ - run: cargo clippy --verbose --manifest-path test_max_level_features/Cargo.toml
+
+ doc:
+ name: Check Documentation
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - name: Run rustdoc
+ env:
+ RUSTDOCFLAGS: "-D warnings"
+ run: cargo doc --verbose --features std,kv,kv_std,kv_sval,kv_serde
+
+ features:
+ name: Feature check
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@nightly
+ - run: cargo build --verbose -Z avoid-dev-deps --features kv
+ - run: cargo build --verbose -Z avoid-dev-deps --features "kv std"
+ - run: cargo build --verbose -Z avoid-dev-deps --features "kv kv_sval"
+ - run: cargo build --verbose -Z avoid-dev-deps --features "kv kv_serde"
+ - run: cargo build --verbose -Z avoid-dev-deps --features "kv kv_std"
+ - run: cargo build --verbose -Z avoid-dev-deps --features "kv kv_sval kv_serde"
+
+ minimalv:
+ name: Minimal versions
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@nightly
+ - run: cargo build --verbose -Z minimal-versions --features kv
+ - run: cargo build --verbose -Z minimal-versions --features "kv std"
+ - run: cargo build --verbose -Z minimal-versions --features "kv kv_sval"
+ - run: cargo build --verbose -Z minimal-versions --features "kv kv_serde"
+ - run: cargo build --verbose -Z minimal-versions --features "kv kv_std"
+ - run: cargo build --verbose -Z minimal-versions --features "kv kv_sval kv_serde"
+
+ msrv:
+ name: MSRV
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@1.68.0
+ with:
+ components: clippy
+ - uses: taiki-e/install-action@cargo-hack
+ - run: cargo hack test --feature-powerset --exclude-features max_level_off,max_level_error,max_level_warn,max_level_info,max_level_debug,max_level_trace,release_max_level_off,release_max_level_error,release_max_level_warn,release_max_level_info,release_max_level_debug,release_max_level_trace
+ - run: cargo run --verbose --manifest-path test_max_level_features/Cargo.toml
+ - run: cargo run --verbose --manifest-path test_max_level_features/Cargo.toml --release
+
+ embedded:
+ name: Embedded
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@stable
+ - run: rustup target add thumbv6m-none-eabi riscv32imc-unknown-none-elf
+ - run: cargo build --verbose --target=thumbv6m-none-eabi
+ - run: cargo build --verbose --target=riscv32imc-unknown-none-elf
diff --git b/rust-vendor/log/Cargo.toml.orig b/rust-vendor/log/Cargo.toml.orig
new file mode 100644
index 0000000..964b887
--- /dev/null
+++ b/rust-vendor/log/Cargo.toml.orig
@@ -0,0 +1,76 @@
+[package]
+
+name = "log"
+version = "0.4.29" # remember to update html_root_url
+authors = ["The Rust Project Developers"]
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+repository = "https://github.com/rust-lang/log"
+documentation = "https://docs.rs/log"
+description = """
+A lightweight logging facade for Rust
+"""
+categories = ["development-tools::debugging"]
+keywords = ["logging"]
+exclude = ["rfcs/**/*"]
+rust-version = "1.68.0"
+edition = "2021"
+
+[package.metadata.docs.rs]
+features = ["std", "serde", "kv_std", "kv_sval", "kv_serde"]
+
+[features]
+max_level_off = []
+max_level_error = []
+max_level_warn = []
+max_level_info = []
+max_level_debug = []
+max_level_trace = []
+
+release_max_level_off = []
+release_max_level_error = []
+release_max_level_warn = []
+release_max_level_info = []
+release_max_level_debug = []
+release_max_level_trace = []
+
+std = []
+
+kv = []
+kv_sval = ["kv", "value-bag/sval", "sval", "sval_ref"]
+kv_std = ["std", "kv", "value-bag/error"]
+kv_serde = ["kv_std", "value-bag/serde", "serde"]
+
+# This is here to not break backwards compatibility with the implicit feature
+# that enables support for serde based on the dependency name. Since we're now
+# using serde_core, the implicit feature was renamed, this adds back an alias.
+serde = ["serde_core"]
+
+# Deprecated: use `kv_*` instead
+# These `*_unstable` features will be removed in a future release
+kv_unstable = ["kv", "value-bag"]
+kv_unstable_sval = ["kv_sval", "kv_unstable"]
+kv_unstable_std = ["kv_std", "kv_unstable"]
+kv_unstable_serde = ["kv_serde", "kv_unstable_std"]
+
+[dependencies]
+serde_core = { version = "1.0", optional = true, default-features = false }
+sval = { version = "2.16", optional = true, default-features = false }
+sval_ref = { version = "2.16", optional = true, default-features = false }
+value-bag = { version = "1.12", optional = true, default-features = false, features = ["inline-i128"] }
+
+[dev-dependencies]
+serde = { version = "1.0", features = ["derive"] }
+serde_json = { version = "1.0" }
+serde_test = { version = "1.0" }
+sval = { version = "2.16" }
+sval_derive = { version = "2.16" }
+value-bag = { version = "1.12", features = ["test"] }
+
+# NOTE: log doesn't actually depend on this crate. However, our dependencies,
+# serde and sval, dependent on version 1.0 of the crate, which has problem fixed
+# in 1.0.60, specifically in the following commit
+# https://github.com/dtolnay/proc-macro2/commit/e31d61910049e097afdd3d27c37786309082bdcb.
+# By defining the crate as direct dependency we can increase its minimal
+# version making the minimal (crate) version CI happy.
+proc-macro2 = { version = "1.0.63", default-features = false }
diff --git b/rust-vendor/lru/.cargo_vcs_info.json b/rust-vendor/lru/.cargo_vcs_info.json
new file mode 100644
index 0000000..1233c1e
--- /dev/null
+++ b/rust-vendor/lru/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "af233e5c36a6b1be65e1c6d67ebf9601a71150fb"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/lru/.github/workflows/main.yml b/rust-vendor/lru/.github/workflows/main.yml
new file mode 100644
index 0000000..7dc31a8
--- /dev/null
+++ b/rust-vendor/lru/.github/workflows/main.yml
@@ -0,0 +1,48 @@
+on:
+ pull_request:
+ push:
+ branches:
+ - master
+
+name: CI
+
+# Adapted from recipe: https://github.com/actions-rs/meta/blob/master/recipes/matrix.md#workflow.
+jobs:
+ ci:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ - beta
+ - nightly
+ - 1.70.0 # MSRV
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: ${{ matrix.rust }}
+ override: true
+ components: rustfmt, clippy
+
+ - uses: actions-rs/cargo@v1
+ with:
+ command: build
+
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+
+ - uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --all -- --check
+
+ - uses: actions-rs/cargo@v1
+ with:
+ command: clippy
+ # clippy::needless_lifetimes suggest unsound code in this crate
+ args: -- -D warnings -A clippy::needless_lifetimes
diff --git b/rust-vendor/lru/Cargo.toml.orig b/rust-vendor/lru/Cargo.toml.orig
new file mode 100644
index 0000000..953e21c
--- /dev/null
+++ b/rust-vendor/lru/Cargo.toml.orig
@@ -0,0 +1,24 @@
+[package]
+name = "lru"
+version = "0.16.3"
+authors = ["Jerome Froelich <jeromefroelic@hotmail.com>"]
+rust-version = "1.70.0"
+categories = ["caching", "no-std"]
+description = "A LRU cache implementation"
+homepage = "https://github.com/jeromefroe/lru-rs"
+repository = "https://github.com/jeromefroe/lru-rs.git"
+documentation = "https://docs.rs/lru/"
+readme = "README.md"
+license = "MIT"
+keywords = ["LRU", "cache"]
+
+[features]
+default = ["hashbrown"]
+nightly = ["hashbrown", "hashbrown/nightly"]
+
+[dependencies]
+hashbrown = { version = "0.16.0", optional = true }
+
+[dev-dependencies]
+scoped_threadpool = "0.1.*"
+stats_alloc = "0.1.*"
diff --git b/rust-vendor/lscolors/.cargo_vcs_info.json b/rust-vendor/lscolors/.cargo_vcs_info.json
new file mode 100644
index 0000000..0d55d32
--- /dev/null
+++ b/rust-vendor/lscolors/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d080abd329c166556118c17c50bac9fceb792709"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/lscolors/.github/workflows/CICD.yml b/rust-vendor/lscolors/.github/workflows/CICD.yml
new file mode 100644
index 0000000..1d6fab0
--- /dev/null
+++ b/rust-vendor/lscolors/.github/workflows/CICD.yml
@@ -0,0 +1,346 @@
+name: CICD
+
+env:
+ CICD_INTERMEDIATES_DIR: "_cicd-intermediates"
+ MSRV_FEATURES: ""
+
+on:
+ workflow_dispatch:
+ pull_request:
+ push:
+ branches:
+ - master
+ tags:
+ - '*'
+
+jobs:
+ crate_metadata:
+ name: Extract crate metadata
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - name: Extract crate information
+ id: crate_metadata
+ run: |
+ cargo metadata --no-deps --format-version 1 | jq -r '"name=" + .packages[0].name' | tee -a $GITHUB_OUTPUT
+ cargo metadata --no-deps --format-version 1 | jq -r '"version=" + .packages[0].version' | tee -a $GITHUB_OUTPUT
+ cargo metadata --no-deps --format-version 1 | jq -r '"maintainer=" + .packages[0].authors[0]' | tee -a $GITHUB_OUTPUT
+ cargo metadata --no-deps --format-version 1 | jq -r '"homepage=" + .packages[0].homepage' | tee -a $GITHUB_OUTPUT
+ cargo metadata --no-deps --format-version 1 | jq -r '"msrv=" + .packages[0].rust_version' | tee -a $GITHUB_OUTPUT
+ outputs:
+ name: ${{ steps.crate_metadata.outputs.name }}
+ version: ${{ steps.crate_metadata.outputs.version }}
+ maintainer: ${{ steps.crate_metadata.outputs.maintainer }}
+ homepage: ${{ steps.crate_metadata.outputs.homepage }}
+ msrv: ${{ steps.crate_metadata.outputs.msrv }}
+
+ ensure_cargo_fmt:
+ name: Ensure 'cargo fmt' has been run
+ runs-on: ubuntu-latest
+ steps:
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ components: rustfmt
+ - uses: actions/checkout@v4
+ - run: cargo fmt -- --check
+
+ min_version:
+ name: Minimum supported rust version
+ runs-on: ubuntu-latest
+ needs: crate_metadata
+ steps:
+ - name: Checkout source code
+ uses: actions/checkout@v4
+
+ - name: Install rust toolchain (v${{ needs.crate_metadata.outputs.msrv }})
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ needs.crate_metadata.outputs.msrv }}
+ components: clippy
+ - name: Run clippy (on minimum supported rust version to prevent warnings we can't fix)
+ run: |
+ cargo clippy --all-targets --features=gnu_legacy
+ cargo clippy --all-targets --features=crossterm,ansi_term,nu-ansi-term
+ - name: Run tests
+ run: |
+ cargo test --features=gnu_legacy
+ cargo test --features=crossterm,ansi_term,nu-ansi-term
+
+ documentation:
+ name: Documentation
+ runs-on: ubuntu-latest
+ steps:
+ - name: Git checkout
+ uses: actions/checkout@v4
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable
+ - name: Check documentation
+ env:
+ RUSTDOCFLAGS: -D warnings
+ run: |
+ cargo doc --no-deps --document-private-items --features=gnu_legacy
+ cargo doc --no-deps --document-private-items --features=crossterm,ansi_term,nu-ansi-term
+
+ build:
+ name: ${{ matrix.job.target }} (${{ matrix.job.os }} with ${{ matrix.terminal }})
+ runs-on: ${{ matrix.job.os }}
+ needs: crate_metadata
+ strategy:
+ fail-fast: false
+ matrix:
+ job:
+ - { target: aarch64-unknown-linux-gnu , os: ubuntu-latest, use-cross: true }
+ - { target: arm-unknown-linux-gnueabihf , os: ubuntu-latest, use-cross: true }
+ - { target: arm-unknown-linux-musleabihf, os: ubuntu-latest, use-cross: true }
+ - { target: i686-pc-windows-msvc , os: windows-latest }
+ - { target: i686-unknown-linux-gnu , os: ubuntu-latest, use-cross: true }
+ - { target: i686-unknown-linux-musl , os: ubuntu-latest, use-cross: true }
+ - { target: x86_64-apple-darwin , os: macos-latest }
+ - { target: x86_64-pc-windows-gnu , os: windows-latest }
+ - { target: x86_64-pc-windows-msvc , os: windows-latest }
+ - { target: x86_64-unknown-linux-gnu , os: ubuntu-latest, use-cross: true }
+ - { target: x86_64-unknown-linux-musl , os: ubuntu-latest, use-cross: true }
+ terminal:
+ - ansi_term
+ - crossterm
+ - nu-ansi-term
+ - gnu_legacy
+ env:
+ BUILD_CMD: cargo
+ steps:
+ - name: Checkout source code
+ uses: actions/checkout@v4
+
+ - name: Install prerequisites
+ shell: bash
+ run: |
+ case ${{ matrix.job.target }} in
+ arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;;
+ aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;;
+ esac
+
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.job.target }}
+
+ - name: Install cross
+ if: matrix.job.use-cross
+ uses: taiki-e/install-action@v2
+ with:
+ tool: cross
+
+ - name: Overwrite build command env variable
+ if: matrix.job.use-cross
+ shell: bash
+ run: echo "BUILD_CMD=cross" >> $GITHUB_ENV
+
+ - name: Show version information (Rust, cargo, GCC)
+ shell: bash
+ run: |
+ gcc --version || true
+ rustup -V
+ rustup toolchain list
+ rustup default
+ cargo -V
+ rustc -V
+
+ - name: Build
+ shell: bash
+ run: $BUILD_CMD build --release --target=${{ matrix.job.target }} --features=${{ matrix.terminal }}
+
+ - name: Set binary name & path
+ id: bin
+ shell: bash
+ run: |
+ # Figure out suffix of binary
+ EXE_suffix=""
+ case ${{ matrix.job.target }} in
+ *-pc-windows-*) EXE_suffix=".exe" ;;
+ esac;
+
+ # Setup paths
+ BIN_NAME="${{ needs.crate_metadata.outputs.name }}${EXE_suffix}"
+ BIN_PATH="target/${{ matrix.job.target }}/release/${BIN_NAME}"
+
+ # Let subsequent steps know where to find the binary
+ echo "BIN_PATH=${BIN_PATH}" >> $GITHUB_OUTPUT
+ echo "BIN_NAME=${BIN_NAME}" >> $GITHUB_OUTPUT
+
+ - name: Run tests for all other targets
+ shell: bash
+ if: ${{ !startsWith(matrix.job.target, 'a') }}
+ run: $BUILD_CMD test --target=${{ matrix.job.target }} --features=${{ matrix.terminal }} --lib --bin ${{ needs.crate_metadata.outputs.name }}
+
+ - name: Run tests for arm and aarch64
+ shell: bash
+ if: startsWith(matrix.job.target, 'a')
+ run: $BUILD_CMD test --target=${{ matrix.job.target }} --features=${{ matrix.terminal }} --lib --bin ${{ needs.crate_metadata.outputs.name }}
+
+ - name: Run lscolors
+ shell: bash
+ run: $BUILD_CMD run --target=${{ matrix.job.target }} --features ${{ matrix.terminal }} -- Cargo.toml Cargo.lock LICENSE-APACHE LICENSE-MIT README.md src/lib.rs
+
+ - name: "Feature check: ${{ matrix.terminal }}"
+ shell: bash
+ run: $BUILD_CMD check --target=${{ matrix.job.target }} --verbose --lib --features ${{ matrix.terminal }}
+
+ - name: Create tarball
+ id: package
+ shell: bash
+ run: |
+ PKG_suffix=".tar.gz" ; case ${{ matrix.job.target }} in *-pc-windows-*) PKG_suffix=".zip" ;; esac;
+ PKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-v${{ needs.crate_metadata.outputs.version }}-${{ matrix.job.target }}
+ PKG_NAME=${PKG_BASENAME}${PKG_suffix}
+ echo "PKG_NAME=${PKG_NAME}" >> $GITHUB_OUTPUT
+
+ PKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/package"
+ ARCHIVE_DIR="${PKG_STAGING}/${PKG_BASENAME}/"
+ mkdir -p "${ARCHIVE_DIR}"
+
+ # Binary
+ cp "${{ steps.bin.outputs.BIN_PATH }}" "$ARCHIVE_DIR"
+
+ # README, LICENSE files
+ cp "README.md" "LICENSE-MIT" "LICENSE-APACHE" "$ARCHIVE_DIR"
+
+ # base compressed package
+ pushd "${PKG_STAGING}/" >/dev/null
+ case ${{ matrix.job.target }} in
+ *-pc-windows-*) 7z -y a "${PKG_NAME}" "${PKG_BASENAME}"/* | tail -2 ;;
+ *) tar czf "${PKG_NAME}" "${PKG_BASENAME}"/* ;;
+ esac;
+ popd >/dev/null
+
+ # Let subsequent steps know where to find the compressed package
+ echo "PKG_PATH=${PKG_STAGING}/${PKG_NAME}" >> $GITHUB_OUTPUT
+
+ - name: Create Debian package
+ id: debian-package
+ shell: bash
+ if: startsWith(matrix.job.os, 'ubuntu')
+ run: |
+ COPYRIGHT_YEARS="2018 - "$(date "+%Y")
+ DPKG_STAGING="${{ env.CICD_INTERMEDIATES_DIR }}/debian-package"
+ DPKG_DIR="${DPKG_STAGING}/dpkg"
+ mkdir -p "${DPKG_DIR}"
+
+ DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}
+ DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }}-musl
+ case ${{ matrix.job.target }} in *-musl*) DPKG_BASENAME=${{ needs.crate_metadata.outputs.name }}-musl ; DPKG_CONFLICTS=${{ needs.crate_metadata.outputs.name }} ;; esac;
+ DPKG_VERSION=${{ needs.crate_metadata.outputs.version }}
+
+ unset DPKG_ARCH
+ case ${{ matrix.job.target }} in
+ aarch64-*-linux-*) DPKG_ARCH=arm64 ;;
+ arm-*-linux-*hf) DPKG_ARCH=armhf ;;
+ i686-*-linux-*) DPKG_ARCH=i686 ;;
+ x86_64-*-linux-*) DPKG_ARCH=amd64 ;;
+ *) DPKG_ARCH=notset ;;
+ esac;
+
+ DPKG_NAME="${DPKG_BASENAME}_${DPKG_VERSION}_${DPKG_ARCH}.deb"
+ echo "DPKG_NAME=${DPKG_NAME}" >> $GITHUB_OUTPUT
+
+ # Binary
+ install -Dm755 "${{ steps.bin.outputs.BIN_PATH }}" "${DPKG_DIR}/usr/bin/${{ steps.bin.outputs.BIN_NAME }}"
+
+ # README and LICENSE
+ install -Dm644 "README.md" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/README.md"
+ install -Dm644 "LICENSE-MIT" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-MIT"
+ install -Dm644 "LICENSE-APACHE" "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/LICENSE-APACHE"
+
+ cat > "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright" <<EOF
+ Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+ Upstream-Name: ${{ needs.crate_metadata.outputs.name }}
+ Source: ${{ needs.crate_metadata.outputs.homepage }}
+
+ Files: *
+ Copyright: ${{ needs.crate_metadata.outputs.maintainer }}
+ Copyright: $COPYRIGHT_YEARS ${{ needs.crate_metadata.outputs.maintainer }}
+ License: Apache-2.0 or MIT
+
+ License: Apache-2.0
+ On Debian systems, the complete text of the Apache-2.0 can be found in the
+ file /usr/share/common-licenses/Apache-2.0.
+
+ License: MIT
+ Permission is hereby granted, free of charge, to any
+ person obtaining a copy of this software and associated
+ documentation files (the "Software"), to deal in the
+ Software without restriction, including without
+ limitation the rights to use, copy, modify, merge,
+ publish, distribute, sublicense, and/or sell copies of
+ the Software, and to permit persons to whom the Software
+ is furnished to do so, subject to the following
+ conditions:
+ .
+ The above copyright notice and this permission notice
+ shall be included in all copies or substantial portions
+ of the Software.
+ .
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ DEALINGS IN THE SOFTWARE.
+ EOF
+ chmod 644 "${DPKG_DIR}/usr/share/doc/${DPKG_BASENAME}/copyright"
+
+ # control file
+ mkdir -p "${DPKG_DIR}/DEBIAN"
+ cat > "${DPKG_DIR}/DEBIAN/control" <<EOF
+ Package: ${DPKG_BASENAME}
+ Version: ${DPKG_VERSION}
+ Section: utils
+ Priority: optional
+ Maintainer: ${{ needs.crate_metadata.outputs.maintainer }}
+ Homepage: ${{ needs.crate_metadata.outputs.homepage }}
+ Architecture: ${DPKG_ARCH}
+ Provides: ${{ needs.crate_metadata.outputs.name }}
+ Conflicts: ${DPKG_CONFLICTS}
+ Description: Colorizes paths from STDIN just like ls.
+ EOF
+
+ DPKG_PATH="${DPKG_STAGING}/${DPKG_NAME}"
+ echo "DPKG_PATH=${DPKG_PATH}" >> $GITHUB_OUTPUT
+
+ # build dpkg
+ fakeroot dpkg-deb --build "${DPKG_DIR}" "${DPKG_PATH}"
+
+ - name: "Artifact upload: tarball"
+ uses: actions/upload-artifact@master
+ if: matrix.terminal == 'ansi_term'
+ with:
+ name: ${{ steps.package.outputs.PKG_NAME }}
+ path: ${{ steps.package.outputs.PKG_PATH }}
+
+ - name: "Artifact upload: Debian package"
+ uses: actions/upload-artifact@master
+ if: steps.debian-package.outputs.DPKG_NAME && matrix.terminal == 'ansi_term'
+ with:
+ name: ${{ steps.debian-package.outputs.DPKG_NAME }}
+ path: ${{ steps.debian-package.outputs.DPKG_PATH }}
+
+ - name: Check for release
+ id: is-release
+ shell: bash
+ run: |
+ unset IS_RELEASE ; if [[ $GITHUB_REF =~ ^refs/tags/v[0-9].* ]]; then IS_RELEASE='true' ; fi
+ echo "IS_RELEASE=${IS_RELEASE}" >> $GITHUB_OUTPUT
+
+ - name: Publish archives and packages
+ uses: softprops/action-gh-release@v1
+ if: steps.is-release.outputs.IS_RELEASE
+ with:
+ files: |
+ ${{ steps.package.outputs.PKG_PATH }}
+ ${{ steps.debian-package.outputs.DPKG_PATH }}
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
diff --git b/rust-vendor/lscolors/Cargo.toml.orig b/rust-vendor/lscolors/Cargo.toml.orig
new file mode 100644
index 0000000..1f179b6
--- /dev/null
+++ b/rust-vendor/lscolors/Cargo.toml.orig
@@ -0,0 +1,42 @@
+[package]
+name = "lscolors"
+description = "Colorize paths using the LS_COLORS environment variable"
+categories = ["command-line-interface"]
+homepage = "https://github.com/sharkdp/lscolors"
+repository = "https://github.com/sharkdp/lscolors"
+keywords = [
+ "cli",
+ "linux",
+ "terminal",
+ "filesystem",
+ "color",
+]
+license = "MIT/Apache-2.0"
+version = "0.21.0"
+readme = "README.md"
+edition = "2021"
+authors = ["David Peter <mail@david-peter.de>"]
+rust-version = "1.76.0"
+
+[features]
+default = ["nu-ansi-term"]
+gnu_legacy = ["nu-ansi-term/gnu_legacy"]
+
+[dependencies]
+ansi_term = { version = "0.12", optional = true }
+nu-ansi-term = { version = "0.50", optional = true }
+crossterm = { version = "0.29", optional = true }
+owo-colors = { version = "4.0", optional = true }
+aho-corasick = "1.1.3"
+
+[dev-dependencies]
+tempfile = "^3"
+
+[[bin]]
+name = "lscolors"
+path = "src/bin.rs"
+
+[profile.release]
+lto = true
+strip = true
+codegen-units = 1
diff --git b/rust-vendor/md-5/.cargo_vcs_info.json b/rust-vendor/md-5/.cargo_vcs_info.json
new file mode 100644
index 0000000..c26daf8
--- /dev/null
+++ b/rust-vendor/md-5/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "026b0e81e90ba476a5d343a8e4efbc63b814737b"
+ },
+ "path_in_vcs": "md5"
+}
\ No newline at end of file
diff --git b/rust-vendor/md-5/Cargo.toml.orig b/rust-vendor/md-5/Cargo.toml.orig
new file mode 100644
index 0000000..8103cd8
--- /dev/null
+++ b/rust-vendor/md-5/Cargo.toml.orig
@@ -0,0 +1,36 @@
+[package]
+name = "md-5"
+version = "0.10.6"
+description = "MD5 hash function"
+authors = ["RustCrypto Developers"]
+license = "MIT OR Apache-2.0"
+readme = "README.md"
+edition = "2018"
+documentation = "https://docs.rs/md-5"
+repository = "https://github.com/RustCrypto/hashes"
+keywords = ["crypto", "md5", "hash", "digest"]
+categories = ["cryptography", "no-std"]
+
+[lib]
+name = "md5"
+
+[dependencies]
+digest = "0.10.7"
+cfg-if = "1.0"
+
+[target.'cfg(any(target_arch = "x86", target_arch = "x86_64"))'.dependencies]
+md5-asm = { version = "0.5", optional = true }
+
+[dev-dependencies]
+digest = { version = "0.10.7", features = ["dev"] }
+hex-literal = "0.2.2"
+
+[features]
+default = ["std"]
+std = ["digest/std"]
+asm = ["md5-asm"] # WARNING: this feature SHOULD NOT be enabled by library crates
+# Use assembly backend for LoongArch64 targets
+# WARNING: Bumps MSRV to 1.72. This feature SHOULD NOT be enabled by library crates
+loongarch64_asm = []
+oid = ["digest/oid"] # Enable OID support. WARNING: Bumps MSRV to 1.57
+force-soft = [] # Force software implementation
diff --git b/rust-vendor/memchr/.cargo_vcs_info.json b/rust-vendor/memchr/.cargo_vcs_info.json
new file mode 100644
index 0000000..b03595a
--- /dev/null
+++ b/rust-vendor/memchr/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "886ca4ca4820297191c6e9f7b023dc356f31a4d1"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/memchr/.ignore b/rust-vendor/memchr/.ignore
new file mode 100644
index 0000000..47ec474
--- /dev/null
+++ b/rust-vendor/memchr/.ignore
@@ -0,0 +1 @@
+!.github
diff --git b/rust-vendor/memchr/.vim/coc-settings.json b/rust-vendor/memchr/.vim/coc-settings.json
new file mode 100644
index 0000000..38f35ce
--- /dev/null
+++ b/rust-vendor/memchr/.vim/coc-settings.json
@@ -0,0 +1,16 @@
+{
+ "rust-analyzer.cargo.allFeatures": false,
+ "rust-analyzer.linkedProjects": [
+ "benchmarks/engines/libc/Cargo.toml",
+ "benchmarks/engines/rust-bytecount/Cargo.toml",
+ "benchmarks/engines/rust-jetscii/Cargo.toml",
+ "benchmarks/engines/rust-memchr/Cargo.toml",
+ "benchmarks/engines/rust-memchrold/Cargo.toml",
+ "benchmarks/engines/rust-sliceslice/Cargo.toml",
+ "benchmarks/engines/rust-std/Cargo.toml",
+ "benchmarks/engines/stringzilla/Cargo.toml",
+ "benchmarks/shared/Cargo.toml",
+ "fuzz/Cargo.toml",
+ "Cargo.toml"
+ ]
+}
diff --git b/rust-vendor/memchr/Cargo.toml.orig b/rust-vendor/memchr/Cargo.toml.orig
new file mode 100644
index 0000000..d6d0842
--- /dev/null
+++ b/rust-vendor/memchr/Cargo.toml.orig
@@ -0,0 +1,78 @@
+[package]
+name = "memchr"
+version = "2.8.0" #:version
+authors = ["Andrew Gallant <jamslam@gmail.com>", "bluss"]
+description = """
+Provides extremely fast (uses SIMD on x86_64, aarch64 and wasm32) routines for
+1, 2 or 3 byte search and single substring search.
+"""
+documentation = "https://docs.rs/memchr/"
+homepage = "https://github.com/BurntSushi/memchr"
+repository = "https://github.com/BurntSushi/memchr"
+readme = "README.md"
+keywords = ["memchr", "memmem", "substring", "find", "search"]
+license = "Unlicense OR MIT"
+exclude = ["/.github", "/benchmarks", "/fuzz", "/scripts", "/tmp"]
+edition = "2021"
+rust-version = "1.61"
+
+[lib]
+name = "memchr"
+bench = false
+
+[features]
+default = ["std"]
+
+# The 'std' feature permits the memchr crate to use the standard library. This
+# permits this crate to use runtime CPU feature detection to automatically
+# accelerate searching via vector instructions. Without the standard library,
+# this automatic detection is not possible.
+std = ["alloc"]
+
+# The 'alloc' feature enables some APIs that require allocation, such as
+# 'Finder::into_owned'. Note that this feature does not enable runtime CPU
+# feature detection. That still requires 'std'.
+alloc = []
+
+# When enabled (it's disabled by default), the `log` crate will be used to
+# emit a spattering of log messages. For the most part, the log messages are
+# meant to indicate what strategies are being employed. For example, whether
+# a vector or a scalar algorithm is used for substring search. This can be
+# useful when debugging performance problems.
+#
+# This is disabled by default.
+logging = ["dep:log"]
+
+# The 'use_std' feature is DEPRECATED. It will be removed in memchr 3. Until
+# then, it is alias for the 'std' feature.
+use_std = ["std"]
+
+# The 'libc' feature has been DEPRECATED and no longer has any effect.
+libc = []
+
+# Internal feature, only used when building as part of libstd, not part of the
+# stable interface of this crate.
+rustc-dep-of-std = ['core']
+
+[dependencies]
+# Only used when the `logging` feature is enabled (disabled by default).
+log = { version = "0.4.20", optional = true }
+# Internal feature, only used when building as part of libstd, not part of the
+# stable interface of this crate.
+core = { version = '1.0.0', optional = true, package = 'rustc-std-workspace-core' }
+
+[dev-dependencies]
+quickcheck = { version = "1.0.3", default-features = false }
+
+[profile.release]
+debug = true
+
+[profile.bench]
+debug = true
+
+[profile.test]
+opt-level = 3
+debug = true
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--generate-link-to-definition"]
diff --git b/rust-vendor/memmap2/.cargo_vcs_info.json b/rust-vendor/memmap2/.cargo_vcs_info.json
new file mode 100644
index 0000000..7891adc
--- /dev/null
+++ b/rust-vendor/memmap2/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "1f0196ab31cf1e6f4eb4b3633c51a4d3ba920788"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/memmap2/.github/workflows/main.yml b/rust-vendor/memmap2/.github/workflows/main.yml
new file mode 100644
index 0000000..41da883
--- /dev/null
+++ b/rust-vendor/memmap2/.github/workflows/main.yml
@@ -0,0 +1,143 @@
+name: Rust
+
+on: [push, pull_request]
+
+env:
+ CARGO_TERM_COLOR: always
+
+jobs:
+ check:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: x86_64-pc-windows-gnu
+ components: clippy, rustfmt
+
+ - name: Run checks
+ env:
+ CLIPPY_OPTS: --all-targets
+ run: |
+ cargo fmt --check
+ cargo clippy $CLIPPY_OPTS
+ cargo clippy --target x86_64-pc-windows-gnu $CLIPPY_OPTS
+
+ test-win:
+ runs-on: windows-latest
+ strategy:
+ matrix:
+ target:
+ - i686-pc-windows-gnu
+ - i686-pc-windows-msvc
+ - x86_64-pc-windows-gnu
+ - x86_64-pc-windows-msvc
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: stable-${{ matrix.target }}
+
+ - name: Run tests
+ run: cargo test --all-features
+
+ test-macos:
+ runs-on: macos-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@stable
+
+ - name: Run tests
+ run: cargo test --all-features
+
+ test-linux:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - i686-unknown-linux-gnu
+ - i686-unknown-linux-musl
+ - x86_64-unknown-linux-gnu
+ - x86_64-unknown-linux-musl
+ - x86_64-linux-android
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ # We need nightly for -Zminimal-versions
+ - name: Install nightly toolchain
+ uses: dtolnay/rust-toolchain@nightly
+
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ target: ${{ matrix.target }}
+
+ - name: Install multilib
+ if: ${{ contains(matrix.target, 'i686-unknown-linux-') }}
+ run: |
+ sudo apt update -yqq
+ sudo apt install gcc-multilib
+
+ # Make sure we're testing against the minimal libc version.
+ - name: Generate Cargo.lock
+ run: cargo +nightly update -Zminimal-versions
+
+ - name: Run tests
+ if: ${{ !contains(matrix.target, 'android') }}
+ run: cargo test --locked --all-features --target ${{ matrix.target }}
+
+ # Just make sure it builds. Not tests running.
+ - name: Run tests
+ if: ${{ contains(matrix.target, 'android') }}
+ run: cargo build --locked --all-features --target ${{ matrix.target }}
+
+ check-stub:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: wasm32-unknown-unknown
+
+ - name: Run check
+ run: cargo check --all-features --target wasm32-unknown-unknown
+
+ check-visionos:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: rust-src
+
+ - name: Run check
+ run: cargo check --all-features --target aarch64-apple-visionos -Zbuild-std
+
+ test-msrv:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Install toolchain
+ uses: dtolnay/rust-toolchain@1.63.0
+
+ # do not test, because dev-dependencies do not follow MSRV
+ - name: Build
+ run: cargo build --all-features
diff --git b/rust-vendor/memmap2/Cargo.toml.orig b/rust-vendor/memmap2/Cargo.toml.orig
new file mode 100644
index 0000000..901693f
--- /dev/null
+++ b/rust-vendor/memmap2/Cargo.toml.orig
@@ -0,0 +1,25 @@
+[package]
+name = "memmap2"
+version = "0.9.10"
+authors = [
+ "Dan Burkert <dan@danburkert.com>",
+ "Yevhenii Reizner <razrfalcon@gmail.com>",
+ "The Contributors",
+]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/RazrFalcon/memmap2-rs"
+documentation = "https://docs.rs/memmap2"
+description = "Cross-platform Rust API for memory-mapped file IO"
+keywords = ["mmap", "memory-map", "io", "file"]
+edition = "2021"
+rust-version = "1.63"
+
+[dependencies]
+stable_deref_trait = { version = "1.0", optional = true }
+
+[target.'cfg(unix)'.dependencies]
+libc = "0.2.151"
+
+[dev-dependencies]
+tempfile = "3"
+owning_ref = "0.4.1"
diff --git b/rust-vendor/memoffset/.cargo_vcs_info.json b/rust-vendor/memoffset/.cargo_vcs_info.json
new file mode 100644
index 0000000..f089885
--- /dev/null
+++ b/rust-vendor/memoffset/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "153fc3d50f03755be53148bc3eb97390f9011e45"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/memoffset/.github/workflows/ci.yml b/rust-vendor/memoffset/.github/workflows/ci.yml
new file mode 100644
index 0000000..1cce2af
--- /dev/null
+++ b/rust-vendor/memoffset/.github/workflows/ci.yml
@@ -0,0 +1,72 @@
+name: CI
+
+on: [push, pull_request]
+
+jobs:
+ test:
+ name: Test Suite
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - stable
+ - beta
+ - nightly
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Run cargo test
+ run: cargo test
+
+ test-msrv:
+ name: Test Suite
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust:
+ - 1.19.0 # Oldest supported (first version with numeric fields in struct patterns)
+ - 1.20.0 # Oldest supported with tuple_ty
+ - 1.31.0 # Oldest supported with allow(clippy)
+ - 1.36.0 # Oldest supported with MaybeUninit
+ - 1.40.0 # Oldest supported with cfg(doctest)
+ - 1.51.0 # Oldest supported with ptr::addr_of!
+ - 1.65.0 # Oldest supported with stable const evaluation (sans cell)
+ - 1.77.0 # Oldest supported with native `offset_of!`
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - name: Run cargo test
+ # Exclude doctests here, as we don't want to clutter docs themselves
+ # with backwards compatibility workarounds.
+ run: cargo test --lib
+
+ miri:
+ name: Test Suite (Miri)
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: nightly
+ components: miri
+ - name: Test with Miri
+ run: |
+ cargo miri test
+
+ style:
+ name: lints and formatting
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: 1.51.0 # pin a version for reproducible results
+ components: rustfmt
+ - name: Check warnings
+ run: RUSTFLAGS="-D warnings" cargo check --all-targets
+ - name: Check formatting
+ run: cargo fmt -- --check
diff --git b/rust-vendor/memoffset/Cargo.toml.orig b/rust-vendor/memoffset/Cargo.toml.orig
new file mode 100644
index 0000000..9eeaebe
--- /dev/null
+++ b/rust-vendor/memoffset/Cargo.toml.orig
@@ -0,0 +1,22 @@
+[package]
+name = "memoffset"
+version = "0.9.1"
+authors = ["Gilad Naaman <gilad.naaman@gmail.com>"]
+description = "offset_of functionality for Rust structs."
+license = "MIT"
+readme = "README.md"
+repository = "https://github.com/Gilnaa/memoffset"
+keywords = ["mem", "offset", "offset_of", "offsetof"]
+categories = ["no-std"]
+
+[build-dependencies]
+autocfg = "1"
+
+[dev-dependencies]
+doc-comment = "0.3"
+
+[features]
+default = []
+# NOP features, solely so that people do not have to change their Cargo.toml
+unstable_offset_of = []
+unstable_const = []
diff --git b/rust-vendor/minimal-lexical/.cargo_vcs_info.json b/rust-vendor/minimal-lexical/.cargo_vcs_info.json
new file mode 100644
index 0000000..33bf0d3
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.cargo_vcs_info.json
@@ -0,0 +1,5 @@
+{
+ "git": {
+ "sha1": "e997c46656ebe83e696b866bd954da1fa3f64eef"
+ }
+}
diff --git b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/bug_report.md b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..1839a7f
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,41 @@
+---
+name: Bug report
+about: Create a report to help us improve.
+title: "[BUG]"
+labels: bug
+assignees: Alexhuszagh
+
+---
+
+## Description
+
+Please include a clear and concise description of the bug. If the bug includes a security vulnerability, you may also privately report the issue to the [maintainer](mailto:ahuszagh@gmail.com).
+
+## Prerequisites
+
+Here are a few things you should provide to help me understand the issue:
+
+- Rust version: `rustc -V`
+- minimal-lexical version:
+
+## Test case
+
+Please provide a short, complete (with crate import, etc) test case for
+the issue, showing clearly the expected and obtained results.
+
+Example test case:
+
+```
+#[macro_use]
+extern crate minimal_Lexical;
+
+fn main() {
+ let integer = b"1";
+ let fraction = b"2345";
+ let float: f64 = minimal_lexical::parse_float(integer.iter(), fraction.iter(), 0);
+ assert_eq!(value, 1.2345);
+}
+```
+
+## Additional Context
+Add any other context about the problem here.
diff --git b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/custom.md b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/custom.md
new file mode 100644
index 0000000..e12e029
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/custom.md
@@ -0,0 +1,21 @@
+---
+name: Custom issue template
+about: Issue template for miscellaneous issues.
+title: "[OTHER]"
+labels: ''
+assignees: Alexhuszagh
+
+---
+
+## Prerequisites
+
+If applicable to the issue, here are a few things you should provide to help me understand the issue:
+
+- Rust version: `rustc -V`
+- minimal-lexical version:
+
+## Description
+Please include a clear and concise description of the issue.
+
+## Additional Context
+Add any other context or screenshots about the issue here.
diff --git b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/documentation.md b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/documentation.md
new file mode 100644
index 0000000..2d6b3e4
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/documentation.md
@@ -0,0 +1,16 @@
+---
+name: Documentation
+about: Update the project's documentation.
+title: "[DOC]"
+labels: documentation
+assignees: Alexhuszagh
+
+---
+
+## Description
+Please include a clear and concise description of the issue.
+
+Ex: Documentation for `parse_float` contains a typo.
+
+## Additional Context
+Add any other context or screenshots about the issue here.
diff --git b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/feature_request.md b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..ef7e7fe
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,27 @@
+---
+name: Feature request
+about: Suggest an idea for this project.
+title: "[FEATURE]"
+labels: enhancement
+assignees: Alexhuszagh
+
+---
+
+## Problem
+A clear and concise description of what the problem is. Ex. minimal-lexical does not parse standard-conforming JSON numbers.
+
+## Solution
+A clear and concise description of what you want to happen.
+
+## Prerequisites
+
+If applicable to the feature request, here are a few things you should provide to help me understand the issue:
+
+- Rust version: `rustc -V`
+- minimal-lexical version:
+
+## Alternatives
+A clear and concise description of any alternative solutions or features you've considered.
+
+## Additional Context
+Add any other context or screenshots about the feature request here.
diff --git b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/question.md b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/question.md
new file mode 100644
index 0000000..56ffb70
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/ISSUE_TEMPLATE/question.md
@@ -0,0 +1,11 @@
+---
+name: Question
+about: Have a question how to use minimal-lexical?
+title: "[QUESTION]"
+labels: question
+assignees: Alexhuszagh
+
+---
+
+## Question
+A clear and concise description of what the question is. Ex. how do I use minimal-lexical without a system allocator?
diff --git b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/bug_fix.md b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/bug_fix.md
new file mode 100644
index 0000000..c4b2874
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/bug_fix.md
@@ -0,0 +1,27 @@
+---
+name: Bug fix
+about: Fix a bug in minimal-lexical.
+title: "[BUG]"
+labels: bug
+assignees: Alexhuszagh
+
+---
+
+**NOTE:**
+- If you have made non-trivial changes to the code, please make sure to run unittests prior to committing.
+- If you have made any changes to parsing algorithms, please run at least `test-parse-golang` or `test-parse-unittests` with `feature =
+comprehensive_float_test"` enabled prior to committing, to ensure there are no regressions.
+- Please run `cargo fmt` on nightly prior to committing.
+
+## Optional Debugging Information
+
+If applicable to the issue, here are a few things you should provide to help me understand the issue:
+
+- Rust version: `rustc -V`
+- minimal-lexical version:
+
+## Description
+Please include a clear and concise description of the changes made.
+
+## Additional Context
+Add any other context or screenshots about the bug fix here.
diff --git b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/custom.md b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/custom.md
new file mode 100644
index 0000000..b6cd5d9
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/custom.md
@@ -0,0 +1,22 @@
+---
+name: Custom pull request template
+about: Pull request template for miscellaneous changes.
+title: "[OTHER]"
+labels: ''
+assignees: Alexhuszagh
+
+---
+
+**NOTE:**
+- If you have made non-trivial changes to the code, please make sure to run unittests prior to committing.
+- Please run `cargo fmt` on nightly prior to committing.
+
+## Optional Debugging Information
+
+If applicable to the issue, here are a few things you should provide to help me understand the issue:
+
+- Rust version: `rustc -V`
+- minimal-lexical version:
+
+## Description
+Please include a clear and concise description of the changes.
diff --git b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/documentation.md b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/documentation.md
new file mode 100644
index 0000000..233f87d
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/PULL_REQUEST_TEMPLATE/documentation.md
@@ -0,0 +1,21 @@
+---
+name: Documentation
+about: Update the project's documentation.
+title: "[DOC]"
+labels: documentation
+assignees: Alexhuszagh
+
+---
+
+**NOTE:**
+- If you have made any changes to doc comments, please run `cargo fmt` on nightly prior to committing.
+
+## Description
+Please include a clear and concise description of fixes made to the documentation.
+
+Ex: Fixed a backtick leading to improper formatting in README.
+Ex: Fixed code sample for `parse_partial` in README.
+Ex: Updated outdated doc comments in `parse_float`.
+
+## Additional Context
+Add any other context or screenshots about the issue here.
diff --git b/rust-vendor/minimal-lexical/.github/workflows/Cross.yml b/rust-vendor/minimal-lexical/.github/workflows/Cross.yml
new file mode 100644
index 0000000..d19d104
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/workflows/Cross.yml
@@ -0,0 +1,90 @@
+name: Cross
+
+on:
+ pull_request:
+ branches: [main]
+ workflow_dispatch:
+
+jobs:
+ cross:
+ name: Rust ${{matrix.target}}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ target:
+ # Android
+ - aarch64-linux-android
+ - arm-linux-androideabi
+ - armv7-linux-androideabi
+ - i686-linux-android
+ - x86_64-linux-android
+
+ # Linux
+ - aarch64-unknown-linux-gnu
+ - arm-unknown-linux-gnueabi
+ - armv7-unknown-linux-gnueabihf
+ - i686-unknown-linux-gnu
+ - i686-unknown-linux-musl
+ - mips-unknown-linux-gnu
+ - mips64-unknown-linux-gnuabi64
+ - mips64el-unknown-linux-gnuabi64
+ - mipsel-unknown-linux-gnu
+ - powerpc64le-unknown-linux-gnu
+ - x86_64-unknown-linux-gnu
+ - x86_64-unknown-linux-musl
+
+ # Windows
+ - x86_64-pc-windows-gnu
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ target: ${{matrix.target}}
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: true
+ command: check
+ args: --target ${{matrix.target}}
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: true
+ command: test
+ args: --target ${{matrix.target}}
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: true
+ command: test
+ args: --target ${{matrix.target}} --features=compact
+
+ notest:
+ name: Rust ${{matrix.target}}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ target:
+ # Linux
+ - powerpc64-unknown-linux-gnu
+ - s390x-unknown-linux-gnu
+
+ # FreeBSD
+ - i686-unknown-freebsd
+ - x86_64-unknown-freebsd
+ - x86_64-unknown-netbsd
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ target: ${{matrix.target}}
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: true
+ command: check
+ args: --target ${{matrix.target}}
diff --git b/rust-vendor/minimal-lexical/.github/workflows/Features.yml b/rust-vendor/minimal-lexical/.github/workflows/Features.yml
new file mode 100644
index 0000000..2a940e2
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/workflows/Features.yml
@@ -0,0 +1,23 @@
+name: Features
+
+on:
+ pull_request:
+ branches: [main]
+ workflow_dispatch:
+
+jobs:
+ features:
+ name: Test Feature Combinations
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: true
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install latest nightly
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ components: rustfmt, clippy
+ - run: ci/test.sh
+ - run: NIGHTLY=1 NO_STD=1 ci/test.sh
diff --git b/rust-vendor/minimal-lexical/.github/workflows/OSX.yml b/rust-vendor/minimal-lexical/.github/workflows/OSX.yml
new file mode 100644
index 0000000..e835250
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/workflows/OSX.yml
@@ -0,0 +1,40 @@
+name: OSX
+
+on:
+ pull_request:
+ branches: [main]
+ workflow_dispatch:
+
+jobs:
+ cross:
+ name: Rust ${{matrix.target}}
+ runs-on: macos-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ target:
+ # iOS targets don't work, since rust-embedded doesn't provide images.
+ - x86_64-apple-darwin
+
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ target: ${{matrix.target}}
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: true
+ command: check
+ args: --target ${{matrix.target}}
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: true
+ command: test
+ args: --target ${{matrix.target}}
+ - uses: actions-rs/cargo@v1
+ with:
+ use-cross: true
+ command: test
+ args: --target ${{matrix.target}} --features=compact
diff --git b/rust-vendor/minimal-lexical/.github/workflows/Simple.yml b/rust-vendor/minimal-lexical/.github/workflows/Simple.yml
new file mode 100644
index 0000000..02f63af
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/workflows/Simple.yml
@@ -0,0 +1,41 @@
+name: Simple
+
+on:
+ push:
+ branches: [main]
+ pull_request:
+ branches: [main]
+
+jobs:
+ test:
+ name: Rust ${{matrix.rust}}
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ rust: [1.36.0, 1.41.0, 1.46.0, 1.51.0, stable, beta, nightly]
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ submodules: recursive
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{matrix.rust}}
+ - run: cargo check
+ - run: cargo test
+ - run: cargo test --features=compact
+
+ check:
+ name: Lint code
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: true
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install latest nightly
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ components: rustfmt, clippy
+ - run: ci/check.sh
diff --git b/rust-vendor/minimal-lexical/.github/workflows/Valgrind.yml b/rust-vendor/minimal-lexical/.github/workflows/Valgrind.yml
new file mode 100644
index 0000000..298a5ce
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.github/workflows/Valgrind.yml
@@ -0,0 +1,24 @@
+name: Valgrind
+
+on:
+ pull_request:
+ branches: [main]
+ workflow_dispatch:
+
+jobs:
+ valgrind:
+ name: Valgrind Tests
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: true
+ steps:
+ - uses: actions/checkout@v2
+ - name: Install latest nightly
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ - run: sudo apt-get install valgrind
+ - run: cargo +nightly install cargo-valgrind
+ - run: cargo +nightly valgrind test --release
+ - run: cargo +nightly valgrind test --all-features --release
diff --git b/rust-vendor/minimal-lexical/.gitmodules b/rust-vendor/minimal-lexical/.gitmodules
new file mode 100644
index 0000000..f06dee0
--- /dev/null
+++ b/rust-vendor/minimal-lexical/.gitmodules
@@ -0,0 +1,4 @@
+[submodule "data/test-parse-golang/parse-number-fxx-test-data"]
+ path = data/test-parse-golang/parse-number-fxx-test-data
+ url = https://github.com/nigeltao/parse-number-fxx-test-data
+ shallow = true
diff --git b/rust-vendor/minimal-lexical/Cargo.toml.orig b/rust-vendor/minimal-lexical/Cargo.toml.orig
new file mode 100644
index 0000000..ab9843d
--- /dev/null
+++ b/rust-vendor/minimal-lexical/Cargo.toml.orig
@@ -0,0 +1,37 @@
+[package]
+authors = ["Alex Huszagh <ahuszagh@gmail.com>"]
+autoexamples = false
+categories = ["parsing", "no-std"]
+description = "Fast float parsing conversion routines."
+documentation = "https://docs.rs/minimal-lexical"
+edition = "2018"
+keywords = ["parsing", "no_std"]
+license = "MIT/Apache-2.0"
+name = "minimal-lexical"
+readme = "README.md"
+repository = "https://github.com/Alexhuszagh/minimal-lexical"
+version = "0.2.1"
+exclude = [
+ "assets/*",
+ "ci/*",
+ "docs/*",
+ "etc/*",
+ "fuzz/*",
+ "examples/*",
+ "scripts/*"
+]
+
+[features]
+default = ["std"]
+# Use the standard library.
+std = []
+# Reduce code size at the cost of performance.
+compact = []
+# Use the system allocator.
+alloc = []
+# Add support for nightly-only features.
+nightly = []
+
+# Internal only features.
+# Enable the lint checks.
+lint = []
diff --git b/rust-vendor/miniz_oxide/.cargo_vcs_info.json b/rust-vendor/miniz_oxide/.cargo_vcs_info.json
new file mode 100644
index 0000000..5bffd83
--- /dev/null
+++ b/rust-vendor/miniz_oxide/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "44e43c7786e379b2b1a7fde4aa0e63be719e583d"
+ },
+ "path_in_vcs": "miniz_oxide"
+}
\ No newline at end of file
diff --git b/rust-vendor/miniz_oxide/Cargo.toml.orig b/rust-vendor/miniz_oxide/Cargo.toml.orig
new file mode 100644
index 0000000..3880267
--- /dev/null
+++ b/rust-vendor/miniz_oxide/Cargo.toml.orig
@@ -0,0 +1,54 @@
+[package]
+name = "miniz_oxide"
+authors = ["Frommi <daniil.liferenko@gmail.com>", "oyvindln <oyvindln@users.noreply.github.com>", "Rich Geldreich richgel99@gmail.com"]
+version = "0.8.9"
+license = "MIT OR Zlib OR Apache-2.0"
+readme = "Readme.md"
+keywords = ["zlib", "miniz", "deflate", "encoding"]
+categories = ["compression"]
+repository = "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide"
+homepage = "https://github.com/Frommi/miniz_oxide/tree/master/miniz_oxide"
+documentation = "https://docs.rs/miniz_oxide"
+description = "DEFLATE compression and decompression library rewritten in Rust based on miniz"
+edition = "2021"
+exclude = ["benches/*", "tests/*"]
+
+[lib]
+name = "miniz_oxide"
+
+[dependencies]
+adler2 = { version = "2.0", default-features = false }
+simd-adler32 = { version = "0.3.3", default-features = false, optional = true }
+serde = { version = "1.0", features = ["derive"], optional = true }
+
+# Internal feature, only used when building as part of libstd, not part of the
+# stable interface of this crate.
+core = { version = '1.0.0', optional = true, package = 'rustc-std-workspace-core' }
+alloc = { version = '1.0.0', optional = true, package = 'rustc-std-workspace-alloc' }
+
+
+[dev-dependencies]
+## Messes with minimum rust version and drags in deps just for running tests
+## so just comment out for now and enable manually when needed for enabling benches
+# criterion = "0.5"
+
+[[bench]]
+name = "benchmark"
+harness = false
+
+[features]
+default = ["with-alloc"]
+with-alloc = []
+std = []
+block-boundary = []
+
+# Internal feature, only used when building as part of libstd, not part of the
+# stable interface of this crate.
+rustc-dep-of-std = ['core', 'alloc', 'adler2/rustc-dep-of-std']
+
+simd = ['simd-adler32']
+
+# Disable unexpected cfg name warning from to !cfg(fuzzing) - compiler is not aware of the fuzzing feature since it comes from the environment
+# see https://github.com/rust-fuzz/cargo-fuzz/issues/372
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(fuzzing)'] }
diff --git b/rust-vendor/mio/.cargo_vcs_info.json b/rust-vendor/mio/.cargo_vcs_info.json
new file mode 100644
index 0000000..9d9e1dd
--- /dev/null
+++ b/rust-vendor/mio/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "6125f9b304b1ef3eee826411bb39f7aca9085fd3"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/mio/Cargo.toml.orig b/rust-vendor/mio/Cargo.toml.orig
new file mode 100644
index 0000000..6d2c29e
--- /dev/null
+++ b/rust-vendor/mio/Cargo.toml.orig
@@ -0,0 +1,112 @@
+[package]
+edition = "2021"
+rust-version = "1.71"
+name = "mio"
+# When releasing to crates.io:
+# - Update CHANGELOG.md.
+# - Create git tag
+version = "1.1.1"
+license = "MIT"
+authors = [
+ "Carl Lerche <me@carllerche.com>",
+ "Thomas de Zeeuw <thomasdezeeuw@gmail.com>",
+ "Tokio Contributors <team@tokio.rs>",
+]
+description = "Lightweight non-blocking I/O."
+homepage = "https://github.com/tokio-rs/mio"
+repository = "https://github.com/tokio-rs/mio"
+readme = "README.md"
+keywords = ["io", "async", "non-blocking"]
+categories = ["asynchronous"]
+include = [
+ "Cargo.toml",
+ "LICENSE",
+ "README.md",
+ "CHANGELOG.md",
+ "src/**/*.rs",
+ "examples/**/*.rs",
+]
+
+# For documentation of features see the `mio::features` module.
+[features]
+# By default Mio only provides a shell implementation.
+default = ["log"]
+
+# Enables the `Poll` and `Registry` types.
+os-poll = []
+# Enables additional OS specific extensions, e.g. Unix `pipe(2)`.
+os-ext = [
+ "os-poll",
+ "windows-sys/Win32_System_Pipes",
+ "windows-sys/Win32_Security",
+]
+# Enables `mio::net` module containing networking primitives.
+net = []
+
+[dependencies]
+log = { version = "0.4.8", optional = true }
+
+[target.'cfg(unix)'.dependencies]
+libc = "0.2.178"
+
+[target.'cfg(target_os = "hermit")'.dependencies]
+libc = "0.2.178"
+
+[target.'cfg(windows)'.dependencies.windows-sys]
+version = "0.61"
+features = [
+ "Wdk_Foundation", # Required for AFD.
+ "Wdk_Storage_FileSystem", # Required for AFD.
+ "Wdk_System_IO", # Required for AFD.
+ "Win32_Foundation", # Basic types eg HANDLE
+ "Win32_Networking_WinSock", # winsock2 types/functions
+ "Win32_Storage_FileSystem", # Enables NtCreateFile
+ "Win32_Security", # Enables NtCreateFile
+ "Win32_System_IO", # IO types like OVERLAPPED etc
+ "Win32_System_WindowsProgramming", # General future used for various types/funcs
+]
+
+[target.'cfg(target_os = "wasi")'.dependencies]
+wasi = "0.11.0"
+libc = "0.2.178"
+
+[dev-dependencies]
+env_logger = { version = "0.11", default-features = false }
+rand = "0.9"
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs", "--generate-link-to-definition"]
+targets = [
+ "aarch64-apple-ios",
+ "aarch64-linux-android",
+ "wasm32-wasip1",
+ "x86_64-apple-darwin",
+ "x86_64-pc-windows-gnu",
+ "x86_64-pc-windows-msvc",
+ "x86_64-unknown-dragonfly",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-illumos",
+ "x86_64-unknown-linux-gnu",
+ "x86_64-unknown-netbsd",
+ "x86_64-unknown-openbsd",
+ "x86_64-unknown-hermit",
+]
+
+[package.metadata.playground]
+features = ["os-poll", "os-ext", "net"]
+
+[[example]]
+name = "tcp_server"
+required-features = ["os-poll", "net"]
+
+[[example]]
+name = "tcp_listenfd_server"
+required-features = ["os-poll", "net"]
+
+[[example]]
+name = "udp_server"
+required-features = ["os-poll", "net"]
+
+[lints.rust]
+unexpected_cfgs = { level = "warn", check-cfg = ['cfg(mio_unsupported_force_poll_poll)', 'cfg(mio_unsupported_force_waker_pipe)'] }
diff --git b/rust-vendor/nix/.cargo_vcs_info.json b/rust-vendor/nix/.cargo_vcs_info.json
new file mode 100644
index 0000000..d90cef0
--- /dev/null
+++ b/rust-vendor/nix/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "3cf9007216086b17a6ef5a09fa42dc00cde5c2bf"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/nix/Cargo.toml.orig b/rust-vendor/nix/Cargo.toml.orig
new file mode 100644
index 0000000..9970f12
--- /dev/null
+++ b/rust-vendor/nix/Cargo.toml.orig
@@ -0,0 +1,110 @@
+[package]
+name = "nix"
+description = "Rust friendly bindings to *nix APIs"
+edition = "2021"
+version = "0.30.1"
+rust-version = "1.69"
+authors = ["The nix-rust Project Developers"]
+repository = "https://github.com/nix-rust/nix"
+license = "MIT"
+categories = ["os::unix-apis"]
+include = ["build.rs", "src/**/*", "test/**/*", "LICENSE", "README.md", "CHANGELOG.md"]
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--cfg", "docsrs"]
+targets = [
+ "x86_64-unknown-linux-gnu",
+ "aarch64-linux-android",
+ "x86_64-apple-darwin",
+ "aarch64-apple-ios",
+ "x86_64-unknown-freebsd",
+ "x86_64-unknown-openbsd",
+ "x86_64-unknown-netbsd",
+ "x86_64-unknown-dragonfly",
+ "x86_64-unknown-fuchsia",
+ "x86_64-unknown-redox",
+ "x86_64-unknown-illumos"
+]
+
+[dependencies]
+libc = { version = "0.2.171", features = ["extra_traits"] }
+bitflags = "2.3.3"
+cfg-if = "1.0"
+pin-utils = { version = "0.1.0", optional = true }
+memoffset = { version = "0.9", optional = true }
+
+[features]
+default = []
+
+acct = []
+aio = ["pin-utils"]
+dir = ["fs"]
+env = []
+event = ["poll"]
+fanotify = []
+feature = []
+fs = []
+hostname = []
+inotify = []
+ioctl = []
+kmod = []
+mman = []
+mount = ["uio"]
+mqueue = ["fs"]
+net = ["socket"]
+personality = []
+poll = []
+pthread = []
+ptrace = ["process"]
+quota = []
+process = []
+reboot = []
+resource = []
+sched = ["process"]
+signal = ["process"]
+socket = ["memoffset"]
+syslog = []
+term = []
+time = []
+ucontext = ["signal"]
+uio = []
+user = ["feature"]
+zerocopy = ["fs", "uio"]
+
+[dev-dependencies]
+assert-impl = "0.1"
+parking_lot = "0.12"
+rand = "0.9"
+tempfile = "3.7.1"
+semver = "1.0.7"
+nix = { path = ".", features = ["acct", "aio", "dir", "env", "event", "fanotify",
+ "feature", "fs", "hostname", "inotify", "ioctl", "kmod", "mman", "mount", "mqueue",
+ "net", "personality", "poll", "pthread", "ptrace", "quota", "process", "reboot",
+ "resource", "sched", "signal", "socket", "syslog", "term", "time", "ucontext", "uio",
+ "user", "zerocopy"] }
+
+[target.'cfg(any(target_os = "android", target_os = "linux"))'.dev-dependencies]
+caps = "0.5.3"
+
+[target.'cfg(target_os = "freebsd")'.dev-dependencies]
+sysctl = "0.4"
+
+[build-dependencies]
+cfg_aliases = "0.2.1"
+
+[[test]]
+name = "test"
+path = "test/test.rs"
+
+[[test]]
+name = "test-aio-drop"
+path = "test/sys/test_aio_drop.rs"
+
+[[test]]
+name = "test-clearenv"
+path = "test/test_clearenv.rs"
+
+[[test]]
+name = "test-prctl"
+path = "test/sys/test_prctl.rs"
diff --git b/rust-vendor/nom/.cargo_vcs_info.json b/rust-vendor/nom/.cargo_vcs_info.json
new file mode 100644
index 0000000..c59a04a
--- /dev/null
+++ b/rust-vendor/nom/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "2cec1b3e4c9ccac62c902d60c00de6d1549ccbe1"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/nom/Cargo.toml.orig b/rust-vendor/nom/Cargo.toml.orig
new file mode 100644
index 0000000..a57c047
--- /dev/null
+++ b/rust-vendor/nom/Cargo.toml.orig
@@ -0,0 +1,149 @@
+[package]
+
+name = "nom"
+version = "8.0.0"
+authors = ["contact@geoffroycouprie.com"]
+description = "A byte-oriented, zero-copy, parser combinators library"
+license = "MIT"
+repository = "https://github.com/rust-bakery/nom"
+readme = "README.md"
+documentation = "https://docs.rs/nom"
+keywords = ["parser", "parser-combinators", "parsing", "streaming", "bit"]
+categories = ["parsing"]
+edition = "2021"
+autoexamples = false
+
+# also update in README.md (badge and "Rust version requirements" section)
+rust-version = "1.65.0"
+
+include = [
+ "CHANGELOG.md",
+ "LICENSE",
+ "README.md",
+ ".gitignore",
+ "Cargo.toml",
+ "src/*.rs",
+ "src/*/*.rs",
+ "tests/*.rs",
+ "doc/nom_recipes.md",
+]
+
+[features]
+alloc = []
+std = ["alloc", "memchr/std"]
+default = ["std"]
+docsrs = []
+
+[dependencies.memchr]
+version = "2.3"
+default-features = false
+
+[dev-dependencies]
+doc-comment = "0.3"
+proptest = "=1.0.0"
+nom-language = { path = "./nom-language" }
+
+[package.metadata.docs.rs]
+features = ["alloc", "std", "docsrs"]
+all-features = true
+rustdoc-args = ["--generate-link-to-definition"]
+
+[profile.bench]
+debug = true
+lto = true
+codegen-units = 1
+
+[[test]]
+name = "arithmetic"
+
+[[test]]
+name = "arithmetic_ast"
+required-features = ["alloc"]
+
+[[test]]
+name = "css"
+
+[[test]]
+name = "custom_errors"
+
+[[test]]
+name = "expression_ast"
+required-features = ["alloc"]
+
+[[test]]
+name = "float"
+
+[[test]]
+name = "ini"
+required-features = ["alloc"]
+
+[[test]]
+name = "ini_str"
+required-features = ["alloc"]
+
+[[test]]
+name = "issues"
+required-features = ["alloc"]
+
+[[test]]
+name = "json"
+
+[[test]]
+name = "mp4"
+required-features = ["alloc"]
+
+[[test]]
+name = "multiline"
+required-features = ["alloc"]
+
+[[test]]
+name = "overflow"
+
+[[test]]
+name = "reborrow_fold"
+
+[[test]]
+name = "fnmut"
+required-features = ["alloc"]
+
+[[example]]
+name = "custom_error"
+required-features = ["alloc"]
+path = "examples/custom_error.rs"
+
+[[example]]
+name = "json"
+required-features = ["alloc"]
+path = "examples/json.rs"
+
+[[example]]
+name = "json2"
+required-features = ["alloc"]
+path = "examples/json2.rs"
+
+[[example]]
+name = "json_iterator"
+required-features = ["alloc"]
+path = "examples/json_iterator.rs"
+
+[[example]]
+name = "iterator"
+path = "examples/iterator.rs"
+
+[[example]]
+name = "s_expression"
+path = "examples/s_expression.rs"
+required-features = ["alloc"]
+
+[[example]]
+name = "string"
+required-features = ["alloc"]
+path = "examples/string.rs"
+
+[badges]
+travis-ci = { repository = "Geal/nom" }
+coveralls = { repository = "Geal/nom", branch = "main", service = "github" }
+maintenance = { status = "actively-developed" }
+
+[workspace]
+members = [".", "benchmarks/", "nom-language"]
diff --git b/rust-vendor/nom-7.1.3/.cargo_vcs_info.json b/rust-vendor/nom-7.1.3/.cargo_vcs_info.json
new file mode 100644
index 0000000..c356c32
--- /dev/null
+++ b/rust-vendor/nom-7.1.3/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "869f8972a4383b13cf89574fda28cb7dbfd56517"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/nom-7.1.3/Cargo.toml.orig b/rust-vendor/nom-7.1.3/Cargo.toml.orig
new file mode 100644
index 0000000..c01eeba
--- /dev/null
+++ b/rust-vendor/nom-7.1.3/Cargo.toml.orig
@@ -0,0 +1,142 @@
+[package]
+
+name = "nom"
+version = "7.1.3"
+authors = [ "contact@geoffroycouprie.com" ]
+description = "A byte-oriented, zero-copy, parser combinators library"
+license = "MIT"
+repository = "https://github.com/Geal/nom"
+readme = "README.md"
+documentation = "https://docs.rs/nom"
+keywords = ["parser", "parser-combinators", "parsing", "streaming", "bit"]
+categories = ["parsing"]
+edition = "2018"
+autoexamples = false
+
+# also update in README.md (badge and "Rust version requirements" section)
+rust-version = "1.48"
+
+include = [
+ "CHANGELOG.md",
+ "LICENSE",
+ "README.md",
+ ".gitignore",
+ "Cargo.toml",
+ "src/*.rs",
+ "src/*/*.rs",
+ "tests/*.rs",
+ "doc/nom_recipes.md",
+]
+
+[features]
+alloc = []
+std = ["alloc", "memchr/std", "minimal-lexical/std"]
+default = ["std"]
+docsrs = []
+
+[dependencies.minimal-lexical]
+version = "0.2.0"
+default-features = false
+
+[dependencies.memchr]
+version = "2.3"
+default-features = false
+
+[dev-dependencies]
+doc-comment = "0.3"
+proptest = "1.0.0"
+
+[package.metadata.docs.rs]
+features = ["alloc", "std", "docsrs"]
+all-features = true
+
+[profile.bench]
+debug = true
+lto = true
+codegen-units = 1
+
+[[test]]
+name = "arithmetic"
+
+[[test]]
+name = "arithmetic_ast"
+required-features = ["alloc"]
+
+[[test]]
+name = "css"
+
+[[test]]
+name = "custom_errors"
+
+[[test]]
+name = "float"
+
+[[test]]
+name = "ini"
+required-features = ["alloc"]
+
+[[test]]
+name = "ini_str"
+required-features = ["alloc"]
+
+[[test]]
+name = "issues"
+required-features = ["alloc"]
+
+[[test]]
+name = "json"
+
+[[test]]
+name = "mp4"
+required-features = ["alloc"]
+
+[[test]]
+name = "multiline"
+required-features = ["alloc"]
+
+[[test]]
+name = "overflow"
+
+[[test]]
+name = "reborrow_fold"
+
+[[test]]
+name = "fnmut"
+required-features = ["alloc"]
+
+[[example]]
+name = "custom_error"
+required-features = ["alloc"]
+path = "examples/custom_error.rs"
+
+[[example]]
+name = "json"
+required-features = ["alloc"]
+path = "examples/json.rs"
+
+[[example]]
+name = "json_iterator"
+required-features = ["alloc"]
+path = "examples/json_iterator.rs"
+
+[[example]]
+name = "iterator"
+path = "examples/iterator.rs"
+
+[[example]]
+name = "s_expression"
+path = "examples/s_expression.rs"
+required-features = ["alloc"]
+
+[[example]]
+name = "string"
+required-features = ["alloc"]
+path = "examples/string.rs"
+
+[badges]
+travis-ci = { repository = "Geal/nom" }
+coveralls = { repository = "Geal/nom", branch = "main", service = "github" }
+maintenance = { status = "actively-developed" }
+
+[workspace]
+members = [".", "benchmarks/"]
diff --git b/rust-vendor/notify/.cargo_vcs_info.json b/rust-vendor/notify/.cargo_vcs_info.json
new file mode 100644
index 0000000..8be7379
--- /dev/null
+++ b/rust-vendor/notify/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a1d7c2d8f80786679d58ec6d5986a1d4278bc8cf"
+ },
+ "path_in_vcs": "notify"
+}
\ No newline at end of file
diff --git b/rust-vendor/notify/Cargo.toml.orig b/rust-vendor/notify/Cargo.toml.orig
new file mode 100644
index 0000000..0c50132
--- /dev/null
+++ b/rust-vendor/notify/Cargo.toml.orig
@@ -0,0 +1,59 @@
+[package]
+name = "notify"
+version = "8.2.0"
+description = "Cross-platform filesystem notification library"
+documentation = "https://docs.rs/notify"
+readme = "../README.md"
+license = "CC0-1.0"
+keywords = ["events", "filesystem", "notify", "watch"]
+categories = ["filesystem"]
+authors = [
+ "Félix Saparelli <me@passcod.name>",
+ "Daniel Faust <hessijames@gmail.com>",
+ "Aron Heinecke <Ox0p54r36@t-online.de>"
+]
+rust-version.workspace = true
+edition.workspace = true
+homepage.workspace = true
+repository.workspace = true
+
+[features]
+default = ["macos_fsevent"]
+serde = ["notify-types/serde"]
+macos_kqueue = ["kqueue", "mio"]
+macos_fsevent = ["fsevent-sys"]
+serialization-compat-6 = ["notify-types/serialization-compat-6"]
+
+[dependencies]
+notify-types.workspace = true
+crossbeam-channel = { workspace = true, optional = true }
+flume = { workspace = true, optional = true }
+libc.workspace = true
+log.workspace = true
+walkdir.workspace = true
+
+[target.'cfg(any(target_os="linux", target_os="android"))'.dependencies]
+inotify = { workspace = true, default-features = false }
+mio.workspace = true
+
+[target.'cfg(target_os="macos")'.dependencies]
+bitflags.workspace = true
+fsevent-sys = { workspace = true, optional = true }
+kqueue = { workspace = true, optional = true }
+mio = { workspace = true, optional = true }
+
+[target.'cfg(windows)'.dependencies]
+windows-sys = { workspace = true, features = ["Win32_System_Threading", "Win32_Foundation", "Win32_Storage_FileSystem", "Win32_Security", "Win32_System_WindowsProgramming", "Win32_System_IO"] }
+
+[target.'cfg(any(target_os="freebsd", target_os="openbsd", target_os = "netbsd", target_os = "dragonflybsd", target_os = "ios"))'.dependencies]
+kqueue.workspace = true
+mio.workspace = true
+
+[dev-dependencies]
+serde_json.workspace = true
+tempfile.workspace = true
+nix.workspace = true
+insta.workspace = true
+
+[target.'cfg(target_os = "windows")'.dev-dependencies]
+trash.workspace = true
diff --git b/rust-vendor/notify-types/.cargo_vcs_info.json b/rust-vendor/notify-types/.cargo_vcs_info.json
new file mode 100644
index 0000000..cc121bf
--- /dev/null
+++ b/rust-vendor/notify-types/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "c38f28ae50d2a034ba5dde9bf4e6039d9a1c9642"
+ },
+ "path_in_vcs": "notify-types"
+}
\ No newline at end of file
diff --git b/rust-vendor/notify-types/Cargo.toml.orig b/rust-vendor/notify-types/Cargo.toml.orig
new file mode 100644
index 0000000..f011870
--- /dev/null
+++ b/rust-vendor/notify-types/Cargo.toml.orig
@@ -0,0 +1,28 @@
+[package]
+name = "notify-types"
+version = "2.1.0"
+description = "Types used by the notify crate"
+documentation = "https://docs.rs/notify-types"
+readme = "../README.md"
+license = "MIT OR Apache-2.0"
+keywords = ["events", "filesystem", "notify", "watch"]
+categories = ["filesystem"]
+authors = ["Daniel Faust <hessijames@gmail.com>"]
+rust-version.workspace = true
+edition.workspace = true
+homepage.workspace = true
+repository.workspace = true
+
+[features]
+serialization-compat-6 = []
+serde = ["dep:serde", "bitflags/serde"]
+
+[dependencies]
+bitflags = "2"
+serde = { workspace = true, optional = true }
+web-time = { workspace = true, optional = true }
+
+[dev-dependencies]
+serde_json.workspace = true
+insta.workspace = true
+rstest.workspace = true
diff --git b/rust-vendor/nu-ansi-term/.cargo_vcs_info.json b/rust-vendor/nu-ansi-term/.cargo_vcs_info.json
new file mode 100644
index 0000000..5eee35d
--- /dev/null
+++ b/rust-vendor/nu-ansi-term/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a23b71dae8efc17ca89d6bfe86134e15c3b157f5"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/nu-ansi-term/.github/workflows/ci.yml b/rust-vendor/nu-ansi-term/.github/workflows/ci.yml
new file mode 100644
index 0000000..956e450
--- /dev/null
+++ b/rust-vendor/nu-ansi-term/.github/workflows/ci.yml
@@ -0,0 +1,67 @@
+on:
+ pull_request:
+ push:
+ branches:
+ - main
+
+name: Continuous Integration
+
+env:
+ RUSTFLAGS: -D warnings
+
+jobs:
+ ci:
+ name: ${{ matrix.target.name }} [${{ matrix.rust_version }}]
+ runs-on: ${{ matrix.target.os }}
+ strategy:
+ fail-fast: false
+ matrix:
+ rust_version: ["stable", "1.62.1"]
+ target:
+ - name: Linux
+ os: ubuntu-latest
+ extra_flags: --all-features
+ run_tests: true
+
+ - name: Linux (no-std)
+ os: ubuntu-latest
+ extra_flags: --no-default-features
+ run_tests: true
+
+ - name: Windows
+ os: windows-latest
+ extra_flags: --all-features
+ run_tests: true
+
+ - name: Windows (no-std)
+ os: windows-latest
+ extra_flags: --no-default-features
+ run_tests: true
+
+ - name: Bare Metal (no-std)
+ os: ubuntu-latest
+ extra_flags: --no-default-features
+ run_tests: false
+ env:
+ TARGET: thumbv7em-none-eabihf
+
+
+ steps:
+ - uses: actions/checkout@v3
+
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ targets: ${{ matrix.target.env.TARGET || '' }}
+ toolchain: ${{ matrix.rust_version }}
+ components: clippy, rustfmt
+
+ - run: cargo fmt --check --all
+ - run: cargo clippy ${{ matrix.target.extra_flags }}
+ - run: cargo build ${{ matrix.target.extra_flags }}
+
+ - if: matrix.target.run_tests
+ run: |
+ cargo test ${{ matrix.target.extra_flags }}
+ cargo run ${{ matrix.target.extra_flags }} --example 256_colors
+ cargo run ${{ matrix.target.extra_flags }} --example hyperlink
+ cargo run ${{ matrix.target.extra_flags }} --example title
diff --git b/rust-vendor/nu-ansi-term/Cargo.toml.orig b/rust-vendor/nu-ansi-term/Cargo.toml.orig
new file mode 100644
index 0000000..521143b
--- /dev/null
+++ b/rust-vendor/nu-ansi-term/Cargo.toml.orig
@@ -0,0 +1,40 @@
+[package]
+authors = [
+ "ogham@bsago.me",
+ "Ryan Scheel (Havvy) <ryan.havvy@gmail.com>",
+ "Josh Triplett <josh@joshtriplett.org>",
+ "The Nushell Project Developers",
+]
+description = "Library for ANSI terminal colors and styles (bold, underline)"
+edition = "2021"
+rust-version = "1.62.1"
+license = "MIT"
+name = "nu-ansi-term"
+version = "0.50.3"
+repository = "https://github.com/nushell/nu-ansi-term"
+
+[lib]
+doctest = true
+
+[features]
+default = ["std"]
+std = []
+derive_serde_style = ["serde"]
+gnu_legacy = []
+
+[dependencies]
+serde = { version="1.0.152", features=["derive"], optional=true }
+
+[target.'cfg(windows)'.dependencies.windows]
+version = ">=0.59, <=0.61"
+package = "windows-sys"
+features = [
+ "Win32_Foundation",
+ "Win32_System_Console",
+ "Win32_Storage_FileSystem",
+ "Win32_Security"
+]
+
+[dev-dependencies]
+doc-comment = "0.3.3"
+serde_json = "1.0.94"
diff --git b/rust-vendor/num-bigint/.cargo_vcs_info.json b/rust-vendor/num-bigint/.cargo_vcs_info.json
new file mode 100644
index 0000000..e144459
--- /dev/null
+++ b/rust-vendor/num-bigint/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "a25836ec6c341d1aa40c97335842f330b6a62911"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/num-bigint/Cargo.toml.orig b/rust-vendor/num-bigint/Cargo.toml.orig
new file mode 100644
index 0000000..720512a
--- /dev/null
+++ b/rust-vendor/num-bigint/Cargo.toml.orig
@@ -0,0 +1,75 @@
+[package]
+authors = ["The Rust Project Developers"]
+description = "Big integer implementation for Rust"
+documentation = "https://docs.rs/num-bigint"
+homepage = "https://github.com/rust-num/num-bigint"
+keywords = ["mathematics", "numerics", "bignum"]
+categories = [ "algorithms", "data-structures", "science" ]
+license = "MIT OR Apache-2.0"
+name = "num-bigint"
+repository = "https://github.com/rust-num/num-bigint"
+version = "0.4.6"
+readme = "README.md"
+exclude = ["/ci/*", "/.github/*"]
+edition = "2021"
+rust-version = "1.60"
+
+[features]
+default = ["std"]
+std = ["num-integer/std", "num-traits/std"]
+arbitrary = ["dep:arbitrary"]
+quickcheck = ["dep:quickcheck"]
+rand = ["dep:rand"]
+serde = ["dep:serde"]
+
+[package.metadata.docs.rs]
+features = ["std", "serde", "rand", "quickcheck", "arbitrary"]
+rustdoc-args = ["--cfg", "docsrs"]
+
+[[bench]]
+name = "bigint"
+
+[[bench]]
+name = "factorial"
+
+[[bench]]
+name = "gcd"
+
+[[bench]]
+name = "roots"
+
+[[bench]]
+harness = false
+name = "shootout-pidigits"
+
+[dependencies]
+
+[dependencies.num-integer]
+version = "0.1.46"
+default-features = false
+features = ["i128"]
+
+[dependencies.num-traits]
+version = "0.2.18"
+default-features = false
+features = ["i128"]
+
+[dependencies.rand]
+optional = true
+version = "0.8"
+default-features = false
+
+[dependencies.serde]
+optional = true
+version = "1.0"
+default-features = false
+
+[dependencies.quickcheck]
+optional = true
+version = "1"
+default-features = false
+
+[dependencies.arbitrary]
+optional = true
+version = "1"
+default-features = false
diff --git b/rust-vendor/num-conv/.cargo_vcs_info.json b/rust-vendor/num-conv/.cargo_vcs_info.json
new file mode 100644
index 0000000..1486e9a
--- /dev/null
+++ b/rust-vendor/num-conv/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "b43655fc31333d287f0c397ba18d08b658426d65"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/num-conv/Cargo.toml.orig b/rust-vendor/num-conv/Cargo.toml.orig
new file mode 100644
index 0000000..5cda635
--- /dev/null
+++ b/rust-vendor/num-conv/Cargo.toml.orig
@@ -0,0 +1,31 @@
+[package]
+name = "num-conv"
+version = "0.2.0"
+authors = ["Jacob Pratt <jacob@jhpratt.dev>"]
+edition = "2021"
+rust-version = "1.57.0"
+repository = "https://github.com/jhpratt/num-conv"
+keywords = ["cast", "extend", "truncate", "convert", "integer"]
+categories = ["no-std", "no-std::no-alloc", "rust-patterns"]
+readme = "README.md"
+license = "MIT OR Apache-2.0"
+description = """
+`num_conv` is a crate to convert between integer types without using `as` casts. This provides
+better certainty when refactoring, makes the exact behavior of code more explicit, and allows using
+turbofish syntax.
+"""
+include = ["src/**/*", "LICENSE-*"]
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[features]
+
+[lints.rust]
+missing-docs = "warn"
+unreachable-pub = "warn"
+unused = "warn"
+
+[lints.clippy]
+alloc-instead-of-core = "deny"
+std-instead-of-core = "deny"
diff --git b/rust-vendor/num-conv/README.md b/rust-vendor/num-conv/README.md
new file mode 100644
index 0000000..e3d1827
--- /dev/null
+++ b/rust-vendor/num-conv/README.md
@@ -0,0 +1,5 @@
+# num-conv
+
+`num_conv` is a crate to convert between integer types without using `as` casts. This provides
+better certainty when refactoring, makes the exact behavior of code more explicit, and allows using
+turbofish syntax.
diff --git b/rust-vendor/num-integer/.cargo_vcs_info.json b/rust-vendor/num-integer/.cargo_vcs_info.json
new file mode 100644
index 0000000..3ab5785
--- /dev/null
+++ b/rust-vendor/num-integer/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ede2d2cb993e55e7b1c992bfd22ecbf16601a652"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/num-integer/Cargo.toml.orig b/rust-vendor/num-integer/Cargo.toml.orig
new file mode 100644
index 0000000..8c5fc92
--- /dev/null
+++ b/rust-vendor/num-integer/Cargo.toml.orig
@@ -0,0 +1,30 @@
+[package]
+authors = ["The Rust Project Developers"]
+description = "Integer traits and functions"
+documentation = "https://docs.rs/num-integer"
+homepage = "https://github.com/rust-num/num-integer"
+keywords = ["mathematics", "numerics"]
+categories = ["algorithms", "science", "no-std"]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-num/num-integer"
+name = "num-integer"
+version = "0.1.46"
+readme = "README.md"
+exclude = ["/ci/*", "/.github/*"]
+edition = "2018"
+rust-version = "1.31"
+
+[package.metadata.docs.rs]
+features = ["std"]
+
+[dependencies.num-traits]
+version = "0.2.11"
+default-features = false
+features = ["i128"]
+
+[features]
+default = ["std"]
+std = ["num-traits/std"]
+
+# vestigial features, now always in effect
+i128 = []
diff --git b/rust-vendor/num-modular/.cargo_vcs_info.json b/rust-vendor/num-modular/.cargo_vcs_info.json
new file mode 100644
index 0000000..c338e7c
--- /dev/null
+++ b/rust-vendor/num-modular/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "3e3f514294e52fa36d5671290bf91fe05b7c7cea"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/num-modular/.github/workflows/tests.yml b/rust-vendor/num-modular/.github/workflows/tests.yml
new file mode 100644
index 0000000..201ae73
--- /dev/null
+++ b/rust-vendor/num-modular/.github/workflows/tests.yml
@@ -0,0 +1,170 @@
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+
+name: Tests
+
+jobs:
+ check:
+ name: Check
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ rust: [stable, 1.57]
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: ${{ matrix.rust }}
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: check
+ args: --all-features
+
+ test:
+ name: Test
+ strategy:
+ matrix:
+ bits: [16, 32, 64]
+ runs-on: ubuntu-latest
+ env:
+ RUST_BACKTRACE: 1
+ RUSTFLAGS: -D warnings --cfg force_bits="${{ matrix.bits }}$"
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: --all-features
+
+ test-x86:
+ name: Test x86
+ runs-on: ubuntu-latest
+ env:
+ RUST_BACKTRACE: 1
+ RUSTFLAGS: -D warnings
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable-i686-unknown-linux-gnu
+ override: true
+ - run: |
+ sudo apt update
+ sudo apt install gcc-multilib
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+
+ test-x86_64:
+ name: Test x86_64
+ runs-on: ubuntu-latest
+ env:
+ RUST_BACKTRACE: 1
+ RUSTFLAGS: -D warnings
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable-x86_64-unknown-linux-gnu
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+
+ test-no-std:
+ name: Test no-std
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: test
+ args: --no-default-features
+
+ build-aarch64:
+ name: Build aarch64
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ target: aarch64-unknown-linux-gnu
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: build
+ args: --target aarch64-unknown-linux-gnu --all-features --workspace --exclude benchmark
+
+ build-benchmark:
+ name: Build benchmark
+ runs-on: ubuntu-latest
+ env:
+ RUSTFLAGS: -D warnings
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+ - uses: actions-rs/cargo@v1
+ with:
+ command: build
+ args: -p num-modular-bench
+
+ fmt:
+ name: Rustfmt
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+ components: rustfmt
+ - uses: actions-rs/cargo@v1
+ with:
+ command: fmt
+ args: --all -- --check
+
+ clippy:
+ name: Clippy
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: actions-rs/toolchain@v1
+ with:
+ profile: minimal
+ toolchain: stable
+ override: true
+ components: clippy
+ - uses: actions-rs/cargo@v1
+ with:
+ command: clippy
+ args: --all-features --all-targets -- -D warnings
\ No newline at end of file
diff --git b/rust-vendor/num-modular/Cargo.toml.orig b/rust-vendor/num-modular/Cargo.toml.orig
new file mode 100644
index 0000000..5b7cbd5
--- /dev/null
+++ b/rust-vendor/num-modular/Cargo.toml.orig
@@ -0,0 +1,39 @@
+[package]
+name = "num-modular"
+version = "0.6.1"
+edition = "2018"
+
+repository = "https://github.com/cmpute/num-modular"
+keywords = ["mathematics", "numeric", "number-theory", "modular", "montgomery"]
+categories = ["mathematics", "algorithms", "no-std"]
+documentation = "https://docs.rs/num-modular"
+license = "Apache-2.0"
+description = """
+Implementation of efficient integer division and modular arithmetic operations with generic number types.
+Supports various backends including num-bigint, etc..
+"""
+readme = "README.md"
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+num-integer = { version = "0.1.44", optional = true }
+num-traits = { version = "0.2.14", optional = true }
+
+[dependencies.num-bigint]
+optional = true
+version = "0.4.3"
+default-features = false
+
+[dev-dependencies]
+rand = "0.8.4"
+
+[workspace]
+members = [
+ "bench",
+]
+
+[package.metadata.docs.rs]
+all-features = true
+
+[features]
+std = []
diff --git b/rust-vendor/num-prime/.cargo_vcs_info.json b/rust-vendor/num-prime/.cargo_vcs_info.json
new file mode 100644
index 0000000..cbc4392
--- /dev/null
+++ b/rust-vendor/num-prime/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "1bfa13221db129ec0a7fc49ab7f1bb74b6117ba3"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/num-prime/.github/workflows/audit.yml b/rust-vendor/num-prime/.github/workflows/audit.yml
new file mode 100644
index 0000000..4f32036
--- /dev/null
+++ b/rust-vendor/num-prime/.github/workflows/audit.yml
@@ -0,0 +1,13 @@
+name: Security audit
+
+on:
+ schedule:
+ - cron: "0 0 * * *"
+jobs:
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+ - uses: rustsec/audit-check@v2
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
diff --git b/rust-vendor/num-prime/.github/workflows/ci.yml b/rust-vendor/num-prime/.github/workflows/ci.yml
new file mode 100644
index 0000000..fe9b27c
--- /dev/null
+++ b/rust-vendor/num-prime/.github/workflows/ci.yml
@@ -0,0 +1,154 @@
+on: pull_request
+
+name: Continuous integration
+
+jobs:
+ ci:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ rust:
+ - 1.70.0
+ - stable
+ - nightly
+ os: [ubuntu-latest, windows-latest, macos-latest]
+
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ - run: cargo test
+ - run: cargo test --all-features
+ - run: cargo test --features big-table
+ - run: cargo test --no-default-features
+ - run: cargo test --no-default-features --features big-table
+ - run: cargo test --no-default-features --features big-int
+
+ clippy:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ rust:
+ - 1.70.0
+ - stable
+ - nightly
+ os: [ubuntu-latest, windows-latest, macos-latest]
+
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.rust }}
+ components: clippy
+ - run: cargo clippy -- -D warnings
+
+ rustfmt:
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ rust:
+ - stable
+ os: [ubuntu-latest]
+
+ steps:
+ - uses: actions/checkout@v6
+ - run: cargo fmt --check --all
+
+ mathematical_validation:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+ - name: Install Scilab CLI
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y scilab-cli
+ - run: cargo build --release
+ - name: Compare implementation with Scilab
+ run: ./util/validate_with_scilab.sh
+
+ coverage:
+ name: Code Coverage
+ runs-on: ${{ matrix.job.os }}
+ strategy:
+ fail-fast: true
+ matrix:
+ job:
+ - { os: ubuntu-latest , features: unix }
+ - { os: macos-latest , features: macos }
+ - { os: windows-latest , features: windows }
+ steps:
+ - uses: actions/checkout@v6
+ - name: Initialize workflow variables
+ id: vars
+ shell: bash
+ run: |
+ ## VARs setup
+ outputs() { step_id="vars"; for var in "$@" ; do echo steps.${step_id}.outputs.${var}="${!var}"; echo "${var}=${!var}" >> $GITHUB_OUTPUT; done; }
+ # Emulate a nightly toolchain
+ echo "RUSTC_BOOTSTRAP=1" >> "${GITHUB_ENV}"
+ # * specify gnu-type TOOLCHAIN for windows; `grcov` requires gnu-style code coverage data files
+ case ${{ matrix.job.os }} in windows-*) TOOLCHAIN="$TOOLCHAIN-x86_64-pc-windows-gnu" ;; esac;
+ # * use requested TOOLCHAIN if specified
+ if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
+ outputs TOOLCHAIN
+ # target-specific options
+ # * CODECOV_FLAGS
+ CODECOV_FLAGS=$( echo "${{ matrix.job.os }}" | sed 's/[^[:alnum:]]/_/g' )
+ outputs CODECOV_FLAGS
+
+ - name: rust toolchain ~ install
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ components: llvm-tools-preview
+ - name: Test
+ run: cargo test --no-fail-fast
+ env:
+ CARGO_INCREMENTAL: "0"
+ RUSTC_WRAPPER: ""
+ RUSTFLAGS: "-Cinstrument-coverage -Zcoverage-options=branch -Ccodegen-units=1 -Copt-level=0 -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort"
+ RUSTDOCFLAGS: "-Cpanic=abort"
+ LLVM_PROFILE_FILE: "num_prime-%p-%m.profraw"
+ - name: "`grcov` ~ install"
+ id: build_grcov
+ shell: bash
+ run: |
+ git clone --depth=1 https://github.com/mozilla/grcov.git ~/grcov/
+ cd ~/grcov
+ # Hardcode the version of crossbeam-epoch. See
+ # https://github.com/uutils/coreutils/issues/3680
+ # macOS sed rejects sed -i
+ sed -i.bak -e "s|tempfile =|crossbeam-epoch = \"=0.9.8\"\ntempfile =|" Cargo.toml
+ cargo install --path . --locked
+ cd -
+# Uncomment when the upstream issue
+# https://github.com/mozilla/grcov/issues/849 is fixed
+# uses: actions-rs/install@v0.1
+# with:
+# crate: grcov
+# version: latest
+# use-tool-cache: false
+ - name: Generate coverage data (via `grcov`)
+ id: coverage
+ shell: bash
+ run: |
+ ## Generate coverage data
+ COVERAGE_REPORT_DIR="target/debug"
+ COVERAGE_REPORT_FILE="${COVERAGE_REPORT_DIR}/lcov.info"
+ mkdir -p "${COVERAGE_REPORT_DIR}"
+ # display coverage files
+ grcov . --binary-path="${COVERAGE_REPORT_DIR}" --output-type files --ignore build.rs --ignore "vendor/*" --ignore "/*" --ignore "[a-zA-Z]:/*" --excl-br-line "^\s*((debug_)?assert(_eq|_ne)?!|#\[derive\()" | sort --unique
+ # generate coverage report
+ grcov . --binary-path="${COVERAGE_REPORT_DIR}" --output-type lcov --output-path "${COVERAGE_REPORT_FILE}" --branch --ignore build.rs --ignore "vendor/*" --ignore "/*" --ignore "[a-zA-Z]:/*" --excl-br-line "^\s*((debug_)?assert(_eq|_ne)?!|#\[derive\()" --source-dir .
+ echo "report=${COVERAGE_REPORT_FILE}" >> $GITHUB_OUTPUT
+ - name: Upload coverage results (to Codecov.io)
+ uses: codecov/codecov-action@v5
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+ files: ${{ steps.coverage.outputs.report }}
+ flags: ${{ steps.vars.outputs.CODECOV_FLAGS }}
+ name: codecov-umbrella
+ fail_ci_if_error: false
+ verbose: true
+ directory: ./
+ root_dir: ./
diff --git b/rust-vendor/num-prime/.github/workflows/codspeed.yml b/rust-vendor/num-prime/.github/workflows/codspeed.yml
new file mode 100644
index 0000000..d9e59bf
--- /dev/null
+++ b/rust-vendor/num-prime/.github/workflows/codspeed.yml
@@ -0,0 +1,40 @@
+name: CodSpeed
+
+on:
+ push:
+ branches:
+ - "main"
+ pull_request:
+ # `workflow_dispatch` allows CodSpeed to trigger backtest
+ # performance analysis in order to generate initial data.
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ id-token: write
+
+jobs:
+ codspeed:
+ name: Run ${{ matrix.mode }} benchmarks
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ mode: [simulation] # , memory]
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Setup rust toolchain, cache and cargo-codspeed binary
+ uses: moonrepo/setup-rust@v1
+ with:
+ channel: stable
+ cache-target: release
+ bins: cargo-codspeed
+
+ - name: Build the benchmark target(s)
+ run: cargo codspeed build -m ${{ matrix.mode }} -p num-prime-bench
+
+ - name: Run the benchmarks
+ uses: CodSpeedHQ/action@v4
+ with:
+ mode: ${{ matrix.mode }}
+ run: cargo codspeed run -p num-prime-bench
diff --git b/rust-vendor/num-prime/.pre-commit-config.yaml b/rust-vendor/num-prime/.pre-commit-config.yaml
new file mode 100644
index 0000000..845b03f
--- /dev/null
+++ b/rust-vendor/num-prime/.pre-commit-config.yaml
@@ -0,0 +1,51 @@
+# See https://pre-commit.com for more information
+# See https://pre-commit.com/hooks.html for more hooks
+repos:
+ - repo: https://github.com/pre-commit/pre-commit-hooks
+ rev: v5.0.0
+ hooks:
+ - id: check-added-large-files
+ - id: check-executables-have-shebangs
+ - id: check-json
+ exclude: '\.vscode/(cSpell|extensions)\.json' # cSpell.json and extensions.json use comments
+ - id: check-shebang-scripts-are-executable
+ exclude: '.+\.rs' # would be triggered by #![some_attribute]
+ - id: check-symlinks
+ - id: check-toml
+ - id: check-yaml
+ args: [ --allow-multiple-documents ]
+ - id: destroyed-symlinks
+ - id: end-of-file-fixer
+ - id: mixed-line-ending
+ args: [ --fix=lf ]
+ - id: trailing-whitespace
+
+ - repo: https://github.com/mozilla-l10n/moz-fluent-linter
+ rev: v0.4.8
+ hooks:
+ - id: fluent_linter
+ files: \.ftl$
+ args: [--config, .github/fluent_linter_config.yml, src/uu/]
+
+ - repo: local
+ hooks:
+ - id: rust-linting
+ name: Rust linting
+ description: Run cargo fmt on files included in the commit.
+ entry: cargo +stable fmt --
+ pass_filenames: true
+ types: [file, rust]
+ language: system
+ - id: rust-clippy
+ name: Rust clippy
+ description: Run cargo clippy on files included in the commit.
+ entry: cargo +stable clippy --workspace --all-targets --all-features -- -D warnings
+ pass_filenames: false
+ types: [file, rust]
+ language: system
+ - id: cspell
+ name: Code spell checker (cspell)
+ description: Run cspell to check for spelling errors (if available).
+ entry: bash -c 'if command -v cspell >/dev/null 2>&1; then cspell --no-must-find-files -- "$@"; else echo "cspell not found, skipping spell check"; exit 0; fi' --
+ pass_filenames: true
+ language: system
diff --git b/rust-vendor/num-prime/Cargo.toml.orig b/rust-vendor/num-prime/Cargo.toml.orig
new file mode 100644
index 0000000..ec98b4e
--- /dev/null
+++ b/rust-vendor/num-prime/Cargo.toml.orig
@@ -0,0 +1,48 @@
+[workspace.package]
+edition = "2018"
+rust-version = "1.70"
+
+[package]
+name = "num-prime"
+version = "0.5.0"
+edition.workspace = true
+rust-version.workspace = true
+repository = "https://github.com/uutils/num-prime"
+keywords = ["mathematics", "primes", "number-theory", "bigint", "num"]
+categories = ["cryptography", "science", "algorithms"]
+documentation = "https://docs.rs/num-prime"
+license = "Apache-2.0"
+description = """
+Generic and optimized primality test, factorization and various number theoretic functions with arbitrary precision based on `num`.
+"""
+readme = "README.md"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+num-integer = "0.1.44"
+num-traits = "0.2.14"
+num-modular = "0.6.1"
+bitvec = "1.0.0"
+rand = "0.8.4"
+lru = "0.16.3"
+either = "1.6.1"
+
+[dependencies.num-bigint]
+optional = true
+version = "0.4.6"
+features = ["rand"]
+
+[features]
+default = ['big-table', 'big-int']
+big-table = []
+# TODO: use the new cargo feature to override the num-bigint option
+big-int = ['num-bigint', 'num-modular/num-bigint', 'num-modular/num-traits', 'num-modular/num-integer']
+
+[workspace]
+members = [
+ "bench",
+]
+
+[package.metadata.docs.rs]
+all-features = true
diff --git b/rust-vendor/num-traits/.cargo_vcs_info.json b/rust-vendor/num-traits/.cargo_vcs_info.json
new file mode 100644
index 0000000..7ee50d6
--- /dev/null
+++ b/rust-vendor/num-traits/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "7ec3d41d39b28190ec1d42db38021107b3951f3a"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/num-traits/Cargo.toml.orig b/rust-vendor/num-traits/Cargo.toml.orig
new file mode 100644
index 0000000..226d416
--- /dev/null
+++ b/rust-vendor/num-traits/Cargo.toml.orig
@@ -0,0 +1,34 @@
+[package]
+authors = ["The Rust Project Developers"]
+description = "Numeric traits for generic mathematics"
+documentation = "https://docs.rs/num-traits"
+homepage = "https://github.com/rust-num/num-traits"
+keywords = ["mathematics", "numerics"]
+categories = ["algorithms", "science", "no-std"]
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/rust-num/num-traits"
+name = "num-traits"
+version = "0.2.19"
+readme = "README.md"
+build = "build.rs"
+exclude = ["/ci/*", "/.github/*"]
+edition = "2021"
+rust-version = "1.60"
+
+[package.metadata.docs.rs]
+features = ["std"]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[dependencies]
+libm = { version = "0.2.0", optional = true }
+
+[features]
+default = ["std"]
+libm = ["dep:libm"]
+std = []
+
+# vestigial features, now always in effect
+i128 = []
+
+[build-dependencies]
+autocfg = "1"
diff --git b/rust-vendor/num_threads/.cargo_vcs_info.json b/rust-vendor/num_threads/.cargo_vcs_info.json
new file mode 100644
index 0000000..f916a7f
--- /dev/null
+++ b/rust-vendor/num_threads/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "61a6aaec654a9cae7800b39d74fa842f1b56c7df"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/num_threads/Cargo.toml.orig b/rust-vendor/num_threads/Cargo.toml.orig
new file mode 100644
index 0000000..426c735
--- /dev/null
+++ b/rust-vendor/num_threads/Cargo.toml.orig
@@ -0,0 +1,23 @@
+[package]
+name = "num_threads"
+version = "0.1.7"
+authors = ["Jacob Pratt <open-source@jhpratt.dev>"]
+repository = "https://github.com/jhpratt/num_threads"
+categories = ["api-bindings", "hardware-support", "os"]
+license = "MIT OR Apache-2.0"
+description = "A minimal library that determines the number of running threads for the current process."
+include = ["src/**/*", "LICENSE-*"]
+
+[package.metadata.docs.rs]
+all-features = true
+targets = ["x86_64-unknown-linux-gnu"]
+
+[dependencies]
+
+[target.'cfg(any(target_os = "macos", target_os = "ios", target_os = "freebsd"))'.dependencies]
+libc = "0.2.107"
+
+[[test]]
+name = "tests"
+path = "tests.rs"
+harness = false
diff --git b/rust-vendor/once_cell/.cargo_vcs_info.json b/rust-vendor/once_cell/.cargo_vcs_info.json
new file mode 100644
index 0000000..0a3ab9d
--- /dev/null
+++ b/rust-vendor/once_cell/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "29e3d93cf0367fc6c295785b282b8101127a3e16"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/once_cell/.github/workflows/ci.yaml b/rust-vendor/once_cell/.github/workflows/ci.yaml
new file mode 100644
index 0000000..6a998a8
--- /dev/null
+++ b/rust-vendor/once_cell/.github/workflows/ci.yaml
@@ -0,0 +1,28 @@
+name: CI
+on:
+ pull_request:
+ push:
+ branches: ["master", "staging", "trying"]
+
+env:
+ CARGO_INCREMENTAL: 0
+ CARGO_NET_RETRY: 10
+ CI: 1
+ RUST_BACKTRACE: short
+ RUSTFLAGS: -D warnings
+ RUSTUP_MAX_RETRIES: 10
+
+jobs:
+ test:
+ name: Rust
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v2
+ with:
+ fetch-depth: 0 # fetch tags for publish
+ - uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6
+ - run: cargo run -p xtask -- ci
+ env:
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CRATES_IO_TOKEN }}
+ MIRIFLAGS: -Zmiri-strict-provenance
diff --git b/rust-vendor/once_cell/Cargo.toml.orig b/rust-vendor/once_cell/Cargo.toml.orig
new file mode 100644
index 0000000..0dd835c
--- /dev/null
+++ b/rust-vendor/once_cell/Cargo.toml.orig
@@ -0,0 +1,92 @@
+[package]
+name = "once_cell"
+version = "1.21.3"
+authors = ["Aleksey Kladov <aleksey.kladov@gmail.com>"]
+license = "MIT OR Apache-2.0"
+edition = "2021"
+rust-version = "1.65"
+
+description = "Single assignment cells and lazy values."
+readme = "README.md"
+documentation = "https://docs.rs/once_cell"
+
+repository = "https://github.com/matklad/once_cell"
+keywords = ["lazy", "static"]
+categories = ["rust-patterns", "memory-management"]
+
+exclude = ["*.png", "*.svg", "/Cargo.lock.msrv", "rustfmt.toml"]
+
+[workspace]
+members = ["xtask"]
+
+[dependencies]
+parking_lot_core = { version = "0.9.10", optional = true, default-features = false }
+portable-atomic = { version = "1.8", optional = true, default-features = false }
+critical-section = { version = "1.1.3", optional = true }
+
+[dev-dependencies]
+regex = "1.10.6"
+critical-section = { version = "1.1.3", features = ["std"] }
+
+[features]
+default = ["std"]
+
+# Enables `once_cell::sync` module.
+std = ["alloc"]
+
+# Enables `once_cell::race::OnceBox` type.
+alloc = ["race"]
+
+# Enables `once_cell::race` module.
+race = []
+
+# Uses parking_lot to implement once_cell::sync::OnceCell.
+# This makes no speed difference, but makes each OnceCell<T>
+# up to 16 bytes smaller, depending on the size of the T.
+parking_lot = ["dep:parking_lot_core"]
+
+# Uses `portable-atomic` to implement `race` module. in
+# `#![no_std]` mode. Please read `portable-atomic` docs carefully
+# before enabling this feature.
+portable-atomic = ["dep:portable-atomic"]
+
+# Uses `critical-section` to implement `sync` module. in
+# `#![no_std]` mode. Please read `critical-section` docs carefully
+# before enabling this feature.
+# `portable-atomic` feature is enabled for backwards compatibility.
+critical-section = ["dep:critical-section", "portable-atomic"]
+
+# Enables semver-exempt APIs of this crate.
+# At the moment, this feature is unused.
+unstable = []
+
+# Only for backwards compatibility.
+atomic-polyfill = ["critical-section"]
+
+[[example]]
+name = "bench"
+required-features = ["std"]
+
+[[example]]
+name = "bench_acquire"
+required-features = ["std"]
+
+[[example]]
+name = "lazy_static"
+required-features = ["std"]
+
+[[example]]
+name = "reentrant_init_deadlocks"
+required-features = ["std"]
+
+[[example]]
+name = "regex"
+required-features = ["std"]
+
+[[example]]
+name = "test_synchronization"
+required-features = ["std"]
+
+[package.metadata.docs.rs]
+all-features = true
+rustdoc-args = ["--generate-link-to-definition"]
diff --git b/rust-vendor/onig/.cargo_vcs_info.json b/rust-vendor/onig/.cargo_vcs_info.json
new file mode 100644
index 0000000..b038ddc
--- /dev/null
+++ b/rust-vendor/onig/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ed05d7ac1a1a138c6d9c46b451b9d9bea0fbe0b1"
+ },
+ "path_in_vcs": "onig"
+}
\ No newline at end of file
diff --git b/rust-vendor/onig/Cargo.toml.orig b/rust-vendor/onig/Cargo.toml.orig
new file mode 100644
index 0000000..5508113
--- /dev/null
+++ b/rust-vendor/onig/Cargo.toml.orig
@@ -0,0 +1,42 @@
+[package]
+name = "onig"
+version = "6.5.1"
+edition = "2021"
+rust-version = "1.70.0"
+authors = [
+ "Will Speak <will@willspeak.me>",
+ "Ivan Ivashchenko <defuz@me.com>"
+]
+
+description = """
+Rust-Onig is a set of Rust bindings for the
+Oniguruma regular expression library. Oniguruma
+is a modern regex library with support for
+multiple character encodings and regex syntaxes.
+"""
+repository = "https://github.com/iwillspeak/rust-onig"
+documentation = "https://docs.rs/onig/"
+readme = "../README.md"
+license = "MIT"
+
+[features]
+default = ["generate"]
+std-pattern = []
+# include regexec()
+posix-api = ["onig_sys/posix-api"]
+# Make Oniguruma print debug output for parsing/compiling and executing
+print-debug = ["onig_sys/print-debug"]
+# generate headers with bindgen
+generate = ["onig_sys/generate"]
+
+[dependencies]
+bitflags = "2.4.0"
+once_cell = "1.12"
+
+[target.'cfg(windows)'.dependencies]
+libc = "0.2"
+
+[dependencies.onig_sys]
+version = "69.9.1"
+path = "../onig_sys"
+default-features = false
diff --git b/rust-vendor/onig_sys/.cargo_vcs_info.json b/rust-vendor/onig_sys/.cargo_vcs_info.json
new file mode 100644
index 0000000..eed543f
--- /dev/null
+++ b/rust-vendor/onig_sys/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "ed05d7ac1a1a138c6d9c46b451b9d9bea0fbe0b1"
+ },
+ "path_in_vcs": "onig_sys"
+}
\ No newline at end of file
diff --git b/rust-vendor/onig_sys/Cargo.toml.orig b/rust-vendor/onig_sys/Cargo.toml.orig
new file mode 100644
index 0000000..19593b2
--- /dev/null
+++ b/rust-vendor/onig_sys/Cargo.toml.orig
@@ -0,0 +1,40 @@
+[package]
+name = "onig_sys"
+version = "69.9.1"
+edition = "2021"
+rust-version = "1.70.0"
+authors = [
+ "Will Speak <will@willspeak.me>",
+ "Ivan Ivashchenko <defuz@me.com>"
+]
+build = "build.rs"
+links = "onig"
+
+description = """
+The `onig_sys` crate contains raw rust bindings to the
+oniguruma library. This crate exposes a set of unsafe
+functions which can then be used by other crates to
+create safe wrappers around Oniguruma.
+
+You probably don't want to link to this crate directly;
+instead check out the `onig` crate.
+"""
+categories = ["external-ffi-bindings"]
+repository = "https://github.com/iwillspeak/rust-onig"
+documentation = "https://rust-onig.github.io/rust-onig/onig_sys/"
+readme = "../README.md"
+license = "MIT"
+
+[build-dependencies]
+bindgen = { version = "0.71", optional = true, features = [ "runtime" ] }
+pkg-config = "^0.3.16"
+cc = "1.0"
+
+[features]
+default = ["generate"]
+# Make Oniguruma print debug output for parsing/compiling and executing
+print-debug = []
+# include regexec(), which conflicts with libgit2
+posix-api = []
+# generate bindings with bindgen
+generate = ["bindgen"]
diff --git b/rust-vendor/onig_sys/oniguruma/.github/workflows/cifuzz.yml b/rust-vendor/onig_sys/oniguruma/.github/workflows/cifuzz.yml
new file mode 100644
index 0000000..362e3f8
--- /dev/null
+++ b/rust-vendor/onig_sys/oniguruma/.github/workflows/cifuzz.yml
@@ -0,0 +1,36 @@
+name: CIFuzz
+on:
+ pull_request:
+ branches:
+ - master
+jobs:
+ Fuzzing:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ sanitizer: [address, undefined, memory]
+ steps:
+ - name: Build Fuzzers (${{ matrix.sanitizer }})
+ id: build
+ uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
+ with:
+ oss-fuzz-project-name: 'oniguruma'
+ dry-run: false
+ allowed-broken-targets-percentage: 0
+ sanitizer: ${{ matrix.sanitizer }}
+ language: c
+ - name: Run Fuzzers (${{ matrix.sanitizer }})
+ uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
+ with:
+ oss-fuzz-project-name: 'oniguruma'
+ fuzz-seconds: 600
+ dry-run: false
+ sanitizer: ${{ matrix.sanitizer }}
+ language: c
+ - name: Upload Crash
+ uses: actions/upload-artifact@v1
+ if: failure() && steps.build.outcome == 'success'
+ with:
+ name: ${{ matrix.sanitizer }}-artifacts
+ path: ./out/artifacts
diff --git b/rust-vendor/onig_sys/oniguruma/.github/workflows/codeql.yml b/rust-vendor/onig_sys/oniguruma/.github/workflows/codeql.yml
new file mode 100644
index 0000000..8212ed1
--- /dev/null
+++ b/rust-vendor/onig_sys/oniguruma/.github/workflows/codeql.yml
@@ -0,0 +1,41 @@
+name: "CodeQL"
+
+on:
+ push:
+ branches: [ "master" ]
+ pull_request:
+ branches: [ "master" ]
+ schedule:
+ - cron: "16 9 * * 0"
+
+jobs:
+ analyze:
+ name: Analyze
+ runs-on: ubuntu-latest
+ permissions:
+ actions: read
+ contents: read
+ security-events: write
+
+ strategy:
+ fail-fast: false
+ matrix:
+ language: [ cpp, python ]
+
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Initialize CodeQL
+ uses: github/codeql-action/init@v2
+ with:
+ languages: ${{ matrix.language }}
+ queries: +security-and-quality
+
+ - name: Autobuild
+ uses: github/codeql-action/autobuild@v2
+
+ - name: Perform CodeQL Analysis
+ uses: github/codeql-action/analyze@v2
+ with:
+ category: "/language:${{ matrix.language }}"
diff --git b/rust-vendor/onig_sys/oniguruma/.gitignore b/rust-vendor/onig_sys/oniguruma/.gitignore
new file mode 100644
index 0000000..71ffb4c
--- /dev/null
+++ b/rust-vendor/onig_sys/oniguruma/.gitignore
@@ -0,0 +1,85 @@
+Makefile
+autom4te.cache/
+ltmain.sh
+stamp-h1
+configure
+config.status
+config.h
+config.h.in
+onig-config
+libtool
+aclocal.m4
+Makefile.in
+.python-version
+*.o
+*.obj
+*.so
+*.lo
+*.la
+*.pc
+*.log
+*.trs
+*.dll
+*.lib
+*.exe
+*.exp
+*.gcno
+*.gcda
+*.gcov
+*~
+.libs/
+.deps/
+/build
+/onig-*.tar.gz
+m4/*.m4
+/coverage
+/coverage.info
+/fuzzers
+/.vscode
+
+# src/
+/src/unicode_fold?_key.gperf
+/src/unicode_unfold_key.gperf
+/src/UNICODE_PROPERTIES
+/src/*.txt
+/src/mktable
+
+# test/
+/test/test_utf8
+/test/test_options
+/test/testc
+/test/testcu
+/test/testp
+/test/test_regset
+/test/test_syntax
+/test/test_back
+/test/kofu-utf8.txt
+
+# sample/
+/sample/crnl
+/sample/encode
+/sample/listcap
+/sample/names
+/sample/posix
+/sample/simple
+/sample/sql
+/sample/syntax
+/sample/user_property
+/sample/callout
+/sample/echo
+/sample/count
+/sample/bug_fix
+/sample/regset
+/sample/scan
+/sample/callback_each_match
+/sample/log*
+
+/harnesses/utf16*.dict
+/harnesses/fuzzer-*
+/harnesses/read-*
+/harnesses/libfuzzer-onig
+/harnesses/libfuzzer-onig-full
+/harnesses/slow-unit-*
+/harnesses/timeout-*
+/harnesses/crash-*
+/harnesses/oom-*
diff --git b/rust-vendor/onig_sys/oniguruma/.travis.yml b/rust-vendor/onig_sys/oniguruma/.travis.yml
new file mode 100644
index 0000000..be21241
--- /dev/null
+++ b/rust-vendor/onig_sys/oniguruma/.travis.yml
@@ -0,0 +1,17 @@
+language: c
+
+compiler:
+ - gcc
+ - clang
+
+install: true
+
+branches:
+ except:
+ - 5.9.6
+
+before_script:
+ - autoreconf -fi
+
+script:
+ - ./configure && make && make all-test
diff --git b/rust-vendor/onig_sys/oniguruma/m4/.whatever b/rust-vendor/onig_sys/oniguruma/m4/.whatever
new file mode 100644
index 0000000..e69de29
diff --git b/rust-vendor/ordered-multimap/.cargo/config.toml b/rust-vendor/ordered-multimap/.cargo/config.toml
new file mode 100644
index 0000000..df3f0bc
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.cargo/config.toml
@@ -0,0 +1,26 @@
+[target.'cfg(all())']
+rustflags = [
+ "-Wabsolute_paths_not_starting_with_crate",
+ "-Welided_lifetimes_in_paths",
+ "-Wexplicit_outlives_requirements",
+ "-Wkeyword_idents",
+ "-Wmacro_use_extern_crate",
+ "-Wmeta_variable_misuse",
+ "-Wmissing_abi",
+ "-Wmissing_debug_implementations",
+ "-Wmissing_docs",
+ "-Wnon_ascii_idents",
+ "-Wnoop_method_call",
+ "-Wpointer_structural_match",
+ "-Wsingle_use_lifetimes",
+ "-Wtrivial_casts",
+ "-Wtrivial_numeric_casts",
+ "-Wunsafe_code",
+ "-Wunsafe_op_in_unsafe_fn",
+ "-Wunused_extern_crates",
+ "-Wunused_import_braces",
+ "-Wunused_lifetimes",
+ "-Wunused_qualifications",
+ "-Wunused_results",
+ "-Wvariant_size_differences"
+]
diff --git b/rust-vendor/ordered-multimap/.cargo_vcs_info.json b/rust-vendor/ordered-multimap/.cargo_vcs_info.json
new file mode 100644
index 0000000..8922f0a
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "22e999f74374eb8f3cfe47650d454c5b90eb64b6"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/bug_report.md b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/bug_report.md
new file mode 100644
index 0000000..c259c5c
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/bug_report.md
@@ -0,0 +1,43 @@
+---
+name: Bug report
+about: Create a report to help us improve
+title: ''
+labels: ["S-Pending", "T-Bug"]
+assignees: ''
+
+---
+
+## Bug description
+
+<!-- A clear and concise description of what the bug is. -->
+
+- Would you like to work on a fix? [y/n]
+
+## To Reproduce
+
+Steps to reproduce the behavior:
+
+1. ...
+2. ...
+3. ...
+4. ...
+
+<!-- Make sure you are able to reproduce the bug in the main branch, too. -->
+
+## Expected behavior
+
+<!-- A clear and concise description of what you expected to happen. -->
+
+## Screenshots
+
+<!-- If applicable, add screenshots to help explain your problem. -->
+
+## Environment
+
+<!-- Please fill the following information. -->
+
+- ordered-multimap version: [e.g. 0.1.0]
+
+## Additional context
+
+<!-- Add any other context about the problem here. -->
diff --git b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/config.yml b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/config.yml
new file mode 100644
index 0000000..0086358
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/config.yml
@@ -0,0 +1 @@
+blank_issues_enabled: true
diff --git b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/feature_request.md b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..d949193
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.github/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,28 @@
+---
+name: Feature request
+about: Suggest an idea for this project
+title: ''
+labels: ["S-Pending", "T-Feature/Enhancement"]
+assignees: ''
+
+---
+
+## Motivations
+
+<!--
+If your feature request is related to a problem, please describe it.
+-->
+
+- Would you like to implement this feature? [y/n]
+
+## Solution
+
+<!-- Describe the solution you'd like. -->
+
+## Alternatives
+
+<!-- Describe any alternative solutions or features you've considered. -->
+
+## Additional context
+
+<!-- Add any other context or screenshots about the feature request here. -->
diff --git b/rust-vendor/ordered-multimap/.github/dependabot.yml b/rust-vendor/ordered-multimap/.github/dependabot.yml
new file mode 100644
index 0000000..e669886
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.github/dependabot.yml
@@ -0,0 +1,15 @@
+version: 2
+updates:
+ - package-ecosystem: "cargo"
+ # Look for `Cargo.toml` and `Cargo.lock` in the root directory
+ directory: "/"
+ # Check for updates every Monday
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 10
+ - package-ecosystem: "github-actions"
+ directory: "/"
+ # Check for updates every Monday
+ schedule:
+ interval: "weekly"
+ open-pull-requests-limit: 10
diff --git b/rust-vendor/ordered-multimap/.github/workflows/audit.yml b/rust-vendor/ordered-multimap/.github/workflows/audit.yml
new file mode 100644
index 0000000..3202482
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.github/workflows/audit.yml
@@ -0,0 +1,27 @@
+name: Security audit
+
+on:
+ schedule:
+ # Runs at 00:00 UTC everyday
+ - cron: '0 0 * * *'
+ push:
+ paths:
+ - '**/Cargo.toml'
+ - '**/Cargo.lock'
+ pull_request:
+jobs:
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - name: Install Rust
+ uses: actions-rs/toolchain@v1
+ with:
+ toolchain: stable
+ profile: minimal
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - uses: actions-rs/audit-check@v1
+ with:
+ token: ${{ secrets.GITHUB_TOKEN }}
diff --git b/rust-vendor/ordered-multimap/.github/workflows/cd.yml b/rust-vendor/ordered-multimap/.github/workflows/cd.yml
new file mode 100644
index 0000000..ecdc2cd
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.github/workflows/cd.yml
@@ -0,0 +1,24 @@
+name: CD
+
+on:
+ push:
+ tags:
+ - '[v]?[0-9]+.[0-9]+.[0-9]+'
+
+jobs:
+ publish-cargo:
+ name: Publishing to Cargo
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ profile: minimal
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - uses: actions-rs/cargo@v1
+ with:
+ command: publish
+ args: --token ${{ secrets.CARGO_API_KEY }}
diff --git b/rust-vendor/ordered-multimap/.github/workflows/ci.yml b/rust-vendor/ordered-multimap/.github/workflows/ci.yml
new file mode 100644
index 0000000..fcb94bf
--- /dev/null
+++ b/rust-vendor/ordered-multimap/.github/workflows/ci.yml
@@ -0,0 +1,93 @@
+name: CI
+
+on:
+ pull_request:
+ push:
+
+jobs:
+ test:
+ strategy:
+ matrix:
+ os: [windows-latest, ubuntu-latest]
+ runs-on: ${{ matrix.os }}
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Build & run tests
+ run: cargo test --all-features
+ - name: Build without libstd
+ run: cargo build --no-default-features
+ - name: Build without libstd with serde
+ run: cargo build --no-default-features --features serde
+ miri:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ components: miri
+ override: true
+ - name: Test with Miri
+ run: cargo miri test --all-features
+ mutation:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Get number of CPU cores
+ uses: SimenB/github-actions-cpu-cores@v2
+ id: cpu-cores
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Install cargo-mutants
+ run: cargo install cargo-mutants
+ - name: Run mutant tests
+ run: cargo mutants --jobs ${{ steps.cpu-cores.outputs.count }} -- --all-features
+ - name: Archive results
+ uses: actions/upload-artifact@v3
+ if: failure()
+ with:
+ name: mutation-report
+ path: mutants.out
+ lint:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ components: rustfmt, clippy
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Run clippy
+ run: cargo clippy --workspace --all-targets --all-features -- -D warnings
+ - name: Check format
+ run: cargo fmt --all -- --check
+ coverage:
+ runs-on: ubuntu-latest
+ env:
+ CARGO_TERM_COLOR: always
+ steps:
+ - uses: actions/checkout@v4
+ - uses: actions-rs/toolchain@v1
+ with:
+ toolchain: nightly
+ components: llvm-tools-preview
+ override: true
+ - uses: Swatinem/rust-cache@v2
+ - name: Install cargo-llvm-cov
+ uses: taiki-e/install-action@cargo-llvm-cov
+ - name: Generate code coverage
+ run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
+ - name: Upload coverage to Codecov
+ uses: codecov/codecov-action@v3
+ with:
+ files: lcov.info
+ fail_ci_if_error: true
diff --git b/rust-vendor/ordered-multimap/Cargo.toml.orig b/rust-vendor/ordered-multimap/Cargo.toml.orig
new file mode 100644
index 0000000..b19d42a
--- /dev/null
+++ b/rust-vendor/ordered-multimap/Cargo.toml.orig
@@ -0,0 +1,24 @@
+[package]
+name = "ordered-multimap"
+version = "0.7.3"
+authors = ["Scott Godwin <sgodwincs@gmail.com>"]
+license = "MIT"
+edition = "2021"
+repository = "https://github.com/sgodwincs/ordered-multimap-rs"
+description = "Insertion ordered multimap"
+readme = "README.md"
+categories = ["data-structures"]
+rust-version = "1.64.0"
+
+[dependencies]
+dlv-list = { version = "0.5", default-features = false }
+hashbrown = { version = "0.14.0", default-features = false }
+serde = { version = "1", optional = true, default-features = false }
+
+[features]
+default = ["std"]
+std = ["dlv-list/std"]
+
+[dev-dependencies]
+coverage-helper = "0.2.0"
+serde_test = "1.0.144"
diff --git b/rust-vendor/os_display/.cargo_vcs_info.json b/rust-vendor/os_display/.cargo_vcs_info.json
new file mode 100644
index 0000000..b127889
--- /dev/null
+++ b/rust-vendor/os_display/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "28e93a3a1e32b9895748e1192143bfa472a7226a"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/os_display/Cargo.toml.orig b/rust-vendor/os_display/Cargo.toml.orig
new file mode 100644
index 0000000..542f770
--- /dev/null
+++ b/rust-vendor/os_display/Cargo.toml.orig
@@ -0,0 +1,36 @@
+[package]
+name = "os_display"
+version = "0.1.4"
+authors = ["Jan Verbeek <jan.verbeek@posteo.nl>"]
+description = "Display strings in a safe platform-appropriate way"
+keywords = ["shell", "cli", "terminal", "text", "no_std"]
+categories = ["value-formatting", "text-processing"]
+repository = "https://github.com/blyxxyz/os_display"
+documentation = "https://docs.rs/os_display"
+license = "MIT"
+readme = "README.md"
+edition = "2021"
+rust-version = "1.66"
+exclude = ["fuzz", ".gitignore", ".github", "scripts"]
+
+[dependencies]
+unicode-width = { version = "0.2.0", default-features = false }
+
+[features]
+default = ["native", "alloc", "std"]
+
+# Enable quoting for OsStr and in the style of the current platform
+native = []
+
+# Enable bash/ksh-style quoting
+unix = []
+
+# Enable PowerShell-style quoting
+windows = []
+
+# Use the relevant parts of the standard library
+alloc = []
+std = ["alloc"]
+
+[package.metadata.docs.rs]
+all-features = true
diff --git b/rust-vendor/outref/.cargo_vcs_info.json b/rust-vendor/outref/.cargo_vcs_info.json
new file mode 100644
index 0000000..b3ba106
--- /dev/null
+++ b/rust-vendor/outref/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "cbbce9e3977ef154023bbda0660027c5e523766a"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/outref/.github/dependabot.yml b/rust-vendor/outref/.github/dependabot.yml
new file mode 100644
index 0000000..e522013
--- /dev/null
+++ b/rust-vendor/outref/.github/dependabot.yml
@@ -0,0 +1,15 @@
+# To get started with Dependabot version updates, you'll need to specify which
+# package ecosystems to update and where the package manifests are located.
+# Please see the documentation for all configuration options:
+# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
+
+version: 2
+updates:
+ - package-ecosystem: "cargo" # See documentation for possible values
+ directory: "/" # Location of package manifests
+ schedule:
+ interval: "monthly"
+ groups:
+ dependencies:
+ patterns:
+ - "*"
diff --git b/rust-vendor/outref/.github/workflows/ci.yml b/rust-vendor/outref/.github/workflows/ci.yml
new file mode 100644
index 0000000..bcb2ccb
--- /dev/null
+++ b/rust-vendor/outref/.github/workflows/ci.yml
@@ -0,0 +1,50 @@
+name: CI
+
+on:
+ push:
+ branches:
+ - main
+ - 'feat/**'
+ pull_request:
+ branches:
+ - main
+ - 'feat/**'
+ schedule:
+ - cron: '0 0 * * 0' # at midnight of each sunday
+ workflow_dispatch:
+
+jobs:
+ develop:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: taiki-e/install-action@just
+ - uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: rustfmt, clippy, miri
+ - uses: Swatinem/rust-cache@v2
+ - run: just ci
+
+ msrv:
+ runs-on: ubuntu-latest
+ strategy:
+ fail-fast: false
+ matrix:
+ toolchain:
+ - 1.63.0 # MSRV
+ - stable
+ steps:
+ - uses: actions/checkout@v4
+ - uses: taiki-e/install-action@just
+ - uses: dtolnay/rust-toolchain@master
+ with:
+ toolchain: ${{ matrix.toolchain }}
+ - uses: Swatinem/rust-cache@v2
+ - run: just test
+
+ audit:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: taiki-e/install-action@cargo-audit
+ - run: cargo audit -D warnings
diff --git b/rust-vendor/outref/.github/workflows/publish.yml b/rust-vendor/outref/.github/workflows/publish.yml
new file mode 100644
index 0000000..20c873f
--- /dev/null
+++ b/rust-vendor/outref/.github/workflows/publish.yml
@@ -0,0 +1,16 @@
+name: Publish
+
+on:
+ release:
+ types: [published]
+
+jobs:
+ publish:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - uses: taiki-e/install-action@just
+ - uses: dtolnay/rust-toolchain@nightly
+ - run: cargo login ${{ secrets.CRATES_IO_API_TOKEN }}
+ - run: cargo publish --dry-run
+ - run: cargo publish
diff --git b/rust-vendor/outref/Cargo.toml.orig b/rust-vendor/outref/Cargo.toml.orig
new file mode 100644
index 0000000..16c3a7d
--- /dev/null
+++ b/rust-vendor/outref/Cargo.toml.orig
@@ -0,0 +1,10 @@
+[package]
+name = "outref"
+version = "0.5.2"
+edition = "2021"
+description = "Out reference"
+license = "MIT"
+repository = "https://github.com/Nugine/outref"
+keywords = ["write-only", "reference", "slice"]
+categories = ["no-std", "rust-patterns"]
+rust-version = "1.63.0"
diff --git b/rust-vendor/parking_lot/.cargo_vcs_info.json b/rust-vendor/parking_lot/.cargo_vcs_info.json
new file mode 100644
index 0000000..0570303
--- /dev/null
+++ b/rust-vendor/parking_lot/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d7828fff7b5d6327ae608e82db45f888b344449a"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/parking_lot/.github/workflows/release-plz.yml b/rust-vendor/parking_lot/.github/workflows/release-plz.yml
new file mode 100644
index 0000000..867c0ab
--- /dev/null
+++ b/rust-vendor/parking_lot/.github/workflows/release-plz.yml
@@ -0,0 +1,53 @@
+name: Release-plz
+
+on:
+ push:
+ branches:
+ - master
+
+jobs:
+ release-plz-release:
+ name: Release-plz release
+ runs-on: ubuntu-latest
+ if: ${{ github.repository_owner == 'Amanieu' }}
+ permissions:
+ contents: write
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ - name: Run release-plz
+ uses: release-plz/action@v0.5
+ with:
+ command: release
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
+
+ release-plz-pr:
+ name: Release-plz PR
+ runs-on: ubuntu-latest
+ if: ${{ github.repository_owner == 'Amanieu' }}
+ permissions:
+ pull-requests: write
+ contents: write
+ concurrency:
+ group: release-plz-${{ github.ref }}
+ cancel-in-progress: false
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ - name: Install Rust toolchain
+ uses: dtolnay/rust-toolchain@stable
+ - name: Run release-plz
+ uses: release-plz/action@v0.5
+ with:
+ command: release-pr
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
diff --git b/rust-vendor/parking_lot/.github/workflows/rust.yml b/rust-vendor/parking_lot/.github/workflows/rust.yml
new file mode 100644
index 0000000..54f4dcc
--- /dev/null
+++ b/rust-vendor/parking_lot/.github/workflows/rust.yml
@@ -0,0 +1,68 @@
+name: Rust
+
+on:
+ push:
+ branches:
+ - trying
+ - staging
+ pull_request:
+
+env:
+ CARGO_INCREMENTAL: 0
+ RUST_TEST_THREADS: 1
+
+jobs:
+ build_tier_one:
+ runs-on: ${{ matrix.os }}-latest
+ strategy:
+ matrix:
+ os: [ubuntu, macos, windows]
+ channel: [stable, beta, nightly]
+ feature: [arc_lock, serde, deadlock_detection]
+ include:
+ - channel: nightly
+ feature: nightly
+ os: ubuntu
+ - channel: nightly
+ feature: hardware-lock-elision
+ os: ubuntu
+
+ steps:
+ - uses: actions/checkout@v4
+ - run: rustup default ${{ matrix.channel }}
+ - run: cargo build --all
+ - run: cargo test --all
+ - run: cargo build --all --features ${{ matrix.feature }}
+ - run: cargo test --all --features ${{ matrix.feature }}
+ if: matrix.feature == 'nightly'
+ - run: cargo install cargo-msrv
+ - run: cargo msrv --workspace verify
+ build_other_platforms:
+ runs-on: ubuntu-latest
+ strategy:
+ matrix:
+ target:
+ - wasm32-unknown-unknown
+ - x86_64-fortanix-unknown-sgx
+ - x86_64-unknown-redox
+ - x86_64-linux-android
+ steps:
+ - uses: actions/checkout@v4
+ - run: rustup default nightly
+ - run: rustup target add ${{ matrix.target }}
+ - run: cargo build --workspace --target ${{ matrix.target }} --features nightly
+ build_docs:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: rustup default nightly
+ - run: cargo doc --workspace --features arc_lock,serde,deadlock_detection --no-deps -p parking_lot -p parking_lot_core -p lock_api
+ benchmark:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+ - run: rustup default nightly
+ - run: |
+ cd benchmark
+ cargo run --release --bin mutex -- 2 1 0 1 2
+ cargo run --release --bin rwlock -- 1 1 1 0 1 2
diff --git b/rust-vendor/parking_lot/Cargo.toml.orig b/rust-vendor/parking_lot/Cargo.toml.orig
new file mode 100644
index 0000000..f8749ee
--- /dev/null
+++ b/rust-vendor/parking_lot/Cargo.toml.orig
@@ -0,0 +1,42 @@
+[package]
+name = "parking_lot"
+version = "0.12.5"
+authors = ["Amanieu d'Antras <amanieu@gmail.com>"]
+description = "More compact and efficient implementations of the standard synchronization primitives."
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/Amanieu/parking_lot"
+readme = "README.md"
+keywords = ["mutex", "condvar", "rwlock", "once", "thread"]
+categories = ["concurrency"]
+edition = "2021"
+rust-version = "1.71"
+
+[package.metadata.docs.rs]
+features = ["arc_lock", "serde", "deadlock_detection"]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[package.metadata.playground]
+features = ["arc_lock", "serde", "deadlock_detection"]
+
+[dependencies]
+parking_lot_core = { path = "core", version = "0.9.12" }
+lock_api = { path = "lock_api", version = "0.4.14" }
+
+[dev-dependencies]
+rand = "0.8.3"
+
+# Used when testing out serde support.
+bincode = "1.3.3"
+
+[features]
+default = []
+arc_lock = ["lock_api/arc_lock"]
+owning_ref = ["lock_api/owning_ref"]
+nightly = ["parking_lot_core/nightly", "lock_api/nightly"]
+deadlock_detection = ["parking_lot_core/deadlock_detection"]
+serde = ["lock_api/serde"]
+send_guard = []
+hardware-lock-elision = []
+
+[workspace]
+exclude = ["benchmark"]
diff --git b/rust-vendor/parking_lot_core/.cargo_vcs_info.json b/rust-vendor/parking_lot_core/.cargo_vcs_info.json
new file mode 100644
index 0000000..27e848e
--- /dev/null
+++ b/rust-vendor/parking_lot_core/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "d7828fff7b5d6327ae608e82db45f888b344449a"
+ },
+ "path_in_vcs": "core"
+}
\ No newline at end of file
diff --git b/rust-vendor/parking_lot_core/Cargo.toml.orig b/rust-vendor/parking_lot_core/Cargo.toml.orig
new file mode 100644
index 0000000..01014bb
--- /dev/null
+++ b/rust-vendor/parking_lot_core/Cargo.toml.orig
@@ -0,0 +1,33 @@
+[package]
+name = "parking_lot_core"
+version = "0.9.12"
+authors = ["Amanieu d'Antras <amanieu@gmail.com>"]
+description = "An advanced API for creating custom synchronization primitives."
+license = "MIT OR Apache-2.0"
+repository = "https://github.com/Amanieu/parking_lot"
+keywords = ["mutex", "condvar", "rwlock", "once", "thread"]
+categories = ["concurrency"]
+edition = "2021"
+rust-version = "1.71.0"
+
+[package.metadata.docs.rs]
+rustdoc-args = ["--generate-link-to-definition"]
+
+[dependencies]
+cfg-if = "1.0.0"
+smallvec = "1.6.1"
+petgraph = { version = "0.6.0", optional = true }
+backtrace = { version = "0.3.60", optional = true }
+
+[target.'cfg(unix)'.dependencies]
+libc = "0.2.95"
+
+[target.'cfg(target_os = "redox")'.dependencies]
+redox_syscall = "0.5"
+
+[target.'cfg(windows)'.dependencies]
+windows-link = "0.2.0"
+
+[features]
+nightly = []
+deadlock_detection = ["petgraph", "backtrace"]
diff --git b/rust-vendor/parse_datetime/.cargo_vcs_info.json b/rust-vendor/parse_datetime/.cargo_vcs_info.json
new file mode 100644
index 0000000..a7f4e6b
--- /dev/null
+++ b/rust-vendor/parse_datetime/.cargo_vcs_info.json
@@ -0,0 +1,6 @@
+{
+ "git": {
+ "sha1": "f68a01699ef269525a333c57e80b5e554dae5646"
+ },
+ "path_in_vcs": ""
+}
\ No newline at end of file
diff --git b/rust-vendor/parse_datetime/.github/workflows/ci.yml b/rust-vendor/parse_datetime/.github/workflows/ci.yml
new file mode 100644
index 0000000..e6a520a
--- /dev/null
+++ b/rust-vendor/parse_datetime/.github/workflows/ci.yml
@@ -0,0 +1,167 @@
+on: [push, pull_request]
+
+name: Basic CI
+
+env:
+ CARGO_TERM_COLOR: always
+ RUST_MIN_SRV: "1.71.1"
+
+jobs:
+ check:
+ name: cargo check
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macOS-latest, windows-latest]
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ - run: cargo check
+
+ test:
+ name: cargo test
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macOS-latest, windows-latest]
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ - run: cargo test
+
+ fmt:
+ name: cargo fmt --all -- --check
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ - run: rustup component add rustfmt
+ - run: cargo fmt --all -- --check
+
+ clippy:
+ name: cargo clippy -- -D warnings
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macOS-latest, windows-latest]
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ - run: rustup component add clippy
+ - run: cargo clippy --all-targets -- -D warnings
+
+ min_version:
+ name: Minimum Supported Rust Version
+ runs-on: ${{ matrix.os }}
+ strategy:
+ matrix:
+ os: [ubuntu-latest, macOS-latest, windows-latest]
+ steps:
+ - uses: actions/checkout@v6
+ - uses: dtolnay/rust-toolchain@stable
+ with:
+ toolchain: ${{ env.RUST_MIN_SRV }}
+ - run: cargo test
+
+ coverage:
+ name: Code Coverage
+ runs-on: ${{ matrix.job.os }}
+ strategy:
+ fail-fast: true
+ matrix:
+ job:
+ - { os: ubuntu-latest , features: unix }
+ - { os: macos-latest , features: macos }
+ - { os: windows-latest , features: windows }
+ steps:
+ - uses: actions/checkout@v6
+ - name: Initialize workflow variables
+ id: vars
+ shell: bash
+ run: |
+ ## VARs setup
+ outputs() { step_id="vars"; for var in "$@" ; do echo steps.${step_id}.outputs.${var}="${!var}"; echo "${var}=${!var}" >> $GITHUB_OUTPUT; done; }
+ # toolchain
+ TOOLCHAIN="nightly" ## default to "nightly" toolchain (required for certain required unstable compiler flags) ## !maint: refactor when stable channel has needed support
+ # * specify gnu-type TOOLCHAIN for windows; `grcov` requires gnu-style code coverage data files
+ case ${{ matrix.job.os }} in windows-*) TOOLCHAIN="$TOOLCHAIN-x86_64-pc-windows-gnu" ;; esac;
+ # * use requested TOOLCHAIN if specified
+ if [ -n "${{ matrix.job.toolchain }}" ]; then TOOLCHAIN="${{ matrix.job.toolchain }}" ; fi
+ outputs TOOLCHAIN
+ # target-specific options
+ # * CODECOV_FLAGS
+ CODECOV_FLAGS=$( echo "${{ matrix.job.os }}" | sed 's/[^[:alnum:]]/_/g' )
+ outputs CODECOV_FLAGS
+
+ - name: rust toolchain ~ install
+ uses: dtolnay/rust-toolchain@nightly
+ with:
+ components: llvm-tools-preview
+ - name: Test
+ run: cargo test --no-fail-fast
+ env:
+ CARGO_INCREMENTAL: "0"
+ RUSTC_WRAPPER: ""
+ RUSTFLAGS: "-Cinstrument-coverage -Zcoverage-options=branch -Ccodegen-units=1 -Copt-level=0 -Coverflow-checks=off -Zpanic_abort_tests -Cpanic=abort"
+ RUSTDOCFLAGS: "-Cpanic=abort"
+ LLVM_PROFILE_FILE: "parse_datetime-%p-%m.profraw"
+ - name: "`grcov` ~ install"
+ id: build_grcov
+ shell: bash
+ run: |
+ git clone https://github.com/mozilla/grcov.git ~/grcov/
+ cd ~/grcov
+ # Hardcode the version of crossbeam-epoch. See
+ # https://github.com/uutils/coreutils/issues/3680
+ sed -i -e "s|tempfile =|crossbeam-epoch = \"=0.9.8\"\ntempfile =|" Cargo.toml
+ cargo install --path .
+ cd -
+# Uncomment when the upstream issue
+# https://github.com/mozilla/grcov/issues/849 is fixed
+# uses: actions-rs/install@v0.1
+# with:
+# crate: grcov
+# version: latest
+# use-tool-cache: false
+ - name: Generate coverage data (via `grcov`)
+ id: coverage
+ shell: bash
+ run: |
+ ## Generate coverage data
+ COVERAGE_REPORT_DIR="target/debug"
+ COVERAGE_REPORT_FILE="${COVERAGE_REPORT_DIR}/lcov.info"
+ mkdir -p "${COVERAGE_REPORT_DIR}"
+ # display coverage files
+ grcov . --binary-path="${COVERAGE_REPORT_DIR}" --output-type files --ignore build.rs --ignore "vendor/*" --ignore "/*" --ignore "[a-zA-Z]:/*" --excl-br-line "^\s*((debug_)?assert(_eq|_ne)?!|#\[derive\()" | sort --unique
+ # generate coverage report
+ grcov . --binary-path="${COVERAGE_REPORT_DIR}" --output-type lcov --output-path "${COVERAGE_REPORT_FILE}" --branch --ignore build.rs --ignore "vendor/*" --ignore "/*" --ignore "[a-zA-Z]:/*" --excl-br-line "^\s*((debug_)?assert(_eq|_ne)?!|#\[derive\()" --source-dir .
+ echo "report=${COVERAGE_REPORT_FILE}" >> $GITHUB_OUTPUT
+ - name: Upload coverage results (to Codecov.io)
+ uses: codecov/codecov-action@v5
+ with:
+ token: ${{ secrets.CODECOV_TOKEN }}
+
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment